도커 컨테이너의 생명주기는 5단계로 구분한다.
1. 생성 (create)
mysql
이미지로 컨테이너를 생성해보았다.
생성된 컨테이너에 exec
명령어로 bash를 실행하려고 하면 컨테이너는 아직 running 상태가 아니기 때문에 Error response from daemon: Container 44bd0e9bd9... is not running
이라는 메세지를 출력한다.
$ docker create <이미지이름>
➜ docker create mysql
44bd0e9bd9b85a4cbdece60abc201c4fd4e6b249b2d49a4611be61bc6ffe7ef6
➜ docker ps -a | grep 44bd0e9bd9b8
44bd0e9bd9b8 mysql "docker-entrypoint.s…" 16 seconds ago Created sharp_keldysh
➜ docker exec 44bd0e9bd9b8 -it bash
Error response from daemon: Container 44bd0e9bd9b85a4cbdece60abc201c4fd4e6b249b2d49a4611be61bc6ffe7ef6 is not running
2. 시작 (start)
생성된 컨테이너는 start
명령어를 통해 running 상태가 된다.
$ docker start <컨테이너ID 또는 이름>
➜ ~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
07c50f2b35da mysql:latest "docker-entrypoint.s…" 2 months ago Up 2 seconds 127.0.0.1:3306->3306/tcp, 33060/tcp sharp_keldysh
run
명령어는 도커 컨테이너를 생성(create)하고 시작(start)한다.
$ docker run <이미지이름>
➜ docker run redis
1:C 11 Feb 2021 04:31:04.746 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 11 Feb 2021 04:31:04.746 # Redis version=6.0.9, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 11 Feb 2021 04:31:04.746 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 11 Feb 2021 04:31:04.747 * Running mode=standalone, port=6379.
1:M 11 Feb 2021 04:31:04.747 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 11 Feb 2021 04:31:04.747 # Server initialized
1:M 11 Feb 2021 04:31:04.747 * Ready to accept connections
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f4c822f95ba redis "docker-entrypoint.s…" 11 seconds ago Up 10 seconds 6379/tcp serene_buck
3. 중지 (stopped)
컨테이너를 중지시키는 방법은 2가지가 있다.
$ docker stop <컨테이너ID 또는 이름>
➜ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f4c822f95ba redis "docker-entrypoint.s…" 36 minutes ago Up 36 minutes 6379/tcp serene_buck
➜ docker stop 8f4c822f95ba
8f4c822f95ba
➜ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f4c822f95ba redis "docker-entrypoint.s…" 36 minutes ago Exited (0) 6 seconds ago serene_buck
$ docker kill <컨테이너ID 또는 이름>
➜ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f4c822f95ba redis "docker-entrypoint.s…" 36 minutes ago Up 36 minutes 6379/tcp serene_buck
➜ docker kill 8f4c822f95ba
8f4c822f95ba
➜ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f4c822f95ba redis "docker-entrypoint.s…" 36 minutes ago Exited (0) 6 seconds ago serene_buck
stop
명령어는 컨테이너에게 SIGTERM
이라는 시그널을 먼저 보낸 뒤에 SIGKILL
시그널을 보낸다.
kill
명령어는 컨테이너에게 SIGTERM
을 보내지 않고 바로 SIGKILL
시그널을 보낸다.
SIGTERM
은 프로세스가 자신이 하던 일을 정리하고(파일, 소켓, 자식 프로세스 등을 정리하거나 임시파일 삭제)종료할 수 있도록 하는 시그널이다. 반면에 SIGKILL
시그널은 프로세스를 무조건 강제종료 시킨다.
4. 삭제 (deleted)
실행(running) 상태인 컨테이너를 삭제할 수는 없다. 컨테이너를 삭제하려면 stop
이나 kill
명령어로 먼저 컨테이너를 멈춰야 한다.
➜ docker start 8f4c822f95ba
8f4c822f95ba
➜ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f4c822f95ba redis "docker-entrypoint.s…" 40 minutes ago Up 1 second 6379/tcp serene_buck
➜ docker rm 8f4c822f95ba
Error response from daemon: You cannot remove a running container 8f4c822f95ba78b747a848cb41f4b5e999bf3ca1f0f814f98953ab0706199497. Stop the container before attempting removal or force remove
➜ docker stop 8f4c822f95ba
8f4c822f95ba
➜ docker rm 8f4c822f95ba
8f4c822f95ba
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
실행(running)상태가 아닌 모든 컨테이너를 삭제하려면 아래와 같은 명령어를 사용한다. ps
의 -q
옵션은 컨테이너 아이디 목록을 불러온다.
$ docker rm `docker ps -a -q`
➜ docker stop `docker ps -a -q`
44bd0e9bd9b8
07c50f2b35da
94dec09b8e34
999c55f53435
ee2ae07ba493
84ad43699b9a
7d7d05246025
사용하지 않는 모든 리소스를 없애려면 아래 명령어를 사용한다. 실행(running) 상태의 컨테이너가 사용하는 리소스는 삭제하지 않는다.
$ docker system prune
➜ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
44bd0e9bd9b85a4cbdece60abc201c4fd4e6b249b2d49a4611be61bc6ffe7ef6
999c55f534356c243ce2c3d6a4b418ddca267d90931148c69402d8f31f7fef0a
Total reclaimed space: 0
출처