최근 클라우드 네이티브 환경에서 도커(Docker)는 선택이 아닌 필수가 되었습니다. 하지만 도커를 단순히 "가벼운 가상머신" 정도로만 이해하고 넘어가는 경우가 많습니다.
이번 포스팅에서는 Docker 공식 문서를 기반으로 컨테이너의 본질적인 개념과 도커 엔진의 아키텍처, 그리고 가상머신(VM)과의 기술적 차이를 정리해보고자 합니다.
1. 컨테이너(Container)란 무엇인가?
도커 공식 문서에 따르면, 컨테이너는 "코드와 모든 종속성(Dependencies)을 패키징하여, 애플리케이션이 한 컴퓨팅 환경에서 다른 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어 표준 단위"입니다.
쉽게 말해, 애플리케이션을 구동하는 데 필요한 라이브러리, 시스템 도구, 코드, 런타임 등을 하나의 '논리적 패키지'로 묶어 격리된 공간에서 실행하는 기술입니다.
가상머신(VM) vs 컨테이너 (핵심 비교)
도커를 이해하는 가장 빠른 방법은 기존 가상화 기술인 VM(Virtual Machine)과 비교하는 것입니다.

| 비교 항목 | 가상머신 (Virtual Machine) | 컨테이너 (Container) |
| 가상화 대상 | 하드웨어 가상화 | 운영체제(OS) 가상화 |
| 구조 | Hypervisor 위에 Guest OS를 각각 설치 | Host OS의 커널(Kernel)을 공유 |
| 무게 | 무거움 (GB 단위, 전체 OS 포함) | 가벼움 (MB 단위, 애플리케이션만 포함) |
| 부팅 속도 | 느림 (OS 부팅 과정 필요) | 매우 빠름 (프로세스 실행 속도) |
- VM의 한계: 하이퍼바이저(Hypervisor)를 통해 하드웨어 리소스를 가상화하고, 그 위에 무거운 Guest OS를 일일이 설치해야 하므로 리소스 낭비가 심합니다.
- 컨테이너의 혁신: Host OS의 커널을 공유하면서, 애플리케이션 프로세스만 격리된 사용자 공간(User Space)에서 실행합니다. 이로 인해 훨씬 가볍고 효율적입니다.
2. 도커 아키텍처 (Docker Architecture)
도커는 클라이언트-서버(Client-Server) 구조를 따릅니다. 우리가 터미널에서 명령어를 치는 것과 실제 도커가 동작하는 곳은 분리되어 있습니다.

1) 도커 데몬 (Docker Daemon, dockerd)
- 도커의 심장부입니다. 호스트 머신에서 백그라운드로 실행됩니다.
- 이미지, 컨테이너, 네트워크, 볼륨과 같은 도커 객체(Object)들을 생성하고 관리합니다.
- 다른 데몬과 통신하여 도커 서비스를 관리하기도 합니다.
2) 도커 클라이언트 (Docker Client, docker)
- 사용자가 도커와 상호작용하는 기본 방법(CLI)입니다.
- 예를 들어 docker run 명령어를 입력하면, 클라이언트는 Docker API를 통해 도커 데몬에게 작업을 요청합니다.
- 하나의 클라이언트가 여러 데몬에 연결될 수도 있습니다.
3) 도커 레지스트리 (Docker Registry)
- 도커 이미지를 저장하는 저장소입니다.
- 대표적으로 Docker Hub가 있으며, 누구나 사용할 수 있는 공용 레지스트리입니다. (물론 사내 전용 Private Registry를 구축할 수도 있습니다.)
- docker pull이나 docker run 명령어를 사용하면, 데몬은 레지스트리에서 필요한 이미지를 가져옵니다.
3. 도커의 핵심 객체
도커를 사용한다는 것은 결국 다음의 객체들을 만들고 사용하는 과정입니다.
이미지 (Image)
- "읽기 전용(Read-only) 템플릿"입니다.
- 컨테이너를 생성하기 위한 지침이 포함되어 있습니다.
- 이미지는 레이어(Layer) 구조로 되어 있어, 베이스 이미지 위에 필요한 설정과 파일을 층층이 쌓아 만듭니다. 이는 도커의 뛰어난 재사용성과 가벼운 용량의 비결이기도 합니다.
컨테이너 (Container)
- "이미지의 실행 가능한 인스턴스"입니다.
- 이미지가 붕어빵 틀이라면, 컨테이너는 실제 붕어빵입니다.
- 실행 시점에 이미지 위에 '쓰기 가능한(Writable) 레이어'를 추가하여, 실행 중 발생하는 변경 사항을 저장합니다.
- 다른 컨테이너 및 호스트 머신과 격리되어 있어 보안성이 높습니다.
4. 왜 도커를 사용해야 하는가?
공식 문서에서는 도커의 이점을 다음과 같이 정리합니다.
- 빠르고 일관된 배포 (Fast, Consistent delivery): 개발 환경(로컬)과 운영 환경(프로덕션)의 차이를 없애줍니다. "내 컴퓨터에서는 되는데?"라는 문제를 원천 차단합니다.
- 반응형 배포 및 확장 (Responsive deployment): 컨테이너는 가볍기 때문에 트래픽에 따라 거의 실시간으로 늘리거나 줄일 수 있습니다.
- 동일한 하드웨어에서 더 많은 작업 수행: VM보다 리소스를 훨씬 적게 차지하므로, 같은 서버 용량으로 더 많은 애플리케이션을 구동할 수 있습니다.
Reference
https://docs.docker.com/get-started/docker-overview/#responsive-deployment-and-scaling
What is Docker?
Get an in-depth overview of the Docker platform including what it can be used for, the architecture it employs, and its underlying technology.
docs.docker.com
https://www.docker.com/resources/what-container/
What is a Container? | Docker
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of s
www.docker.com
'Backend & Infra > Docker' 카테고리의 다른 글
| [Docker] 도커란 무엇인가? 이미지와 컨테이너 간단 정리 (0) | 2025.12.11 |
|---|---|
| 로컬에서 프로젝트(PDFMASK) 서비스를 Docker로 실행하는 방법 (0) | 2025.11.26 |
| Docker 명령어 정리 (자주 사용하던 명령어_2) (1) | 2025.06.04 |
| GCP 서버에 (Flask + Gunicorn) + KoBERT + Whisper 기반 음성피싱 탐지 시스템 구축기 (1) | 2025.05.27 |
| GCP + Docker 기반 Flask API 서버 배포 중 발생한 3가지 핵심 문제와 해결 방법 (0) | 2025.05.23 |