도커 컨테이너의 생명주기

Created
Feb 6, 2021
Created by
Tags
Docker
Property
 
 
도커 컨테이너의 생명주기는 5단계로 구분한다.
 
notion image
 
 
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 시그널은 프로세스를 무조건 강제종료 시킨다.
notion image
notion image
 
 
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
 
 
 
출처