사랑해 마니마니

Docker Tutorial 본문

카테고리 없음

Docker Tutorial

분리불안증후군 2018. 10. 8. 19:56

Container 생성 및 사용하기

docker cli 와 engin에대한 정보 보기

$ docker version

점더 자세한 정보를 보고 싶으면(엔진에 대한 좀더 자세한 config 정보)

$ docker info

Docker command format

docker <Management command> <command> (options)

ex. docker container run (old version command: docker run)

docker --help로 보면 management commands와 commands로 구분되어 있음

 Imange vs. Container

  • 이미지는 우리가 실행할 수 있는 어플리케이션
  • 컨테이너는 image가 process로서 실행되고 있는 인스턴스
  • 그래서 동일한 이미지로 여러개의 컨테이너를 실행시킬 수 있음
  • 도커의 기본 이미지 "registry"는 Docker Hub

nginx를 도커에서 실행시켜 보자

$ docker container run --publish 80:80 nginx
  1. 'nginx'를 Docker Hub에서 다운로드
  2. 이미지로 부터 새로운 컨테이너를 실행
  3. 호스트 IP 80포트를 오픈
  4. 80포트로 들어오는 트래픽을 컨테이너 IP로 라우팅함

foreground 로 실행되고 있는 프로세스를 중지시키려면 ctrl + c

$ docker container run --publish 80:80 --detach nginx

실행중인 컨테이너 목록 보기

$ docker container ls

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
2075dcf5877b        nginx               "nginx -g 'daemon of…"   9 seconds ago       Up 8 seconds        0.0.0.0:80->80/tcp   happy_northcutt

실행 중인 컨테이너 중지시키기

$ docker container stop <CONTAINER ID>

$docker container stop 2075dc

실행 중 + 중지되어 있는 컨테이너 목록 보기

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                NAMES
2075dcf5877b        nginx               "nginx -g 'daemon of…"   6 minutes ago       Exited (0) 4 minutes ago                         happy_northcutt
9c463ce0ba1a        nginx               "nginx -g 'daemon of…"   16 minutes ago      Exited (0) 6 minutes ago                         determined_kepler
877109223b50        centos              "-it /bin/bash"          18 hours ago        Created                                          zen_shtern
a832f8501790        centos              "-it"                    18 hours ago        Created                                          quirky_pasteur
7cd283e61b5c        centos              "/bin/bash"              18 hours ago        Exited (0) 18 hours ago                          zealous_minsky
73b9b86cd5ae        ubuntu              "/bin/bash"              18 hours ago        Exited (130) 18 hours ago                        stoic_galileo
f1503a0744e1        centos              "/bin/bash"              18 hours ago        Exited (0) 18 hours ago                          xenodochial_roentgen
aedf0b600ae7        centos              "-i -t /bin/bash"        18 hours ago        Created                                          inspiring_dubinsky
429add0f81f5        centos              "--it /bin/bash"         18 hours ago        Created                                          mystifying_roentgen

run vs. start

  • docker container run은 항상 *new* 컨테이너를 시작시킴
  • docker container start는 중지되어 있는 컨테이너를 실행시킴

컨테이너 로그 보기

$ docker container logs <NAME>

$ docker container run --publish 80:80 --detach --name webhost nginx  // 컨테이너 새로 시작하기, 이름은 webhost로 설정

브라우져에서 http://localhost:80 접속해 보기, 몇번 Reload 한 후에

$ docker container logs webhost
172.17.0.1 - - [08/Oct/2018:10:55:03 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" "-"
172.17.0.1 - - [08/Oct/2018:10:55:05 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" "-"
172.17.0.1 - - [08/Oct/2018:10:55:06 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" "-"
172.17.0.1 - - [08/Oct/2018:10:55:06 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" "-"

컨테이너 내부에서 돌고 있는 프로세스 정보 보기

특정 컨테이너 내부에서 실행되고 있는 프로세스 정보

$ docker container top <NAME>

$ docker container top webhost 

PID                 USER                TIME                COMMAND
4664                root                0:00                nginx: master process nginx -g daemon off;
4705                101                 0:00                nginx: worker process

컨테이너 삭제하기

$ docker container rm <CONTAINER ID>

$ docker container rm 2075dc
  • 동작 중일 때는 삭제되지 않고 에러 메시지 출력
  • 이때는 -f 사용: $ docker container rm -f 2075dc

docker container run을 실행하면

  1. 로컬의 이미지 cache에서 이미지를 찾는다. 만약 없으면
  2. 원격 이미지 repository(디폴트가 Docker Hub)에서 찾는다
  3. 최신 버전(nginx:latest가 디폴트)을 다운로드 받는다
  4. 이미지로 부터 컨테이너를 생성하고, 시작을 준비한다
  5. 도커 엔지 내부의 private network에 virtual IP를 부여한다
  6. 호스트의 80 포트를 오픈하고 컨테이너의 80 포트로 연결한다
  7.  이미지 Dockerfile내에 있는 CMD를 이용하여 컨테이너를 시작한다.

docker container 는 결국은 process

linux에서 mongodb 컨테이너를 실행시키고($ docker run --name mongo -d mongo), docker container top으로 확인되는 프로세스와 ps aux | grep mongod의 프로세스(UID, PID)가 같음. 

docker container stop mongo로 컨테이너를 중지시키면, ps aux | grep mongod에서도 프로세스는 죽어서 목록에서 빠짐.

*  macOS와 Windows는 docker가 mini-VM에서 실행되기 때문에 ps aux로 프로세스 확인할 수 없음

Comments