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
'쿠버네티스 교육 > 강의 내용 정리' 카테고리의 다른 글
220615_3_도커_docker container attach / exec / top / port (0) | 2022.06.16 |
---|---|
220615_1_도커_docker container network ls / create / connect / rm (0) | 2022.06.15 |
220614_2_도커_docker container create / start / stop / rm (0) | 2022.06.15 |
220614_1_도커_docker image pull / ls / inspect / tag / rm / prune (0) | 2022.06.15 |
220614_3_도커_실습 (0) | 2022.06.14 |