본문 바로가기
클라우드

🐳 도커(Docker) 라이프 사이클 완벽 정리: 이미지부터 컨테이너 실행, 삭제까지

by gasbugs 2025. 12. 15.

안녕하세요! 오늘은 도커(Docker)를 공부할 때 가장 기초가 되면서도, 많은 분들이 헷갈려 하시는 '도커 라이프 사이클(Life Cycle)'에 대해 아주 상세하게 정리해 보려 합니다.

docker create, docker start, docker run... 비슷해 보이는 이 명령어들은 도대체 무엇이 다를까요? 🤔 이 질문에 대한 답은 도커의 생명 주기(흐름)를 이해하면 명쾌하게 해결됩니다.

이미지가 내 컴퓨터로 들어와서, 실행되고, 다시 저장되거나 삭제되는 4단계 과정을 그림과 함께 살펴보겠습니다.


1️⃣ 1단계: 이미지 수급 (Registry ↔ PC)

"재료(설계도)를 준비하는 단계"

모든 컨테이너의 시작은 이미지(Image)입니다. 이 이미지를 외부 저장소에서 내 컴퓨터(Local Host)로 가져오거나, 반대로 내가 만든 이미지를 공유하는 과정입니다.

  • ☁️ Registry (저장소): Docker Hub와 같이 이미지를 모아둔 거대한 창고입니다.
  • ⬇️ PULL: 저장소(Registry)에 있는 이미지를 내 컴퓨터로 다운로드하는 명령어입니다. (예: docker pull ubuntu)
  • ⬆️ PUSH: 내 컴퓨터에서 작업한(혹은 수정한) 이미지를 저장소에 업로드하여 팀원들이나 전 세계 사람들과 공유하는 명령어입니다.

2️⃣ 2단계: 컨테이너 생성 (Image ↔ Container)

"설계도로 건물의 뼈대를 세우는 단계"

다운로드한 이미지는 그 자체로는 실행되지 않는 읽기 전용(Read-only) 파일일 뿐입니다. 이를 바탕으로 실제 작업 공간인 컨테이너를 만들어야 합니다.

  • 🟦 Image (이미지): 실행 불가능한 '설계도' 상태입니다. 아무리 건드려도 원본은 변하지 않습니다.
  • 🏗️ CREATE: 이미지를 기반으로 컨테이너를 생성합니다.
    • ⚠️ 중요: 이때는 파일 시스템 격리만 이루어지고, 아직 프로그램이 실행(메모리 적재)되지는 않은 상태입니다. 마치 컴퓨터 조립은 끝났지만 전원 버튼은 누르지 않은 상태와 같습니다.

3️⃣ 3단계: 실행 및 중지 (Container ↔ Memory)

"전원을 켜고 실제로 작동시키는 단계"

이제 만들어진 컨테이너를 실제로 움직이게 할 차례입니다. CPU와 메모리(RAM)를 사용하여 프로세스가 돌아갑니다.

  • 🚀 START: 생성된(Created) 컨테이너를 실행하여 메모리에 프로세스로 올리는 명령어입니다.
  • 🏃 RUN (가장 많이 씀!): 귀찮은 과정을 한 방에 해결해 줍니다!
    • RUN = PULL(없으면) + CREATE + START
    • 이미지가 없으면 다운받고, 만들고, 바로 실행까지 시켜주는 만능 명령어입니다.
  • 🧠 Memory (프로세스): 컨테이너가 실제로 살아서 숨 쉬는(작동 중인) 상태입니다.
  • 🛑 STOP: 실행 중인 컨테이너를 중지합니다. 프로세스는 메모리에서 내려오지만, 컨테이너 자체(작업 데이터 포함)는 디스크에 그대로 남아있습니다. (컴퓨터 전원만 끈 상태)

4️⃣ 4단계: 저장 및 삭제 (Management)

"결과물을 저장하거나 뒷정리하는 단계"

작업이 끝났다면, 변경된 내용을 저장하여 새로운 설계도로 만들거나 필요 없는 것들을 버려야겠죠?

  • 💾 COMMIT (매우 중요): 컨테이너 안에서 내가 파일을 수정하거나 설정을 바꿨다면? 그 변경 사항을 새로운 이미지로 저장하는 명령어입니다.
    • 컨테이너는 삭제하면 데이터가 날아가지만, commit으로 이미지화해두면 언제든 그 상태 그대로 다시 실행할 수 있습니다.
  • 🗑️ RM (Remove): 중지된 컨테이너를 삭제합니다. (디스크에서 완전히 제거)
  • 🔥 RMI (Remove Image): 로컬에 저장된 이미지 파일 자체를 삭제합니다.

✨ 요약: 도커 명령어의 흐름

이 흐름만 기억하면 도커 마스터가 될 수 있습니다!

  1. PULL: 설계도(Image)를 가져온다.
  2. CREATE: 제품(Container)을 만든다. (아직 작동 X)
  3. START: 제품을 켠다. (작동 O)
    • (Tip: RUN은 1, 2, 3을 한 번에!)
  4. COMMIT: 변경된 내용을 다시 설계도(Image)로 저장한다.
  5. RM / RMI: 필요 없는 제품(Container)이나 설계도(Image)를 버린다.

이 라이프 사이클 다이어그램을 머릿속에 넣어두시면, 오류가 발생했을 때 "아, 지금 이미지는 있는데 컨테이너가 안 만들어졌구나" 혹은 "프로세스만 죽고 컨테이너는 살아있구나"와 같이 정확한 진단이 가능해집니다.

오늘 내용이 도커 학습에 도움이 되셨기를 바랍니다! 궁금한 점은 댓글로 남겨주세요. 👋