이번 포스트에서는 도커 컨테이너의 생명주기와 관련 명령어에 대해서 알아보겠습니다.
Container Lifecycle
)컨테이너가 생성되었지만 실행되고있지 않은 상태
예시
$ docker create --name app1 nginx:alpine
# nginx:alpine 를 사용해서 appi1이라는 이름의 컨테이너 생성
컨테이너가 활성화되어 실행중인 상태, 즉 프로세스가 실행중이라는 의미
컨테이너가 생성되었거나 중지된 경우, docker start
를 사용해 시작될 수 있습니다
예시
$ docker start app1
# app1 실행
$ docker run -d --name app2 nginx:alpine
# 도커 생성과 실행을 한꺼번에 하려면 run 명령어를 사용하면 됩니다.
# d 명령어를 통해 백그라운드에서 실행
실행중인 컨테이너는 docker pause
명령어를 통해 일시 중지할 수 있습니다.
특정 컨테이너 내부의 모든 프로세스를 일시 중지(suspending or freezing)하는 효과가 있으며 디스크(파일 시스템) 부분과 메모리(RAM) 부분 모두 컨테이너의 상태가 그대로 유지됩니다.
$ docker pause app1 # app1 컨테이너 일시중지
$ docker unpause app1 # app1 컨테이너 일시중지 해제
pause
) 를 구현하기 위해 유닉스의 POSIX 신호가 아니라 freezer cgroup이 사용되었습니다.컨테이너가 중지되어도 디스크 부분의 상태는 유지되지만, 메모리 부분의 상태는 지워진다는 것이 일시중지(pause
) 상태와 다른 점입니다.
docker stop
명령어 사용
SIGTERM
를 받게 되고 유예기간이 지난 후 SIGKILL
신호를 받게 됩니다.$ docker stop app1 # 유예기간 후 프로세스 종료
docker kill
명령어 사용
SIGKILL
신호가 직접 전송됩니다.docker kill
은 SIGKILL
뿐만 아니라, -signal/-s 인수를 사용하여 컨테이너 프로세스에 모든 신호를 발행하는 데에도 사용할 수 있습니다.$ docker kill app2 # 프로세스 즉시 종료
$ docker kill -s SIGINT app1 # SIGINT 신호 발행
메인 컨테이너 프로세스가 종료 또는 완료된 경우
$ docker run alpine echo "hi"
# 알파인 컨테이너 내에서 echo "hi" 명령을 실행하고 콘솔에 "hi"를 출력한 다음 echo 명령이 완료되면 즉시 종료
메모리 부족 예외(OOME
; Out Of Memory Exception
) 가 발생한 경우
$ docker run -m 50m redis:alpine
# m 옵션을 사용하여 컨테이너의 최대 가용 메모리를 제한
# redis:alpine 이미지로 컨테이너를 실행, 최대 가용 메모리는 50mb로 제한
생성(created)되거나 중지(stopped)된 컨테이너는 docker rm
명령어로 삭제될 수 있습니다.
즉, 실행중(running)이거나 일시중지(paused
)된 컨테이너를 삭제하려고 시도할 경우에는 에러가 발생할 수 있습니다.
해당 명령어를 통해 프로세스들, 파일 시스템, 볼륨과 네트워크 매핑 등의 컨테이너와 관련된 모든 데이터를 삭제할 수 있습니다.
$ docker rm app1