안녕하세요! 오늘은 도커(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): 로컬에 저장된 이미지 파일 자체를 삭제합니다.
✨ 요약: 도커 명령어의 흐름
이 흐름만 기억하면 도커 마스터가 될 수 있습니다!
- PULL: 설계도(Image)를 가져온다.
- CREATE: 제품(Container)을 만든다. (아직 작동 X)
- START: 제품을 켠다. (작동 O)
- (Tip: RUN은 1, 2, 3을 한 번에!)
- COMMIT: 변경된 내용을 다시 설계도(Image)로 저장한다.
- RM / RMI: 필요 없는 제품(Container)이나 설계도(Image)를 버린다.
이 라이프 사이클 다이어그램을 머릿속에 넣어두시면, 오류가 발생했을 때 "아, 지금 이미지는 있는데 컨테이너가 안 만들어졌구나" 혹은 "프로세스만 죽고 컨테이너는 살아있구나"와 같이 정확한 진단이 가능해집니다.
오늘 내용이 도커 학습에 도움이 되셨기를 바랍니다! 궁금한 점은 댓글로 남겨주세요. 👋
'클라우드' 카테고리의 다른 글
| 🛡️ Docker Swarm에서 --with-registry-auth의 늪 탈출하기: 보안과 효율성 사이의 균형 (0) | 2026.01.09 |
|---|---|
| 🐳 도커 데몬 소켓 노출 가이드: 효율과 보안 사이의 균형 잡기 (0) | 2026.01.09 |
| 🚛 Docker에서 Containerd로 이사 가기: 명령어 완벽 적응 가이드 & 비교표 (0) | 2025.12.11 |
| [개발자 비상] "그 서버 왜 켜놨어요?"... 지갑을 감시하는 저승사자, FinOps의 습격 💸🕵️ (0) | 2025.12.09 |
| [기술 심층분석] "도커(Docker)는 끝났다?"... 컨테이너를 집어삼킬 WebAssembly(Wasm)의 부상 ⚡ (0) | 2025.12.09 |