docker container run
혹은
docker run
2가지 명령어를 통해서 컨테이너의 생성 및 시작을 진행합니다.
구문
docker container run [옵션] 이미지명[:태그명][인수]
****
옵션에 값을 설정할 때 =와 “는 생략해도 됩니다.
<호스트 장치>:<컨테이너 장치>
형식입니다.<컨테이너 이름>:<별칭>
형식입니다.<숫자><단위>
형식이며 단위는 b, k, m, g를 사용할 수 있습니다.<호스트 포트>:<컨테이너 포트>
예) -p 80:80<IP 주소>:<호스트 포트>:<컨테이너 포트>
호스트에 네트워크 인터페이스가 여러 개이거나 IP 주소가 여러 개 일 때 사용합니다. 예) -p 192.168.0.10:80:80<IP 주소>::<컨테이너 포트>
호스트 포트를 설정하지 않으면 호스트의 포트 번호가 무작위로 설정됩니다. 예) -p 192.168.0.10::80<컨테이너 포트>
컨테이너 포트만 설정하면 호스트의 포트 번호가 무작위로 설정됩니다. 예) -p 80-d
옵션과 함께 사용할 수 없습니다.<컨테이너 디렉터리>
예) -v /data<호스트 디렉터리>:<컨테이너 디렉터리>
예) -v /data:/data<호스트 디렉터리>:<컨테이너 디렉터리>:<ro, rw>
예) -v /data:/data:ro<호스트 파일>:<컨테이너 파일>
예) -v /var/run/docker.sock:/var/run/docker.sock<컨테이너 이름, ID>:<ro, rw>
형식으로 설정합니다. 기본적으로 읽기 쓰기 설정은 -v
옵션의 설정을 따릅니다. 자세한 내용은 ‘6.5 Docker 데이터 볼륨 컨테이너 사용하기’를 참조하기 바랍니다.docker run -d centos /bin/ping localhost
위 예시 설명:
백그라운드에서 실행되고 있는지 아닌지를 확인할 때는 docker logs명령을 사용합니다. docker container logs 명령은 컨테이너의 로그를 확인하는 명령입니다. 로그를 확인하고 싶은 컨테이너 식별자를 지정하여 실행합니다. 아래 예시를 확인해주세요.
참고로 -t 옵션은 타임스탬프를 표시하는 것입니다.
명령을 실행한 후에도 컨테이너는 남습니다. 실행 후의 컨테이너를 자동으로 삭제하고 싶을 때는 --rm 옵션을 지저압니다.
명령의 실행 결과에 따라 컨테이너를 재시작할 때는 --restart 옵션을 지정합니다.
no : 재시작하지 않는다
on-failure : 종료 스테이터스가 0이 아닐 떄 재시작한다.
on-failure:횟수 n : 종료 스테이터스가 0이 아닐때 n번 재시작한다.
always : 항상 재시작 한다.
unless-stopped : 최근 컨테이너가 정지 상태가 아니라면 항상 재시작한다.
아래에서 --restart옵션 always값을 사용하고여 exit 명령어로 나와도 계속 컨테이너가 실행한 모습을 확인 할 수 있습니다.
참고! --rm 옵션과 --restart 옵션은 동시에 사용할 수 없으므로 주의하기 바랍니다.
docker run 네트워크옵션 이미지명:태그명 인수
--add-host= 호스트명:ip주소 : 컨테이너의 /etc/hosts에 호스트명과 IP정의
--dns=IP주소 : 컨테이너용 DNS 서버의 IP 주소 지
--expose : 지정한 범위의 포트 번호를 할당
--mac-address=MAC주소 : 컨테이너의 MAC주소 지정
--net=[bridge | none | container<name | id> |host |NETWORK : 컨테이너의 네트워크를 지정
--hostname, -h : 컨테이너 자신의 호스트명을 지정
--publish, -p호스트의 포트번호: 컨테이너의 포트번호 : 호스트와 컨테이너의 포트 매핑
--publish-all, -P(대문자) : 호스트에 임의의 포트를 컨테이너에 지정
컨테이너를 시작할 떄 네트워크에 관한 설정을 할 수 있습니다.
컨테이너의 포트번호와 호스트 OS의 포트번호를 매핑할 때
$ docker run -d -p 8080:80 nginx
$ docker run -d --dns 192.168.1.1 nginx
$ docker run -d --mac-address="92:d0:c6:0a:29:33" centos
$ docker container inspect --format={% raw %}"{{ .Config.MacAddress }}"{% endraw %}
$ docker run -it --add-host test.com:192.168.1.1 centos
아래 명령을 실행하고 컨테이너 안의 /etc/hosts를 확인하면 컨테이너 자신의 호스트명이 www.test.com과 node1.test.com(192.168.1.1)으로 정의되어 있는 것을 알 수 있어요.
docker에서는 기본적으로 호스트OS와 브리지 연결을 하지만 --net 옵션을 사용하면 아래와 같은 네트워크 설정이 가능해요.
bridge : 브리지 연결(기본값)을 사용한다.
none : 네트워크에 연결하지 않는다.
container: name | id : 다른 컨테이너의 네트워크를 사용한다.
host : 컨테이너가 호스트 OS의 네트워크를 사용한다.
NETWORK : 사용자 정의 네트워크를 사용합니다
사용자 정의 네트워크
docker network create
이 네트워크를 작성하려면 docker 네트워크 드라이버 또는 외부 네트워크 드라이버 플러그인을 사용해야합니다. 똑같은 네트워크에 대해 여러 컨테이너가 연결을 할 수 있습니다. 사용자 정의 네트워크에 연결하면 컨테이너는 컨테이너의 이름이나 IP 주소로 서로 통신을 할 수 있습니다.
그리고 오버레이 네트워크나 커스텀 플러그인을 사용하면 멀티호스트에 대한 연결을 할 수 있습니다.
컨테이너가 동일한 멀티 호스트 네트워크에 연결되어 있으면 이 네트워크를 통해 통신이 가능합니다.
아래의 예는 외부 브리지 네트워크 드라이버를 사용하여 'webap-net'이라는 이름의 네트워크를 작성하고, 작성한 네트워크 상에서 컨테이너를 실행합니다.
$ docker network create -d bridge webap-net
$ docker run --net=webap-net -it centos
CPU or Memory와 같은 자원을 지정하여 컨테이너를 생성 및 실행하는 옵션은 아래와 같아요.
컨테이너를 시작 할 떄 CPU | MEMORY 자원을 제한할 수 있습니다.
$ docker container run --cpu-shares=512 --memory=1g centos
WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
호스트 OS와 컨테이너 안의 디렉토리를 공유하고 싶을 떄는 -v(--volume)옵션을 사용합니다.
예를들어 호스트의 /users/asa/webap 폴터들 컨테이의 /usr/share/nginx/html 디렉토리와 공유하고 싶을 떄는 아래와 같이 하면됩니다.
$ docker run -v /users/asa/webap:/usr/share/nginx/html nginx
docker run 환결설정옵션 이미지명:태그명 인수
hyeseong-kisti-desck@ubuntu:~$ docker run -it -e foo=bar centos /bin/bash
[root@b293ad62be6a /]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASHRCSOURCED=Y
BASH_ALIASES=()
...
...
foo=bar
...
...
환경변수를 정의한 파일로부터 일괄적으로 등록하고 싶은 경우는 아래의 명령을 실행합니다. 이 예에서는 env_list라는 이름의 파일 안에 환경변수를 정해 놓고 있습니다.
hyeseong-kisti-desck@ubuntu:~/Documents$ docker container run -it --env-file=env_list centos /bin/bash
[root@735edac1a7ec /]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASHRCSOURCED=Y
...
...
foo=bar
hoge=fuga
...
...
{
[ -z "$AWKPATH" ] && AWKPATH=`gawk 'BEGIN {print ENVIRON["AWKPATH"]}'`;
export AWKPATH="$*:$AWKPATH"
}
컨테이너의 작업 디렉토리를 지정하여 실행하고 싶은 경우에는 --workdir, -w 옵션을 사용합니다.
hyeseong-kisti-desck@ubuntu:~/Documents$ docker run -it -w=/tensorflow centos /bin/bash
[root@d69dc90dc1e5 tensorflow]#
또한 컨테이너를 시작할 때 파일 시스템을 읽기 전용으로 하고 싶을 때는 --read-only 옵션을 설정합니다.
필터링 조건은 key=value로 지정합니다.
컨테이너 ID와 가동중인지 아닌지의 상태르 콜론으로 구분하여 표시하려면 아래와 같이해보세요.
<INPUT>
docker ps -a --format {% raw %}'{{.Names}}:{{.Status}}'{% endraw %}
<OUTPUT>
dreamy_stonebraker:Exited (127) 6 minutes ago
sad_borg:Exited (0) 10 minutes ago
elated_northcutt:Exited (0) 14 minutes ago
suspicious_kowalevski:Exited (0) 15 minutes ago
upbeat_ellis:Exited (1) 16 minutes ago
agitated_mendel:Exited (0) 38 minutes ago
awesome_golick:Exited (0) 55 minutes ago
exciting_hellman:Exited (0) 56 minutes ago
youthful_archimedes:Exited (0) About an hour ago
elated_sinoussi:Exited (0) About an hour ago
modest_hellman:Up 40 minutes
unruffled_gould:Exited (137) 40 minutes ago
<INPUT>
$ docker ps -a --format 'table {% raw %}{{.Names}}\t{{.Status}}\t{{.Mounts}}{% endraw %}'
<OUTPUT>
NAMES STATUS MOUNTS
dreamy_stonebraker Exited (127) 9 minutes ago
sad_borg Exited (0) 13 minutes ago
elated_northcutt Exited (0) 16 minutes ago
suspicious_kowalevski Exited (0) 17 minutes ago
upbeat_ellis Exited (1) 19 minutes ago
agitated_mendel Exited (0) 41 minutes ago
awesome_golick Exited (0) 58 minutes ago
exciting_hellman Exited (0) 59 minutes ago
youthful_archimedes Exited (0) About an hour ago
elated_sinoussi Exited (0) About an hour ago
modest_hellman Up 42 minutes
unruffled_gould Exited (137) 43 minutes ago
<INPUT>
$ docker stats modest_hellman(컨테이너이름)
<OUTPUT>
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
0b10e29a88a9 modest_hellman 0.00% 2.395MiB / 1.914GiB 0.12% 11.3kB / 0B 6.01MB / 0B 1
hyeseong-kisti-desck@ubuntu:~/Documents$ docker top modest_hellman
UID PID PPID C STIME TTY TIME CMD
root 1761 1727 0 21:24 pts/0 00:00:00 /bin/bash
docker container stop -t 2 [컨테이너식별자]
# 2초후에 컨테이너를 정지시킴
hyeseong-kisti-desck@ubuntu:~$ docker restart -t 5 sad_borg elated_northcutt suspicious_kowalevski
sad_borg
elated_northcutt
suspicious_kowalevski
hyeseong-kisti-desck@ubuntu:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
735edac1a7ec centos "/bin/bash" 28 minutes ago Up 4 seconds sad_borg
0f56e70ad51f centos "/bin/bash" 29 minutes ago Up 4 seconds elated_northcutt
a8f9e8edab4f centos "/bin/bash" 30 minutes ago Up 3 seconds suspicious_kowalevski
0b10e29a88a9 centos "/bin/bash" 4 hours ago Up 54 minutes modest_hellman
컨테이너에서 프로세스(pause)를 모두 중단 VS 컨테이너 그 자체를 중지(stop)
안녕하세요 운영자님
인카토스입니다.
먼저, 댓글로 인사를 드리게 된 점 양해 부탁 드립니다.
이렇게 연락 드린 이유는 이번에 저희가 제작한 도커 각티슈케이스 제품 협찬을 제안드리고 싶어서 연락 드렸습니다.
개발자들에게 많은 사랑은 받은 각티슈케이스입니다.
저희 상품 블로그 포스팅이 가능하실지 여쭙고자 연락드렸습니다.
포스팅이 어려우시다면 도커 글 하단에 이미지와 링크만 좀 달아주셔도 좋을거같습니다.
연락드릴수 있는방법이 댓글밖에 보이지 않아 이렇게 먼저 연락드립니다.
협찬제안에 긍정적인 검토 부탁드리고 제안이 마음에 드신다면 하기 메일로 메일주시면 제품 보내드리도록 하겠습니다.
sungjh0726@naver.com
감사합니다.
인카토스 드림.