DevOps
Docker에 대해서 설명해주세요
가상 머신과 무엇이 다른지, 이미지 레이어는 어떻게 쌓이는지, 컨테이너 생명주기는 어떻게 관리하는지 — 핵심 개념을 인터랙티브 시각화로 체험합니다.
2026년 3월 7일 · 약 12분 읽기
Q. "Docker가 무엇인지 설명하고, 가상 머신과의 차이점은 무엇인지 말씀해주세요."
예상 꼬리질문
답변 가이드
"Docker는 애플리케이션과 그 실행에 필요한 모든 것을 컨테이너라는 격리된 패키지로 묶는 플랫폼입니다. 한 번 만들어두면 개발, 테스트, 운영 환경 어디서든 동일하게 동작합니다."
"가상 머신은 Guest OS 전체를 포함하지만, Docker 컨테이너는 Host OS 커널을 공유합니다. namespace로 프로세스를 격리하고, cgroup으로 리소스를 제한합니다. 그 결과 이미지는 수십 MB, 시작은 밀리초 단위입니다."
"Dockerfile의 각 명령어는 읽기 전용 레이어를 생성합니다. 변경되지 않은 레이어는 캐시에서 재사용되므로 빌드 순서 최적화가 중요합니다."
"로컬에서는 잘 됐는데 서버에서 왜 안 되지?" 개발자라면 누구나 한 번쯤 겪어본 상황입니다. Docker는 바로 이 문제를 근본적으로 해결하기 위해 탄생했습니다.
2013년 공개된 Docker는 오늘날 사실상 모든 클라우드 인프라와 CI/CD 파이프라인의 기반이 되었습니다. 핵심 개념을 직접 만져볼 수 있는 시각화로 체험합니다.
1. 가상 머신과 컨테이너, 무엇이 다른가?
꼬리질문: "가상 머신과 컨테이너의 차이가 뭔가요?"
가상 머신(VM)은 Hypervisor 위에 완전한 Guest OS를 올립니다. 강력한 격리 수준을 제공하지만, 이미지 하나가 수 GB에 달하고 부팅에 수십 초가 걸립니다.
Docker 컨테이너는 Guest OS를 포함하지 않고 Host OS의 커널을 직접 공유합니다. Linux 커널의 두 가지 핵심 기능으로 격리를 구현합니다.
- namespace: 프로세스가 볼 수 있는 리소스를 격리합니다. PID, 네트워크, 파일시스템 등 컨테이너마다 독립적인 뷰를 제공합니다.
- cgroup (Control Group): 프로세스의 CPU, 메모리, 디스크 I/O 사용량을 제한합니다.
아래 다이어그램에서 두 구조를 직접 비교해보세요. 각 레이어에 마우스를 올리면 설명을 확인할 수 있습니다.
각 레이어에 마우스를 올려 설명을 확인하세요
핵심 차이
2. Dockerfile 한 줄이 레이어 하나가 된다
꼬리질문: "Docker 이미지 레이어 구조와 캐싱 원리를 설명해주세요"
Docker 이미지는 단일 파일이 아닙니다. Dockerfile의 각 명령어가 읽기 전용 레이어(Layer)를 생성하고, 이 레이어들이 쌓여 하나의 이미지를 구성합니다. 이를 Union File System(OverlayFS)이라고 합니다.
레이어 구조의 핵심 이점은 캐싱입니다. 빌드 시 각 레이어의 체크섬을 계산해 이전과 동일하면 다시 빌드하지 않습니다. 이 때문에 Dockerfile 작성 시 변경 빈도가 낮은 명령어를 앞에, 자주 변경되는 명령어를 뒤에 배치하는 것이 핵심 최적화 원칙입니다.
컨테이너를 실행하면 이 읽기 전용 레이어들 위에 얇은 읽기/쓰기 레이어가 추가됩니다. 컨테이너 안에서 파일을 수정하면 Copy-on-Write(CoW) 방식으로 해당 파일만 쓰기 레이어로 복사됩니다.
아래 시뮬레이터에서 Dockerfile 명령어가 실행될 때마다 레이어가 쌓이는 과정을 직접 체험해보세요.
Dockerfile
레이어 스택 (위 = 최신)
"다음" 버튼을 눌러 레이어를 추가하세요
3. 컨테이너는 어떤 상태를 거치는가?
꼬리질문: "컨테이너 생명주기에 대해 설명해주세요"
이미지에서 컨테이너를 실행하면 컨테이너는 여러 상태를 거칩니다. 자주 쓰는 docker run은 사실 두 단계의 합성입니다. docker create로 컨테이너를 만들고(Created 상태), docker start로 실행(Running 상태)합니다.
중요한 점은 컨테이너가 Stopped 상태가 되어도 완전히 사라지지 않는다는 것입니다. docker rm으로 제거하기 전까지는 재시작이 가능하며, 컨테이너의 쓰기 레이어 데이터도 유지됩니다.
아래에서 버튼을 클릭해 컨테이너의 상태 전이를 직접 조작해보세요.
실행할 명령어를 선택하세요
4. 여러 컨테이너를 한 번에 — Docker Compose
꼬리질문: "Docker Compose는 무엇이고 왜 사용하나요?"
실제 애플리케이션은 단일 컨테이너로 완결되지 않습니다. 웹 서버, 데이터베이스, 캐시 서버가 각자 다른 컨테이너로 동작하고 서로 통신해야 합니다.
Docker Compose는 이 문제를 YAML 파일 하나로 해결합니다. 같은 Compose 파일에 정의된 서비스들은 자동으로 같은 가상 네트워크에 연결되며, web 서비스에서 데이터베이스에 접속할 때 IP 주소 대신 서비스 이름 db로 접근할 수 있습니다.
아래에서 docker compose up -d 버튼을 눌러 컨테이너 시작 순서와 네트워크 연결을 시각화로 확인해보세요.
docker-compose.yml
postgres:16
myapp:1.0
컨테이너 카드에 마우스를 올려 상세 정보를 확인하세요
면접 체크리스트
이 항목들을 자신 있게 설명할 수 있다면 Docker 질문은 준비 완료입니다.
- - 컨테이너 vs VM: Host OS 커널을 공유하는 격리된 프로세스. namespace + cgroup으로 격리
- - 이미지 레이어: Dockerfile 명령어 순서가 빌드 캐시와 성능을 결정한다
- - 생명주기: Created → Running → Paused/Stopped → Removed. 데이터는 Volume으로 분리
- - Compose: 멀티 컨테이너 앱을 YAML 하나로 정의하고 docker compose up 한 줄로 실행
- - 다음 단계: Kubernetes — 컨테이너 수십~수백 개를 여러 서버에 걸쳐 관리
참고 자료
- Docker 한 시간 만에 배우기 — subicura 블로그 — 국내 최고의 Docker 입문 시리즈. 개념부터 실습까지 단계별로 친절하게 설명합니다
- Dockerfile을 잘 쓰는 법 — 카카오 기술 블로그 — 레이어 캐싱 최적화와 멀티스테이지 빌드를 실무 관점에서 설명한 글
- 도커 컴포즈를 활용하여 완벽한 개발 환경 구성하기 — 44bits — Docker Compose로 로컬 개발 환경을 세팅하는 실전 예제
- Play with Docker — 브라우저에서 Docker 체험 — 설치 없이 브라우저에서 바로 Docker를 체험할 수 있는 무료 샌드박스 환경
의견을 들려주세요
서비스 개선에 큰 도움이 됩니다. 익명으로 자유롭게 남겨주세요.