개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

Docker Container — 이미지로 실행되는 격리된 프로세스

2025년 6월 21일
DockerContainerdocker rundocker psLife Cycle

Container는 이미지를 실행한 순간 탄생하는 격리된 프로세스다. VM과 달리 OS 커널을 공유하지만, 파일시스템·네트워크·프로세스 공간은 완전히 분리된다. 하나의 이미지로 수십 개의 Container를 동시에 띄울 수 있다는 점이 Docker의 핵심 가치다.

Container란 무엇인가

Container는 이미지(Image)의 실행 인스턴스다. 이미지가 클래스라면 Container는 그 클래스로 생성한 객체에 해당한다. 각 Container는 자체 파일시스템 레이어를 가지며, 이미지 레이어 위에 쓰기 가능한 얇은 레이어가 추가된다.

Image: 읽기 전용 레이어의 스택. Container가 삭제되어도 Image는 유지된다.

[Image Layer - Read Only]
  └─ ubuntu:22.04
  └─ apt install nginx
  └─ COPY ./config

[Container Layer - Read/Write]
  └─ 런타임 변경사항 (로그, 임시 파일 등)

생명주기 (Life Cycle)

Container는 명확한 상태 전이를 가진다.

  docker create
       │
       ▼
   [created]
       │  docker start
       ▼
   [running] ──── docker pause ────► [paused]
       │                                 │
       │          docker unpause ◄───────┘
       │  docker stop
       ▼
   [stopped]
       │  docker rm
       ▼
   [removed]
상태설명
createdContainer가 생성됐지만 아직 실행 전
running프로세스가 실행 중
pausedSIGSTOP으로 프로세스 일시 정지
stopped프로세스가 종료된 상태, 재시작 가능
removedContainer가 삭제됨, 복구 불가

핵심 명령어

docker run 은 이미지를 내려받고 Container를 생성·시작하는 작업을 한 번에 수행한다.

# 기본 실행 (포그라운드)
docker run nginx

# 백그라운드 실행 + 포트 바인딩 + 이름 지정
docker run -d -p 8080:80 --name my-nginx nginx

# 컨테이너 안으로 진입
docker run -it ubuntu:22.04 bash

-d (detach): 백그라운드 실행. -p host:container 형태로 포트를 바인딩한다.

포트 바인딩은 호스트의 포트를 Container 내부 포트에 연결한다.

호스트 :8080  ──►  Container :80 (nginx)

실행 중인 Container 관리

# 실행 중인 Container 목록
docker ps

# 전체 Container 목록 (stopped 포함)
docker ps -a

# Container 중지
docker stop my-nginx

# Container 삭제
docker rm my-nginx

# 실행 중인 Container에 명령 실행
docker exec -it my-nginx bash

docker exec 는 이미 실행 중인 Container 안에서 추가 프로세스를 실행한다. Container를 재시작하지 않고 내부 상태를 확인할 때 유용하다.

docker run은 새 Container를 생성하고, docker exec는 기존 Container에 접속한다. 혼동하기 쉬운 차이점이다.

stopped Container와 rm

docker stop은 Container를 종료할 뿐 삭제하지 않는다. docker ps -a에 계속 남아 있으며, docker start로 재시작할 수 있다. 완전히 제거하려면 docker rm이 필요하다. 실행 중인 Container를 강제 삭제할 때는 docker rm -f를 사용한다.

# 중지된 Container 전체 일괄 삭제
docker container prune

불필요한 stopped Container가 쌓이면 디스크를 차지하므로, CI/CD 환경에서는 --rm 플래그로 종료 시 자동 삭제하는 것이 일반적이다.

docker run --rm ubuntu:22.04 echo "done"
← 이전 글Docker Image — 컨테이너를 만드는 읽기 전용 템플릿
다음 글 →Docker CLI — 자주 사용하는 명령어 정리