docker run

Tool/Docker 2016. 1. 18. 22:10

이제 Docker 데몬을 올려 놓았다고 가정한다.

docker info 명령으로 현재 Docker 의 컨테이너 수, 이미지 수, Docker 버전, ROOT Dir, ...  등의 정보를 확인할 수 있다.


$ docker info
 
Containers: 2
Images: 2
Server Version: 1.9.1
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 6
 Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-74-generic
Operating System: Ubuntu 14.04.3 LTS
CPUs: 1
Total Memory: 992.5 MiB
Name: ip-172-31-11-122
ID: BVTB:PMXW:2IG2:3LE6:K2Q5:DLNS:AWMG:M3JE:3EKO:U6V4:ZZMD:7QUM
cs



이미지 다운로드


Docker 설치 후에 보유한 이미지가 없으므로 일단 어떤 이미지든 다운 받아본다.

다운받는 방법은 pull / run 이 있는데 pull 은 Docker Hub 에서 이미지를 검색하여 다운로드 하는 방식이고,

run 은 이미지를 로컬에서 먼저 검색한 후 없으면 Docker Hub 에서 다운받아 실행하는 방법이다.

즉, pull 은 다운로드만, run 은 다운로드 후 실행. 이미 다운로드 되어 있으면 실행만.


$ docker pull ubuntu
 
Using default tag: latest
latest: Pulling from library/ubuntu
fcee8bcfe180: Pull complete
4cdc0cbc1936: Pull complete
d9e545b90db8: Pull complete
c4bea91afef3: Pull complete
Digest: sha256:b53bb7b0d18842214ac7472c2a8801e8682c247d30f1ba4bab0083a2e2e091ea
Status: Downloaded newer image for ubuntu:latest
cs


이미지를 다운로드 할 때, 해시코드로 작성된 이미지 ID를 보여주지만 대부분의 명령에서는 전체 ID 를 사용하지 않고 ID의 첫 12글자를 보여준다.

전체 ID 의 확인이 필요할 때는 docker inspect [image] 나 docker images --no-trunc=true 명령을 사용한다.



이미지 실행


$ docker run ubuntu:14.04 /bin/echo 'Hello world'
cs


ubuntu 는 실행할 이미지 이름이며 콜론(:) 뒤에는 버전이다. 명시하지 않으면 가장 최신 버전을 실행한다.

이미지를 지정하면 Docker 는 먼저 Docker 호스트 에서 해당 이미지를 찾아보고, 없으면 공개 이미지 레지스트리인 Docker Hub 에서 이미지를 다운받는다.

그 후 컨테이너가 실행되면 Docker 는 새로운 Ubuntu 14.04 환경을 생성하고, 입력한 명령어(/bin/echo 'Hello world')를 새로운 컨테이너에서 실행하고, 컨테이너는 중지(stopped)된다.


$ docker run -t -i ubuntu:14.04 /bin/bash
root@af8bae53bdd3:/#
cs


이번에는 두개의 옵션(flag)이 추가됐다.

-t (tty) 는 새 컨테이너 안에 터미널(가상 장치: TTY)을 할당하는 것이다.

-i (interactive) 는 컨테이너의 표준 입력을 사용하여 대화형 연결을 할 수 있다.

명령문(/bin/bash)대로 컨테이너 안에서 Bash 쉘을 시작하고, Bash 쉘 프로세스를 종료하면 컨테이너도 중지한다.


위의 Hello World 를 데몬화 하기.


$ docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
023959abc767d858171dd91c812fee2dd1a37eb232911317c951ece4b7e2691c
cs


-d (detach) 옵션은 컨테이너를 백그라운드에서 실행하게 하고 컨테이너 ID 를 반환한다.

/bin/sh 로 시작되는 명령문은 1초마다 hello world 를 계속해서 출력한다.

백그라운드에서 실행하게 하였기 때문에 명령에 대한 결과가 출력되지는 않는다.



실행중인 컨테이너 확인


# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
023959abc767        ubuntu:14.04        "/bin/sh -c 'while tr"   7 seconds ago       Up 7 seconds                                 boring_hodgkin
611bed8edf61        ubuntu              "/bin/bash"              2 hours ago         Exited (0) 2 hours ago                       awesome_leavitt
5c7c984d5d45        hello-world         "/hello"                 4 hours ago         Exited (0) 4 hours ago                       naughty_bardeen
cs


-a(all) 옵션은 모든 컨테이너를 보여주고, 옵션을 사용하지 않으면 실행 중인 컨테이너만 출력한다.

docker 는 컨테이너가 시작되면 위 출력 내용처럼 이름을 자동으로 할당한다.

docker logs 명령을 사용하여 위에 백그라운드에서 실행 중인 컨테이너 내부를 볼 수 있다.


$ docker logs [컨테이너 이름]
cs



실행중인 이미지 중지


$ docker stop boring_hodgkin
boring_hodgkin
cs



WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,