728x90

docker container run


docker container run [옵션] 이미지명[:태그명] [인수]

컨테이너 생성 및 시작

  • 옵션
옵션 설명
--attach, -a 표준 입력(STDIN), 표준 출력(STDOUT), 표준 오류 출력(STDERR)에 어태치
--cidfile 컨테이너 ID를 파일로 출력
--detach, -d 컨테이너를 생성하고 백그라운드에서 실행
--interactive, -i 컨테이너의 표준 입력을 연다
--tty, -t 단말기 디바이스 사용

 

  • docker container run 대화식 실행
  • -it: 콘솔에 결과를 출력하는 옵션
  • [--name: cal-test]: 컨테이너명
  • centos: 이미지명
  • /bin/cal: 컨테이너에서 실행할 명령
# cal 명령의 실행에 의한 달력 표시
[root@localhost ~]# docker container run -it --name cal-test centos /bin/cal
      June 2022
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
# bash 실행
[root@localhost ~]# docker container run -it --name bash-test centos /bin/bash
[root@e2f2d745e33f /]#

 


 

docker container run [실행 옵션] 이미지명[:태그명] [인수]

컨테이너의 백그라운드 실행

  • 옵션
옵션 설명
-detach, -d 백그라운드에서 실행
--user, -u 사용자명 지정
--restart=[no | on-failure | on-failure:횟수n | always | unless-stopped] 명령의 실행 결과에 따라 재시작을 하는 옵션
--rm 명령 실행 완료 후에 컨테이너 자동 삭제
  • docker container run 백그라운드 실행
  • -d: 백그라운드에서 실행하는 옵션
  • centos: 이미지명
  • [/bin/ping localhost]: 컨테이너에서 실행할 명령 (로컬 호스트에 대해 ping 명령 실행)
  • 대화식으로 실행하지 않았기 때문에 콘솔에 바로 표시되지 않음
  • 시작된 컨테이너의 컨테이너 ID가 표시됨 (83dd78~)
# ping 명령 실행에 의한 컨테이너의 백그라운드 시작
[root@localhost ~]# docker container run -d centos /bin/ping localhost
83dd784a5b425f16ee4a36a9777b88782aa8cae207925d3e769ccc796e17bfce

# 컨테이너 로그 확인
[root@localhost ~]# docker container logs -t 83dd78
2022-06-15T05:19:21.676187304Z PING localhost (127.0.0.1) 56(84) bytes of data.
2022-06-15T05:19:21.676205133Z 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.030 ms
2022-06-15T05:19:22.675664824Z 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.041 ms

 

  • --restart 옵션
옵션 설명
no 재시작하지 않음
on-failure 종료 status가 0이 아닐 때 재시작
on-failure:횟수n 종료 status가 0이 아닐 때 n번 재시작
always 항상 재시작
unless-stopped 최근 컨테이너가 정지 상태가 아니라면 항상 재시작
  • 컨테이너를 항상 재시작
  • /bin/bash를 exit 명령으로 종료해도 자동으로 컨테이너를 재시작함
[root@localhost ~]# docker container run -it --restart=always centos /bin/bash
[root@f993f6095f32 /]# exit
exit
[root@localhost ~]# docker container ps
CONTAINER ID   IMAGE     COMMAND                 CREATED          STATUS          PORTS     NAMES
f993f6095f32   centos    "/bin/bash"             19 seconds ago   Up 5 seconds              musing_bouman

 


 

docker container 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 호스트의 임의의 포트를 컨테이너에 할당
  • 컨테이너의 포트 매핑
  • nginx 이미지를 이용하여 컨테이너를 생성하고 백그라운드에서 실행
  • 호스트의 8080 포트와 컨테이너의 80 포트 매핑
  • 호스트(enp0s8)의 8080 포트로 액세스하면 작동 중인 nginx 서비스 확인
[root@localhost ~]# docker container run -d -p 8080:80 nginx
8e2c60372da5ed39d14b14a8a11e439c8d71ab4e7e665dcd8ccf67035908434e

 

  • 컨테이너의 DNS 서버 지정
[root@localhost ~]# docker container run -d --dns 192.168.1.1 nginx

 

  • MAC 주소 지정
  • docker container inspect 명령을 실행하여 컨테이너 안의 네트워크 구성을 확인하면 설정한 MAC 주소를 확인할 수 있음
