docker pause / unpause — 컨테이너 일시 정지

docker pause와 unpause 명령의 동작 원리인 cgroup freezer를 이해하고, 일관된 스냅샷 백업, 리소스 확보, 디버깅 등 실전 사용 사례와 stop과의 차이를 정리합니다.

· 5 min read · PALDYN Team

지난 글에서 호스트와 컨테이너 간 파일 복사를 살펴봤다. 이번에는 컨테이너를 종료하지 않고 일시 정지할 수 있는 docker pausedocker unpause를 알아본다. 단순해 보이지만 내부 메커니즘과 활용 패턴을 이해하면 백업·디버깅·리소스 관리에 강력한 도구가 된다.

cgroup freezer 원리

docker pause는 컨테이너 내 프로세스에 SIGSTOP 시그널을 보내는 것이 아니다. Linux cgroup freezer 서브시스템을 사용해 컨테이너에 속한 모든 프로세스를 원자적으로 동결한다.

# pause 후 cgroup 상태 확인 (개념 예시)
cat /sys/fs/cgroup/freezer/<container-id>/freezer.state
# FROZEN

# unpause 후
cat /sys/fs/cgroup/freezer/<container-id>/freezer.state
# THAWED

cgroup freezer의 핵심 장점은 멀티스레드 프로세스도 모든 스레드가 동시에 동결된다는 것이다. SIGSTOP을 개별 PID에 전송하면 스레드 간 타이밍 차이가 생길 수 있지만, freezer는 이런 문제가 없다.

cgroup freezer 동작 원리

기본 사용법

# 컨테이너 일시 정지
docker pause <CONTAINER>

# 일시 정지 해제
docker unpause <CONTAINER>

# 정지된 컨테이너 목록 확인
docker ps --filter 'status=paused'

docker ps에서 STATUS 컬럼은 Up X minutes (Paused)로 표시된다.

pause vs stop

pausestop
메모리보존해제
파일 핸들유지닫힘
소켓 연결유지끊어짐
재개 방법unpause (즉시)start (재시작)
프로세스 상태동결종료

pause는 컨테이너가 살아있는 채로 시간을 멈추는 것과 같다. 소켓 연결이 끊어지지 않으므로 unpause 후 이전 상태에서 정확히 이어진다.

pause / unpause 명령 패턴

실전 활용

일관된 백업 스냅샷:

데이터베이스 컨테이너를 pause하면 쓰기가 완전히 중단되므로, 이 시점에 파일시스템 스냅샷을 찍으면 일관성 있는 백업을 얻을 수 있다.

docker pause db
# 파일시스템 스냅샷 (btrfs/LVM 등)
snapshot_volume /var/lib/docker/volumes/db_data
docker unpause db

pause 시간을 최소화해 서비스 영향을 줄이는 것이 중요하다.

리소스 임시 확보:

무거운 배치 작업이 CPU를 잠시 독점해야 할 때, 다른 컨테이너를 일시 정지해 리소스를 양보받을 수 있다.

docker pause background-worker
run_heavy_batch
docker unpause background-worker

디버깅 목적 동결:

특정 시점의 컨테이너 상태를 분석하고 싶을 때 pause로 동결하고 docker exec로 진입해 파일시스템이나 환경 변수를 검사할 수 있다.

docker pause myapp
docker exec -it myapp /bin/sh
# 파일시스템, 환경 변수, /proc 등 분석
docker unpause myapp

주의 사항

pause 상태에서는 컨테이너가 헬스체크 요청에 응답하지 않는다. 헬스체크 타임아웃이 짧게 설정되어 있으면 unhealthy로 마킹될 수 있고, 이것이 오케스트레이터의 재시작 트리거가 될 수 있다. 운영 환경에서 pause를 사용할 때는 헬스체크 설정을 확인해야 한다.

또한 네트워크 측에서 보면 pause된 컨테이너는 응답이 없는 것처럼 보이므로, 로드 밸런서가 해당 인스턴스를 제외시킬 수 있다.


지난 글: docker cp — 컨테이너와 호스트 간 파일 복사

다음 글: docker rename — 컨테이너 이름 변경


읽어주셔서 감사합니다. 😊