피드로 돌아가기
The Hidden Life of a Container: A Complete Lifecycle
Dev.toDev.to
Infrastructure

Create와 Start의 분리를 통한 컨테이너 생명주기 최적화 및 커널 레벨 분석

The Hidden Life of a Container: A Complete Lifecycle

John Afariogun2026년 5월 21일14intermediate

Context

단순한 프로세스 격리를 넘어 컨테이너 생성부터 소멸까지의 커널 상태 변화에 대한 이해 부족으로 인한 운영 이슈 발생. 특히 Signal Handling과 Zombie Process 처리 등 PID 1의 책임 범위에 대한 오해로 인한 시스템 불안정성 존재.

Technical Solution

  • docker create 단계를 통한 Namespace, cgroup, OverlayFS, veth pair의 선제적 할당으로 실행 시점의 오버헤드 최소화
  • OverlayFS의 lowerdir(Read-only)과 upperdir(Writable) 구조 설계를 통한 이미지 레이어 효율적 관리 및 저장 공간 최적화
  • containerd-shim을 통한 runc 호출 및 clone() 시스템 콜 기반의 Namespace 활성화로 독립적 실행 환경 구축
  • execve()를 통한 Application의 PID 1 할당 및 이에 따른 Signal Forwarding과 Zombie Reaping 책임 전이 구조 설계
  • Volume 마운트를 통한 Writable Layer의 휘발성 극복 및 데이터 영속성 보장 전략 채택

1. PID 1의 Zombie Process 방지를 위해 `tini` 또는 `--init` 플래그 사용 검토

2. Grace Period 부족으로 인한 데이터 유실 방지를 위해 SIGTERM 처리 로직 및 타임아웃 설정 최적화

3. OOM Killer 발생 시 로그 기록이 남지 않으므로 커널 레벨의 `OOMKilled: true` 지표 모니터링 강화

4. 컨테이너 내부 Writable Layer를 Scratch Space로 취급하고 상태 데이터는 반드시 Volume에 저장

원문 읽기