[root@localhost ~]# docker container run -d --mac-address="92:d0:c6:0a:29:33" centos
16b2643245d497d2aa5346f227cee7ef5b144da7033112810cbc45b18baf030d

[root@localhost ~]# docker container inspect --format="{{ .Config.MacAddress }}" 16b2
92:d0:c6:0a:29:33

 

  • 호스트명과 IP 주소 정의
  • 컨테이너 안의  /etc/hosts에 호스트명과 IP 주소 정의
[root@localhost ~]# docker container run -it --add-host khj.com:192.168.1.1 centos
[root@1357bdec42db /]# cat /etc/hosts
...
192.168.1.1     khj.com
...

 

  • 사용자 정의 네트워크 생성: docker network create
  • 네트워크 생성을 위해서는 Docker 네트워크 드라이버 또는 외부 네트워크 드라이버 플러그인 필요
  • 같은 네트워크에 여러 대의 컨테이너 연결 가능
  • 오버레이 네트워크 또는 커스텀 플러그인 사용 시 멀티 호스트에 대한 연결 가능
  • --net 옵션
옵션 설명
bridge 브릿지 연결 사용
none 네트워크에 연결하지 않음
container:[name | id] 다른 컨테이너의 네트워크 사용
host 컨테이너가 호스트 OS의 네트워크 사용
NETWORK 사용자 정의 네트워크 사용

 

  • 사용자 정의 네트워크 생성
  • 외부 브릿지 네트워크 드라이버를 사용하여 'webap-net'이라는 이름의 네트워크 생성 후 실행
[root@localhost ~]# docker network create -d bridge webap-net
bda159d95e530e25471534edd29a58423f3f8797281d3319e5b660d5331153a4

[root@localhost ~]# docker container run --net=webap-net -it centos
[root@5dbfdf6153fc /]#

 


 

docker container run [자원 옵션] 이미지명[:태그명] [인수]

자원을 지정하여 컨테이너 생성 및 실행

  • 옵션
옵션 설명
--cpu-shares, -c CPU의 사용 배분 (비율)
--memory, -m 사용할 메모리를 제한하여 실행
(단위: b, k, m, g)
--volume=[호스트의 디렉토리]:[컨테이너의 디렉토리], -v 호스트와 컨테이너의 디렉토리 공유

 

  • CPU 시간의 상대 비율과 메모리 사용량 지정
[root@localhost ~]# docker container run --cpu-shares=512 --memory=1g centos

 

  • 디렉토리 공유
  • 호스트의 /tmp 디렉토리를 컨테이너의 /mnt 디렉토리와 공유
  • 컨테이너의 /mnt 디렉토리에서 생성한 testfile을 호스트의 /tmp 디렉토리에서 확인되므로 디렉토리가 공유됐음을 알 수 있음
[root@localhost ~]# docker container run -it -v /tmp:/mnt centos:7
[root@309a5c28e6df /]# cd /mnt
[root@309a5c28e6df mnt]# touch testfile
[root@2e82850e1fa5 mnt]# exit
exit

[root@localhost ~]# cd /tmp
[root@localhost tmp]# ls
...
testfile
...

 


 

docker container run [환경 설정 옵션] 이미지명[:태그명] [인수]

컨테이너를 생성 및 시작하는 환경 지정

  • 컨테이너의 환경 변수 또는 컨테이너 안의 작업 디렉토리 등을 지정하여 컨테이너를 생성 및 실행할 수 있음
  • 옵션
옵션 설명
--env=[환경 변수], -e 환경 변수 설정
--env-file=[파일명] 환경 변수를 파일로부터 설정
--read-only=[true | false] 컨테이너의 파일 시스템을 읽기 전용으로 생성
--workdir=[패스], -w 컨테이너의 작업 디렉토리 지정
-u, --user=[사용자명] 사용자명 또는 UID 지정
  • 환경 변수 설정
[root@localhost ~]# docker container run -it -e kim=jin centos /bin/bash
[root@2c246b8eefdc /]# set
BASH=/bin/bash
...
kim=jin

 

  • 환경 변수의 일괄 설정
  • 환경 변수를 정의할 파일(env_list)을 생성하여 일괄 등록
