도커 컨테이너의 생명주기는 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
출처