라벨이 docker인 게시물 표시

Docker Compose

도커 컴포즈란 컨테이너 CI 툴로 정의 할 수 있다. 기본적인 사용법은 도커를 cli run 명령으로 사용하던 것을 yml 파일로 정의해 두는 것이다. 기본 사용법 파일명: docker-compose.yml (default) 주의) 탭 사용이 안되니 스페이스 두칸으로 할것 myproject#> vi docker-compose.yml version: '3.0' services:   web:     image: alicek106/compsetest:web     ports:       - 80:80     links:       - mysql:db     command: sudo apachectl -DFOREGROUND   mysql:     image: alicek106/composetest:mysql     command: mysqld * yml 검증 myproject#> docker-compose config * 실행 myproject#> docker-compose up -d -> -p : 프로젝트명 지정 -> -f : 파일명 지정 -> -d : detach mode * 컨테이너 확인 myproject#> docker-compose ps -> 컨테이너 네이밍 규칙: [프로젝트명]_[서비스명]_[서비스내 컨테이너 번호] -> 프로젝트명은 명시적으로 주지 않으면 docker-compse.yml이 있는 폴더명 -> ex) myproject_web_1, myproject_mysql_1, ... * 스케일링 myproject#> docker-compose scale mysql=2 * 삭제 myproject#> docker-compose down yml properties version : 버전(1 / 2 / 2.1 / 3 / 더 ...

Docker Swarm

 두 가지 모드가 있다 클래식 스웜 스웜 모드 차이점 클리식 스웜은 여러 대의 도커 서버를 관리하는 하나의 접근점을 제공 스웜 모드는 MSA 컨테이너를 다루기 위한 클러스터링 제공 클래식 스웜은 분산 코디네이터나 에이전트를 별도로 설치해야 함 스웜 모드는 컨테이너에서 기본적으로 제공 대부분 도커 서버를 클러스터링 해서 사용하기 때문에 스웜 모드로 많이 사용. cf) 분산 코디네이터(Distributed Coordinator) = etcd, zookepper, consul 등 스웜 모드 확인 $> docker info | grep Swarm Swarm: inactive 스웜 모드 클러스터 구축 아래 서버 3개라고 가정 swarm-manager : 10.10.10.111 swarm-worker1 : 10.10.10.201 swarm-worker2 : 10.10.10.202 1번 매니저에서 클러스터 시작 $> sudo docker swarm init --advertise-addr 10.10.10.111 --advertise-addr : 다른 도커에서 접근할 매니저 노드의 IP 출력에 클러스터 등록에 사용할 token이 나온다. ... docker swarm join --token ~~~~ 10.10.10.111 ... 2번 워커 노드에서 클러스터 등록 $> sudo docker swarm join --token {위에 토큰} 10.10.10.111 3번 워커 노드에서 클러스터 등록 $> sudo docker swarm join --token {위에 토큰} 10.10.10.111 1번 매니저에서 등록 노드 확인 $> docker node ls 1번 매니저에서 토큰 확인법 매니저 등록 토큰 $> docker swarm join-token manager $> docker swarm join-token --rotate manager -> 토큰 변경이 필요할때 워커 등록 토큰 $> docker swarm join-tok...

Docker Monitoring

도커 데몬 디버그 모드 $> dockerd -D 수행 명령어 보기 $> docker events $> docker system events ex) 이미지 관련 실행 명령어 보기 $> docker events --filter 'type=image' 자원 사용량 스트림으로 보기 $> docker stats 한번만 출력(no stream) $> docker stats --no-stream 이미지, 컨테이너, 로컬 볼륨 정보 $> docker system df 위 출력에서 사용중이지 않은 이미지 삭제(dangling image 삭제 -> <none>:<none>으로 표시된것) $> docker image prune 사용하지 않는 컨테이너 삭제 $> docker container prune 사용하지 않는 볼륨 삭제 $> docker volume prune CAdvisor https://github.com/google/cadvisor https://hub.docker.com/r/google/cadvisor/ 구글에서 만든 도커 모니터링 도구 그러나 단일 호스트에 대해서만 모니터링이 가능하기 때문에 PaaS로 도커 클러스터를 구축한다면 사용할 수 없음. 그래서 보통은 쿠버네티스나 도커 스웜과 같은 오케스트레이션 툴을 사용하고 Prometheus, InfluxDB 등을 이용해서 데이터를 수집한다.

Docker Deamon

도커 구성 도커 클라이언트 : 도커 cli 도커 데몬 : 실제 도커 프로세스  개발자 --> { (도커 클라이언트) -- /var/run/docker.sock --> (도커 데몬) }                                                                                                           ^                          (원격호스트) ------- curl {ip}:{port}/version ------| # ps aux | grep docker   로 도커 데몬(dockerd) 확인 가능 cf) 우분투는 도커 설치시 도커 데몬이 기본 실행된다. 레드헷 계열을 실행 시켜 줘야 한다. # sudo service docker start 로 실행 가능 # sudo dockerd -H unix://var/run/docker.sock  로 실행 가능 - 데몬은 옵션을 수동 실행시 줄 수도 있지만 /etc/default/docker(우분투)에 설정 파일로 지정 가능  # sudo service docker stop 로 실행 중단 # sudo systemctl enable docker 로  SystemV init 등록 도커 Remote API...

Dockerfile 작성

