컨테이너 생명주기 (Container Lifecycle)
컨테이너는 만들어졌다가 사라지는 하나의 프로세스이고, 그 사이를 Created·Running·Paused·Exited 상태로 오갑니다. `docker run` 은 사실 create 와 start 를 합친 명령이고, `stop` 은 SIGTERM 을 먼저 보낸 뒤 기다렸다가 SIGKILL 로 강제 종료합니다. 어떤 명령이 어떤 전이를 일으키는지 알면 데이터가 언제 사라지는지도 함께 보입니다.
01컨테이너 생명주기 (Container Lifecycle)
개념 한눈에 보기컨테이너는 결국 하나의 프로세스입니다. 만들어졌다가 사라지기까지 몇 개의 상태를 오갑니다.
docker create · 이미지로부터 컨테이너를 만들기만 합니다. 쓰기 레이어와 설정이 준비될 뿐 프로세스는 아직 뜨지 않습니다.
docker start · 프로세스가 실행됩니다. 흔히 쓰는 docker run 은 사실 create 와 start 를 한 번에 하는 명령입니다.
docker pause · 프로세스를 죽이지 않고 cgroup freezer 로 얼립니다. 메모리 상태가 그대로 유지됩니다.
docker unpause · 얼렸던 프로세스가 멈춘 지점부터 다시 움직입니다.
docker stop · 먼저 SIGTERM 을 보내 정리할 시간을 줍니다. 기본 10초 안에 끝나지 않으면 SIGKILL 로 강제 종료합니다.
프로세스가 끝나면 종료 코드를 남기고 Exited 가 됩니다. 이 코드로 정상 종료인지 장애인지 판단합니다.
Exited 상태의 컨테이너는 쓰기 레이어를 그대로 갖고 있습니다. start 로 되살리면 안에 쌓아 둔 데이터가 남아 있습니다.
docker rm · 여기서 컨테이너와 쓰기 레이어가 함께 사라집니다. 남겨야 할 데이터가 있다면 볼륨에 두어야 하는 이유입니다.
직접 해보기 · docker stop
02 쉽게 이해하기
For Everyone컨테이너는 Created · Running · Paused · Exited 를 오가는 하나의 프로세스입니다. run 은 create 와 start 를 합친 것이고, 쓰기 레이어가 사라지는 시점은 rm 입니다.
create 는 이미지로부터 컨테이너를 만들기만 하고 실행하지 않습니다(Created).
start 로 프로세스가 뜨면 Running, stop 은 SIGTERM → (기본 10초 대기) → SIGKILL 순서로 종료해 Exited 가 됩니다.
Exited 상태의 컨테이너는 쓰기 레이어를 그대로 갖고 있어 restart 하면 데이터가 남아 있지만, rm 으로 지우는 순간 그 레이어도 함께 사라집니다.
- –graceful shutdown 설계(SIGTERM 핸들링)
- –종료 코드로 장애 원인 파악
- –재시작 정책 설정
- –컨테이너 데이터가 사라지는 시점 이해
03 자주 묻는 질문
FAQ컨테이너 생명주기 (Container Lifecycle)란 무엇인가요?+
컨테이너는 만들어졌다가 사라지는 하나의 프로세스이고, 그 사이를 Created·Running·Paused·Exited 상태로 오갑니다. `docker run` 은 사실 create 와 start 를 합친 명령이고, `stop` 은 SIGTERM 을 먼저 보낸 뒤 기다렸다가 SIGKILL 로 강제 종료합니다. 어떤 명령이 어떤 전이를 일으키는지 알면 데이터가 언제 사라지는지도 함께 보입니다.
컨테이너 생명주기 (Container Lifecycle)은(는) 어디에 사용하나요?+
graceful shutdown 설계(SIGTERM 핸들링), 종료 코드로 장애 원인 파악, 재시작 정책 설정, 컨테이너 데이터가 사라지는 시점 이해
컨테이너 생명주기 (Container Lifecycle)를 쉽게 비유하면?+
컨테이너는 Created · Running · Paused · Exited 를 오가는 하나의 프로세스입니다. run 은 create 와 start 를 합친 것이고, 쓰기 레이어가 사라지는 시점은 rm 입니다.
