일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c언어
- 플러터
- Houdini
- docker
- C언어 포인터
- Algorithm
- C++
- 유니티
- c# 윈폼
- 다트 언어
- dart 언어
- 구조체
- Data Structure
- 도커
- 깃
- github
- 포인터
- git
- HTML
- jupyter
- C# delegate
- Unity
- jupyter lab
- Flutter
- gitlab
- c# winform
- c# 추상 클래스
- vim
- Python
- c#
- Today
- Total
nomad-programmer
[DevOps/Docker] Docker Container Commands (create, run, ls, ps, stats, start, stop, restart, pause, unpause) 본문
[DevOps/Docker] Docker Container Commands (create, run, ls, ps, stats, start, stop, restart, pause, unpause)
scii 2020. 11. 24. 00:06이미지가 만들어졌으면 컨테이너를 생성할 수 있다. 여기서는 컨테이너의 생성 및 시작을 수행하는 명령에 대해 설명한다.
Docker 컨테이너의 라이프 사이클
컨테이너에는 라이프 사이클이 있다. 컨테이너는 다음과 같은 상태로 변화한다.
컨테이너를 조작하기 위한 기본 명령은 다음 네 가지이다.
컨테이너 생성 (docker container create)
이미지로부터 컨테이너를 생성한다. 이미지의 실체는 'Docker에서 서버 기능을 작동시키기 위해 필요한 디렉토리 및 파일들' 이다. 구체적으로는 Linux의 작동에 필요한 /etc 나 /bin 등과 같은 디렉토리 및 파일들이다.
docker container create 명령을 실행하면 이미지에 포함될 Linux의 디렉토리와 파일들의 스냅샷을 취한다.
스냅샷 (Snapshot) 이란?
스냅샷이란 스토리지 안에 존재하는 파일과 디렉토리를 특정 타이밍에서 추출한 것을 말한다.
docker container create 명령은 컨테이너를 작성하기만 할 뿐 컨테이너를 시작하지는 않는다. 즉, 컨테이너를 시작할 준비가 된 상태가 된 것이다.
컨테이너 생성 및 시작 (docker container run)
이미지로부터 컨테이너를 생성하고, 컨테이너 상에서 임의의 프로세스를 시작한다. 예를 들면 Linux의 프로세스 관리와 마찬가지로 Nginx 등의 서버 프로세스를 백그라운드에서 항시 실행하거나 경우에 따라서는 강제 종료하는 일도 가능하다. 포트 번호와 같은 네트워크도 설정함으로써 외부에서 컨테이너의 프로세스에 액세스할 수 있다.
Docker 컨테이너의 생성 및 시작은 docker container run 명령으로 실행한다.
docker container run [옵션] 이미지명[:태그명] [인수]
지정할 수 있는 주요 옵션
옵션 | 설명 |
--attach, -a | 표준 입력 (stdin), 표준 출력 (stdout), 표준 에러 (stderr) 에 어태치한다. |
--cidfile | 컨테이너 ID를 파일로 출력한다. |
--detach, -d | 컨테이너를 생성하고 백그라운드에서 실행한다. |
--interactive, -i | 컨테이너의 표준 입력을 연다. |
--tty, -t | 단말기 디바이스를 사용한다. |
다음의 명령을 살펴보자. 아래의 명령은 컨테이너를 생성하고 컨테이너 안에서 명령을 실행하여 결과를 콘솔 상에 출력한다.
docker container run -it --name "test1" centos:7 /bin/cal
- docker container run : 컨테이너를 생성 및 실행
- -it : 콘솔에 결과를 출력하는 옵션
- --name "test1" : 컨테이너명
- centos:7 : 이미지명
- /bin/cal : 컨테이너에서 실행할 명령
먼저 centos:7 이라는 이름의 이미지를 바탕으로 test1이라는 이름의 컨테이너를 실행하고, 컨테이너 안에서 /bin/cal 명령을 실행한다. /bin/cal 명령은 Linux의 표준 명령으로 달력을 콘솔에 표시하는 명령이다.
컨테이너의 이름은 --name 다음에 임의의 이름으로 지정한다. --name 옵션을 생략하면 컨테이너명이 랜덤으로 자동 설정된다.
-i 옵션은 컨테이너의 표준 출력을 연다는 뜻이며, -t 옵션은 tty (단말 디바이스) 를 확보한다는 뜻이다.
docker container run -it --name "test1" centos:7 /bin/cal
// 결과
November 2020
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
docker container run 명령으로 컨테이너 안에서 쉘 (/bin/bash)을 실행할 수도 있다.
$ docker container run -it --name "test2" centos:7 /bin/bash
[root@c643c25ae50d /]#
test2 라는 이름의 컨테이너를 시작하여 /bin/bash 를 실행하면 콘솔의 프롬프트가 [$] 에서 [#] 으로 바뀌는 것을 볼 수 있다. 이로써 컨테이너 안에서 보통의 Linux 서버와 똑같은 명령 조작을 할 수 있따.
컨테이너를 종료시키려면 exit 명령을 입력하여 쉘을 종료시킨다.
컨테이너의 백그라운드 실행 (docker container run)
Docker를 이용하는 경우의 대부분은 컨테이너에 서버 기능을 가지게 해서 실행하는 경우이다.
docker container run [실행 옵션] 이미지명[:태그명] [인수]
지정할 수 있는 옵션
옵션 | 설명 |
--detach, -d | 백그라운드에서 실행 |
--user, -u | 사용자명을 지정 |
--restart=[no | on-failure | on-failure:횟수 n | always | unless-stopped | 명령의 실행 결과에 따라 재시작을 하는 옵션 |
--rm | 명령 실행 완료 후에 컨테이너를 자동으로 삭제 |
백그라운드에서 실행할 때의 옵션은 -d 이다. 다음과 같이 명령을 실행한다.
docker container run -d centos:7 /bin/ping localhost
- docker container run : 컨테이너를 생성 및 실행
- -d : 백그라운드에서 실행하는 옵션
- centos:7 : 이미지명
- /bin/ping localhost : 컨테이너에서 실행할 명령
이 명령은 centos:7 이라는 이름의 이미지를 바탕으로 하여 컨테이너를 생성하고, localhost에 대해 ping 명령을 실행한다. 옵션 -d는 컨테이너를 백그라운드에서 실행한다는 뜻이다. 백그라운드에서 실행하는 것을 디태치(detach) 모드라고 한다.
// ping 명령의 실행에 의한 컨테이너의 백그라운드 시작
$ docker container run --detach centos:7 /bin/ping localhost
// 결과
aab35533f23d197d370c081f548ecdefedc732c10424dd4d1cc0d756ea298432
대화식으로 명령을 실행한 경우는 명령의 결과가 콘솔에 표시되었지만, 이번에 ping 결과는 콘솔에 표시되지 않는 대신 시작된 컨테이너의 컨테이너 ID가 표시된다.
백그라운드에서 실행되고 있는지 아닌지를 확인할 때는 docker container logs 명령을 사용한다. docker container logs 명령은 컨테이너의 로그를 확인하는 명령이다. 로그를 확인하고 싶은 컨테이너 식별자를 지정하여 실행한다. -t 옵션은 타임스탬프를 표시하는 것이다.
// 컨테이너의 로그 확인
docker container -t logs aab3
// 결과
2020-11-24T08:30:11.131042472Z PING localhost (127.0.0.1) 56(84) bytes of data.
2020-11-24T08:30:11.131099739Z 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.038 ms
2020-11-24T08:30:12.143421227Z 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.032 ms
2020-11-24T08:30:13.167407003Z 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.035 ms
2020-11-24T08:30:14.191518375Z 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.040 ms
2020-11-24T08:30:15.215487976Z 64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.043 ms
...
위와 같이 컨테이너가 백그라운드에서 실행되는 있다는 로그를 확인할 수 있다. 또한 명령을 실행한 후에도 컨테이너는 남는다. 실행 후의 컨테이너를 자동으로 삭제하고 싶을 때는 --rm 옵션을 지정한다.
명령의 실행 결과에 따라 컨테이너를 재시작할 때는 --restart 옵션을 지정한다. --restart 옵션으로는 다음과 같은 값을 지정할 수 있다.
설정값 | 설명 |
no | 재시작하지 않는다. |
on-failure | 종료 상태가 0이 아닐 때 재시작한다. |
on-failure:횟수n | 종료 상태가 0이 아닐 때 n번 재시작한다. |
always | 항상 재시작한다. |
unless-stopped | 최근 컨테이너가 정지 상태가 아니라면 항상 재시작한다. |
예를 들어 다음의 명령을 실행하면 명령 안에서 /bin/bash를 exit 명령으로 종료해도 자동으로 컨테이너를 재시작한다.
// 컨테이너를 항상 재시작
$ docker container run -it --name="test1" --restart=always centos:7 /bin/bash
[root@5d74a22e7c77 /]# exit
exit
$ docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d74a22e7c77 centos "/bin/bash" 16 seconds ago Up 7 seconds test
또한 --rm 옵션과 --restart 옵션은 동시에 사용할 수 없으므로 주의해야 한다.
컨테이너의 네트워크 설정 (docker container run)
컨테이너의 네트워크를 설정하기 위한 명령의 구문은 다음과 같다.
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 | 호스트의 임의의 포트를 컨테이너에 할당 |
컨테이너를 시작할 때 네크워크에 관한 설정을 할 수 있다. 컨테이너의 포트 번호와 호스트 OS의 포트 번호를 매핑할 때는 다음과 같은 명령을 실행한다.
// 컨테이너의 포트 매핑
$ docker container run -d -p 8080:80 nginx
이 명령은 nginx라는 이름의 이미지를 바탕으로 컨테이너를 생성하고, 백그라운드에서 실행한다. 이 때 호스트의 포트 번호 8080과 컨테이너의 포트 번호 80을 매핑시킨다.
이 명령을 실행하고 호스트의 8080 포트에 액세스하면, 컨테이너에서 작동하고 있는 Nginx(80번 포트)의 서비스에 액세스할 수 있다.
또한 지정한 범위로 포트 번호를 할당하고 싶을 때는 --expose 옵션을 사용하고, 호스트 머신의 임의의 포트를 할당할 때는 -p 옵션을 사용한다.
DNS 서버를 설정할 때는 다음과 같은 명령을 실행한다. DNS 서버는 IP 주소로 지정해야 한다.
// 컨테이너의 DNS 서버 지정
$ docker container run -d --dns 192.168.1.1. nginx
컨테이너에 MAC 주소를 설정할 때는 다음과 같은 명령을 실행한다.
// MAC 주소 지정
$ docker container run -d --name="test" --mac-address="85:dd:ac:0a:29:33" centos:7
$ docker container inspect --format="{{ .Config.MacAddress }}" test
// 결과
85:dd:ac:0a:29:33
docker container inspect 명령을 실행하고 컨테이너 안의 네트워크 구성을 확인하면 컨테이너 안의 MAC 주소가 "85:dd:ac:0a:29:33" 으로 설정되어 있는 것을 알 수 있다.
다음의 명령을 사용하면 컨테이너 안의 /etc/hosts에 호스트명과 IP 주소를 정의할 수도 있다.
// 호스트명과 IP 주소 정의
$ docker container run -it --add-host test.com:192.168.1.1 centos:7
아래의 명령을 실행하고 컨테이너 안의 /etc/hosts 를 확인하면 컨테이너 자신의 호스트명이 www.test.com과 node1.test.com(192.168.1.1) 으로 정의되어 있는 것을 알 수 있다.
// 호스트명 설정
$ docker container run -it --hostname www.test.com --add-host node1.test.com:192.168.1.1 centos:7
$ docker container exec -it <컨테이너명> cat /etc/hosts
127.0.0.1 localhost
...
192.168.1.1 node1.test.com
172.17.0.2 www.test.com
또한, Docker 에서는 기본적으로 호스트 OS와 브릿지 연결을 하지만 --net 옵션을 사용하면 다음과 같은 네트워크 설정이 가능하다.
--net 옵션의 지정
설정값 | 설명 |
bridge | 브릿지 연결(기본값)을 사용한다. |
none | 네트워크에 연결하지 않는다. |
container:[name | id] | 다른 컨테이너의 네트워크를 사용한다. |
host | 컨테이너가 호스트 OS의 네크워크를 사용한다. |
NETWORK | 사용자 정의 네크워크를 사용한다. |
사용자 정의 네트워크는 docker network create 명령으로 작성한다. 이 네트워크를 작성하려면 Docker 네트워크 드라이버 또는 외부 네트워크 드라이버 플러그인을 사용해야 한다.
똑같은 네트워크에 대해 여러 컨테이너가 연결을 할 수 있다. 사용자 정의 네트워크에 연결하면 컨테이너는 컨테이너의 이름이나 IP 주소로 서로 통신을 할 수 있다.
그리고 오버레이 네트워크나 커스텀 플러그인을 사용하면 멀티호스트에 대한 연결을 할 수 있다. 컨테이너가 동일한 멀티호스트 네트워크에 연결되어 있으면 이 네트워크를 통해 통신이 가능하다.
아래의 예는 브릿지 네트워크 드라이버를 사용하여 'webap-net' 이라는 이름의 네트워크를 작성하고, 작성한 네트워크 상에서 컨테이너를 실행한다.
// 사용자 정의 네트워크 작성
$ docker network create -d bridge webap-net
$ docker container run --net=webap-net -it centos:7
자원을 지정하여 컨테이너 생성 및 실행 (docker container run)
CPU나 메모리와 같은 자원을 지정하여 컨테이너를 생성 및 실행하는 명령의 구문은 다음과 같다.
docker container run [자원 옵션] 이미지명[:태그명] [인수]
지정할 수 있는 주요 옵션
옵션 | 설명 |
--cpu-shares, -c | CPU의 사용 배분 (비율) |
--memory, -m | 사용할 메모리를 제한하여 실행 (단위는 b, k, m, g 중 하나) |
--volume=[호스트의 디렉토리]:[컨테이너의 디렉토리], -v | 호스트와 컨테이너의 디렉토리 공유 |
컨테이너를 시작할 때 CPU와 메모리의 자원 이용을 제한할 수 있다. 메모리의 사용량은 --memory 옵션으로 지정한다. CPU 시간은 --cpu-shares 옵션을 사용하면 상대 비율을 지정할 수 있다.
기본값으로는 cpu-shares에 1024가 들어가므로, 예를 들어 CPU 시간을 그 반으로 할당하고 싶을 때는 cpu-shares의 값을 512로 설정한다.
// CPU 시간의 상대 비율과 메모리 사용량을 지정
$ docker container run --cpu-shares=512 --memory=1g centos:7
호스트 OS와 컨테이너 안의 디렉토리를 공유하고 싶을 때는 -v(--volume) 옵션을 지정한다. 예를 들어 호스트의 /home/scii/shareDir 디렉토리를 컨테이너의 /usr/share/nginx/html 디렉토리와 공유하고 싶을 때는 다음의 명령을 실행한다.
// 디렉토리 공유
$ docker container run -v /home/scii/shareDir:/usr/share/nginx/html nginx
컨테이너를 생성 및 시작하는 환경을 지정 (docker container run)
컨테이너의 환경변수나 컨테이너 안의 작업 디렉토리 등을 지정하여 컨테이너를 생성/실행하는 명령의 구문은 다음과 같다.
docker container run [환경설정 옵션] 이미지명[:태그명] [인수]
지정할 수 있는 주요 옵션
옵션 | 설명 |
--env=[환경변수], -e | 환경변수를 설정한다. |
--env-file=[파일명] | 환경변수를 파일로부터 설정한다. |
--read-only=[true | false] | 컨테이너의 파일 시스템을 읽기 전용으로 만든다. |
--workdir=[패스], -w | 컨테이너의 작업 디렉토리를 지정한다. |
-u, --user=[사용자명] | 사용자명 또는 UID를 지정한다. |
컨테이너를 시작할 때 환경변수를 설정하려면 다음과 같이 명령에 -e 옵션을 지정하여 실행한다.
// 환경변수 설정
$ docker container run -it -e foo=bar centos:7 /bin/bash
[root@1508ec7a2e54 /]# set
BASH=/bin/bash
...
foo=bar
환경변수를 정의한 파일로부터 일괄적으로 등록하고 싶은 경우, 다음과 같은 명령을 실행한다. env_list라는 이름의 파일 안에 환경변수를 정의해 놓고 있다.
// 환경변수의 일괄 설정
$ cat env_list
haha=hoho
foo=bar
unreal=good
unity=good
$ docker container run -it --env-file=env_list centos:7 /bin/bash
[root@32612ac9b000 /]# set
BASH=/bin/bash
...
haha=hoho
foo=bar
unreal=good
unity=good
컨테이너의 작업 디렉토리를 지정하여 실행하고 싶은 경우는 다음의 명령을 실행한다. 이 예에서는 컨테이너의 /tensionflow를 작업 디렉토리로 하고 있다.
// 작업 디렉토리 설정
$ docker container run -it --workdir=/tensorflow centos:7 /bin/bash
[root@090b9ae16322 tensorflow]# pwd
/tensorflow
또한 컨테이너를 시작할 때 파일 시스템을 읽기 전용으로 하고 싶을 때는 --read-only 옵션을 설정한다.
가동 컨테이너 목록 표시 (docker container ls)
Docker 상에서 작동하는컨테이너의 가동 상태를 확인할 때는 docker container ls 명령을 사용한다. 이 명령을 실행하면 가동 중인 컨테이너의 상태가 목록으로 표시된다.
docker container ls [옵션]
지정할 수 있는 주요 옵션
옵션 | 설명 |
--all, -a | 실행 정지 중인 것도 포함하여 모든 컨테이너를 표시 |
--filter, -f | 표시할 컨테이너 필터링 |
--format | 표시 포맷을 지정 |
--last, -n | 마지막으로 실행된 n건의 컨테이너만 표시 |
--latest, -l | 마지막으로 실행된 컨테이너만 표시 |
--no-tunc | 정보를 생략하지 않고 표시 |
--quiet, -q | 컨테이너 ID만 표시 |
--size, -s | 파일 크기 표시 |
// 컨테이너 목록 표시 (-a 옵션으로 정지중인 컨테이너도 표시)
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
150e31d7e99b alpine/git "git clone https://g…" 2 weeks ago Exited (0) 2 weeks ago repo
명령의 실행 결과의 의미는 다음과 같다.
항목 | 설명 |
CONTAINER ID | 컨테이너 ID |
IMAGE | 컨테이너의 바탕이 된 이미지 |
COMMAND | 컨테이너 안에서 실행되고 있는 명령 |
CREATED | 컨테이너 작성 후 경과 시간 |
STATUS | 컨테이너의 상태 (restarting | running | paused | exited) |
PORTS | 할당된 포트 |
NAMES | 컨테이넝 이름 |
Docker 컨테이너에는 컨테이너마다 CONTAINER ID가 할당된다. 실행 예를 보면 repo 라는 컨테이너(CONTAINER ID: 150e31d7e99b) 가 있다는 것을 알 수 있다. 또한 docker container ls 명령에 -a 옵션을붙이면 정지 중인 컨테이너도 모두 표시된다.
표시할 컨테이너를 필터링할 때는 -f 옵션을 지정한다. 필터링 조건은 key=value로 지정한다. 예를 들면 컨테이너명이 test1인 것을 조건으로 할 때는 다음과 같이 지정한다.
$ docker container -a -f name=test1
또한 STATUS에 종료 코드가 0인 것을 표시할 때는 다음과 같이 지정한다.
$ docker container -a -f exited=0
출력 형식을 변경하고 싶을 때는 --format 옵션을 지정한다. 출력 형식으로는 다음과 같은 플레이스 홀더를 지정할 수 있다.
플레이스 홀더 | 설명 |
.ID | 컨테이너 ID |
.Image | 이미지 ID |
.Command | 실행 명령 |
.CreatedAt | 컨테이너가 작성된 시간 |
.RunningFor | 컨테이너의 가동 시간 |
.Ports | 공개 포트 |
.Status | 컨테이너의 상태 |
.Size | 컨테이너 디스크 크기 |
.Names | 컨테이너명 |
.Mounts | 볼륨 마운트 |
.Networks | 네트워크명 |
예를 들어 컨테이너 ID(ID)와 가동 중인지 아닌지의 상태(status)를 콜론으로 구분하여 표시하려면 다음과 같은 명령을 실행한다.
$ docker container ls -a --format "{{.Names}}: {{.Status}}"
repo: Exited (0) 2 weeks ago
또한 출력 항목을 표 형식으로 하고 싶을 때는 다음의 명령처럼 --format 옵션에 table을 지정한다.
// 컨테이너 목록을 표 형식으로 출력한다.
$ docker container ls -a --format "table {{.Names}}\t{{.Status}}\t {{.Mounts}}"
NAMES STATUS MOUNTS
repo Exited (0) 2 weeks ago ccf3dae40bf718…
컨테이너 가동 확인 (docker container stats)
Docker 상에서 작동하는 컨테이너 가동 상태를 확인할 때는 docker container stats 명령을 사용한다. 이 명령을 실행하면 컨테이너 가동 상태가 목록으로 표시된다.
docker container stats [컨테이너 식별자]
예를 들어 webserver라는 이름의 컨테이너 가동 상황을 확인하고 싶을 때는 다음과 같이 명령을 실행한다.
// 컨테이너 가동 확인
$ docker container stats webserver
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
52a6e2342e10 webserver 0.00% 4.52MiB / 1GiB 0.44% 111kB / 35kB 0B / 8.19kB 2
명령의 실행 결과의 의미는 다음과 같다.
항목 | 설명 |
CONTAINER ID | 컨테이너 식별자 |
NAME | 컨테이너명 |
CPU % | CPU 사용률 |
MEM USAGE/LIMIT | 메모리 사용량/컨테이너에서 사용할 수 있는 메모리 제한 |
MEM % | 메모리 사용률 |
NET I/O | 네트워크 I/O |
BLOCK I/O | 블록 I/O |
PIDS | PID (Windows 컨테이너 제외) |
상태의 확인이 끝나면 Ctrl+C 를 눌러 명령을 종료시킨다.
또한 컨테이너에서 실행 중인 프로세스를 확인할 때는 docker container top 명령을 사용한다. 다음의 명령은 'webserver' 라는 이름의 컨테이너에서 작동하고 있는 프로세스를 확인하는 예이다.
// 프로세스 확인
$ docker container top webserver
UID PID PPID C STIME TTY TIME CMD
root 12377 12361 0 23:06 ? 00:00:00 nginx: master process nginx -g daemon off;
systemd+ 12448 12377 0 23:06 ? 00:00:00 nginx: worker process
컨테이너 시작 (docker container start)
정지하고 있는 컨테이너를 시작할 때는 docker container start 명령을 사용한다.
docker container start [옵션] <컨테이너 식별자> [컨테이너 식별자]
지정할 수 있는 주요 옵션
옵션 | 설명 |
--attach, -a | 표준 출력, 표준 오류 출력을 연다. |
--interactive, -i | 컨테이너의 표준 입력을 연다. |
예를 들면 컨테이너 ID가 abcd5~ 인 컨테이너를 시작하려면 다음의 명령을 실행한다.
// 컨테이너 시작
$ docker container start abcd5
여러 개의 컨테이너를 한꺼번에 시작하고 싶을 때는 인수에 컨테이너 식별자를 여러 개 지정한다.
컨테이너 정지 (docker container stop)
실행 중인 컨테이너를 정지할 때는 docker container stop 명령을 사용한다. 이 명령의 구문은 다음과 같다.
docker container stop [옵션] <컨테이너 식별자> [컨테이너 식별자]
지정할 수 있는 옵션
옵션 | 설명 |
--time, -t | 컨테이너의 정지 시간을 지정 (기본값은 10초) |
예를 들어 컨테이너 ID가 abcd5~인 컨테이너를 2초 후에 정지시키려면 다음과 같은 명령을 실행한다.
// 컨테이너 정지
$ docker container stop -t 2 abcd5
강제적으로 컨테이너를 정지시킬 때는 docker container kill 명령을 사용한다.
컨테이너 재시작 (docker container restart)
컨테이너를 재시작할 때는 docker container restart 명령을 사용한다.
$ docker container restart [옵션] <컨테이너 식별자> [컨테이너 식별자]
지정할 수 있는 주요 옵션
옵션 | 설명 |
--time, -t | 컨테이너의 재시작 시간을 지정 (기본값은 10초) |
예를 들어 컨테이너명이 'webserver' 인 컨테이너를 2초 후에 재시작하려면 다음과 같은 명령을 실행한다.
// 컨테이너 재시작
$ docker container restart -t 2 webserver
또한 컨테이너 안에서 실행하는 명령의 종료 status (정상 종료되었는지 유무) 에 따라 컨테이너를 자동으로 재시작하고 싶은 경우는 docker container run 명령에서 --restart 옵션을 사용한다.
컨테이너 삭제 (docker container rm)
정지하고 있는 컨테이너를 삭제할 때는 docker container rm 명령을 사용한다.
docker container rm [옵션] <컨테이너 식별자> [컨테이너 식별자]
지정할 수 있는 주요 옵션
옵션 | 설명 |
--force, -f | 실행 중인 컨테이너를 강제로 삭제 |
--volumes, -v | 할당한 볼륨을 삭제 |
예를 들어 컨테이너명이 abcd5~ 인 컨테이너를 삭제하려면 다음과 같이 명령한다.
$ docker container rm abcd5
정지 중인 모든 컨테이너를 삭제하려면 docker container prune 명령을 사용한다.
컨테이너 중단 / 재개 (docker container pause / docker container unpause)
실행중인 컨테이너에서 작동 중인 프로세스를 모두 중단시킬 때는 docker container pause 명령을 사용한다.
docker container pause <컨테이너 식별자>
예를 들어 컨테이너명이 webserver인 컨테이너를 일시 중단시키려면 다음의 명령을 실행한다. 중단된 컨테이너는 docker container ls 명령으로 확인하면 [STATUS]가 (Paused)로 되어 있다는 것을 알 수 있다.
// 컨테이너 중단
$ docker container pause webserver
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e6d7e7594e66 nginx "/docker-entrypoint.…" 3 hours ago Up 8 minutes (Paused) 0.0.0.0:8080->80/tcp webserver
중단시킨 webserver의 컨테이너를 재개하려면 다음의 명령을 실행한다.
$ docker container unpause webserver
'DevOps > Docker' 카테고리의 다른 글
[DevOps/Docker] 가동 중인 Docker 컨테이너 조작 (attach, exec, top, port, rename, cp, diff) (1) | 2020.11.27 |
---|---|
[DevOps/Docker] 컨테이너 네트워크 (0) | 2020.11.27 |
[DevOps/Docker] Docker Image Commands (push, pull, ls, inspect, tag, search, rm, prune, login, logout) & DCT (0) | 2020.11.19 |
[DevOps/Docker] 도커로 Nginx 웹 서버 구동하기 (0) | 2020.11.19 |
[DevOps/Docker] Docker에서 'Hello World' (0) | 2020.11.19 |