Dockerfile 작성 한줄에 하나의 명령어 명령어 뒤 옵션 명령어는 위에서 아래로 한 줄씩 차례대로 실행 명령어 대소문자 구분 없음 빌드 context는 Dockerfile이 위치한 디렉터리 ex) FROM ubuntu:14.04 MAINTAINER john123 LABEL "purpose"="practice" RUN apt-get update RUN apt-get install apache2 -y ADD test.html /var/www/html WORKDIR /var/www/html RUN ["/bin/bash", "-c", "echo hello >> test2.html"] EXPOSE 80 CMD apachectl -DFOREGROUND FROM 베이스 이미지(docker run에 사용하는 이름) MAINTAINER 이미지를 생성한 개발자 정보(1.13.0 이전 버전에서만. 이후는 LABEL로) = LABEL maintainer "alicek106 <alicek105@naver.com>" LABEL 이미지 메타데이터. 키:값 형태. docker inspect로 조회 가능 RUN 컨테이너 내부에서 명령어 실행. = RUN ["실행 가능한 파일", "명령줄 인자 1", "명령줄 인자 2", ...] ADD 파일을 이미지에 추가. 추가할 파일은 Dockerfile과 같은 디렉터리(context)에서 가져옴. = ADD ["추가할 파일 1", "추가할 파일 2", ... "컨테이너에 추가할 위치"] WORKDIR cd와 같음. EXPOSE 컨테이너의 포트 설정. 반드시 호스트 포트와 바인딩 되는 것은 아님. CMD 컨테이너 시작시 실행할 명령어. Dockerfile에 한번만 사용 가능. run으로 컨테이너 실행할 때 명령어를 ...

Docker Images

Docker Image 생성 삭제  1. 이미지 생성 $> docker run -it --name commit_test ubuntu:14.04 컨테이너 내 파일 추가 root@abcd1234 /# echo test_first! >> first 2. 이미지 commit # docker commit [옵션] {컨테이너명} [리파지토리[:태그]] $> docker commit -a "abcd123" -m "first commit" commit_test commit_test:first -a : author -m : message 3. 이미지 확인 $> docker images 레이어 구조 확인 $> docker history {라파지토리[:태그]} 4. 이미지 삭제 $> docker rmi {리파지토리[:태그]} 5. 이미지 추출 & 원복 $> docker save -o ubuntu_14.04.tar ubuntu:14.04 $> docker load -i ubuntu_14.04.tar 6. FileSystem 추출 & 원복 $> docker export -o rootFS.tar mycontainer $> docker import rootFS.tar myimage:0.0 Docker Hub (https://hub.docker.com) 1. 이미지 검색 $> docker search {검색어} cf) 도커 이미지의 architecture 확인 $> docker inspect ubuntu | grep "Architecture" 2. 이미지 업로드 1) 도커 허브에 로그인 $> docker login 2) 이미지명에 repository 접두어 추가 $> docker tag my-image:0.0 alicek107/my-image:0.0 cf) 이미지 이름 변경법 # docker tag {기존 이미지명} {새로운 이미지명} 3) ...

Docker 컨테이너 CLI

이미지
도커 이미지 컨테이너 생성 및 실행 $> docker run -i -t {이미지명} [시작 스크립트] -i : iteractive -t : tty 종료: 컨테이너 정지 $> exit 또는 ctrl + D 종료: 컨테이너는 계속 실행 ctrl + p, q run은 아래를 합친것 1) 이미지 다운로드 $> docker pull {이미지명} 2) 컨테이너 생성 $> docker create -i -t --name {컨테이너명} {이미지명} --name : 컨테이너 이름 설정 3) 컨테이너 실행 $> docker start {컨테이너명 | ID} 4) 컨테이너 접속 $> docker attach {컨테이너명 | ID} run vs create docker run: pull -> create -> start -> attach docker create: pull -> create 도커 이미지 다운로드 $> docker pull {이미지명} 도커 이미지 목록 확인 $> docker images 컨테이너 생성 / 삭제 목록 확인 $> docker ps $> docker ps --format "table {{.ID}}\t{{.Status}}\t{{.Image}}\t{{.Names}}" --format : formatting \t : tab $> docker ps -a -a : 정지된 컨테이너까지 모두 상태: Up(실행중) / Exited(종료) 컨테이너 정보 확인 $> docker inspect {컨테이너명} ex) container id 확인: docker inspect mysql | grep "Id" 컨테이너 이름 변경 $> docker rename {현재명} {바꿀명} 컨테이너 정지 $> docker stop {컨테이너명 | ID} 컨테이너 삭제 $> docker rm {컨테이너명 | ID} $> docker rm -f {컨테이너...

Docker Run Tomcat

1. 이미지 받기 $> docker pull tomcat:8 2. 이미지 확인 $> docker images 3. 실행 & 확인 $> docker run -dit -p 8080:8080 tomcat:8 $> docker ps 4. 테스트 index.jsp 파일이 아래와 같이 있다고 가정하고 <% out.print("Hello World"); %> 도커 tomcat에 복사 $> docker cp ./index.jsp {running_image_name}:/usr/local/tomcat/webapps/ROOT $> curl http://localhost:8080/index.jsp 5. Image 생성 $> docker commit -m "Initial commit" -a "tomcat8_test_image" tomcat8_1 tomcat8:0.1 $> docker images 참고) console 접속하고 싶을때 $> docker exec -it {running_image_name | id} /bin/bash