[root@localhost ~]# vi env_list
[root@localhost ~]# cat env_list
hoge=fuge
foo=bar

[root@localhost ~]# docker container run -it --env-file=env_list centos /bin/bash
[root@330e6b907a21 /]# set
BASH=/bin/bash
..
foo=bar
hoge=fuge
..

 

  • 작업 디렉토리 설정
  • 컨테이너의 작업 디렉토리를 /tensorflow로 지정하여 실행
[root@localhost ~]# docker container run -it -w=/tensorflow centos /bin/bash
[root@ca9c3494106b tensorflow]# pwd
/tensorflow

 


 

docker container ls


docker container ls [옵션]

가동 컨테이너 목록 표시

  • 옵션
옵션 설명
--all, -a 실행 또는 정지 상태인 모든 컨테이너 표시
--filter, -f 표시할 컨테이너 필터링
--format 표시 포맷 지정
--last, -n 마지막으로 실행된 n 건의 컨테이너만 표시
--latest, -l 마지막으로 실행된 컨테이너만 표시
--no-trunc 정보를 생략하지 않고 표시
--quiet, -q 컨테이너 ID만 표시
--size, -s 파일 크기 표시
  • 컨테이너 목록 표시
  • -a 옵션 지정 시 정지된 컨테이너도 모두 표시
[root@localhost ~]# docker container ls
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS             PORTS                                   NAMES
45325b667e38   nginx     "/docker-entrypoint.…"   About an hour ago   Up About an hour   80/tcp                                  kind_shockley
8e2c60372da5   nginx     "/docker-entrypoint.…"   2 hours ago         Up 2 hours         0.0.0.0:8080->80/tcp, :::8080->80/tcp   infallible_babbage
f993f6095f32   centos    "/bin/bash"              2 hours ago         Up 2 hours                                                 musing_bouman
83dd784a5b42   centos    "/bin/ping localhost"    2 hours ago         Up 2 hours                                                 thirsty_blackwell

 

  • 컨테이너 목록 필터링
  • 필터링 조건은 key=value로 지정
[root@localhost ~]# docker container ls -a -f name=kind_shockley
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS             PORTS     NAMES
45325b667e38   nginx     "/docker-entrypoint.…"   About an hour ago   Up About an hour   80/tcp    kind_shockley

필터링 옵션 목록

 

  • 컨테이너 목록의 출력 형식 지정
  • --format 옵션 지정
  • 컨테이너 이름과 컨테이너의 상태를 콜론으로 구분하여 표시
[root@localhost ~]# docker container ls -a --format "{{.Names}}: {{.Status}}"
gifted_hoover: Exited (0) 50 minutes ago
kind_clarke: Exited (0) 51 minutes ago
gifted_hodgkin: Exited (0) 55 minutes ago
hungry_ramanujan: Exited (0) 59 minutes ago

 

  • 컨테이너 목록을 표 형식으로 출력
[root@localhost ~]# docker container ls -a --format "table {{.Names}}\t{{.Status}}\t {{.Mounts}}"
NAMES                   STATUS                            MOUNTS
gifted_hoover           Exited (0) 52 minutes ago         /tmp
kind_clarke             Exited (0) 53 minutes ago         /tmp
gifted_hodgkin          Exited (0) 57 minutes ago         /tmp
hungry_ramanujan        Exited (0) About an hour ago      /khj

 


 

docker container stats


docker container stats [컨테이너 식별자]

컨테이너 가동 확인

  • 작동하고 있는 컨테이너의 가동 상태 확인
  • 상태 확인이 끝나면 ctrl + c를 눌러 명령을 종료함
[root@localhost ~]# docker container stats test1
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O   PIDS
932901bf1889   test1     0.00%     0B / 0B             0.00%     0B / 0B   0B / 0B     0

 

  • 프로세스 확인
  • 컨테이너에서 실행 중인 프로세스를 확인할 때는 docker container top 명령 사용
  • kind_shockley라는 이름의 컨테이너에서 작동하고 있는 프로세스 확인
[root@localhost ~]# docker container top kind_shockley
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                8392                8373                0                   14:52               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 8442                8392                0                   14:52               ?                   00:00:00            nginx: worker process

 

728x90

+ Recent posts