최근 DevOps, 클라우드, Kubernetes를 공부하다 보면 가장 먼저 접하게 되는 기술이 바로 Docker입니다.
Docker는 애플리케이션과 실행 환경을 하나의 패키지로 만들어 어디서든 동일하게 실행할 수 있도록 해주는 컨테이너(Container) 기반 플랫폼입니다.
과거에는 서버마다 운영체제와 라이브러리 버전이 달라 “내 PC에서는 잘 되는데 서버에서는 실행되지 않는다”는 문제가 자주 발생했습니다. Docker는 이러한 환경 차이를 해결하기 위해 등장했으며, 현재는 웹 서비스, AI, 데이터 분석, 마이크로서비스 등 거의 모든 분야에서 사용되고 있습니다.
이번 글에서는 Docker의 개념과 컨테이너 기술, 가상머신(Virtual Machine)과의 차이점까지 처음 접하는 사람도 이해할 수 있도록 자세히 알아보겠습니다.
Docker란?
Docker는 애플리케이션과 실행에 필요한 라이브러리, 설정 파일 등을 하나의 이미지(Image)로 만들어 동일한 환경에서 실행할 수 있도록 하는 플랫폼입니다.
전체 구조는 다음과 같습니다.
Application
↓
Docker Image
↓
Docker Container
↓
Docker Engine
↓
Linux Kernel
↓
Hardware
Docker는 운영체제 전체를 가상화하는 것이 아니라 애플리케이션 실행 환경만 격리합니다.
컨테이너(Container)란?
컨테이너는 애플리케이션과 실행 환경을 독립적으로 분리한 실행 단위입니다.
예를 들어 하나의 서버에서 다음과 같이 여러 서비스를 동시에 실행할 수 있습니다.
Server
├── Container A (Nginx)
├── Container B (MySQL)
├── Container C (Redis)
└── Container D (Node.js)
각 컨테이너는 서로 영향을 주지 않고 독립적으로 동작합니다.
Docker가 필요한 이유
Docker가 등장하기 전에는 다음과 같은 문제가 많았습니다.
- 개발 환경과 운영 환경이 다름
- 라이브러리 버전 충돌
- 서버마다 설정이 다름
- 배포 과정이 복잡함
Docker는 이러한 문제를 하나의 이미지로 해결합니다.
가상머신(VM)이란?
가상머신은 하나의 물리 서버에서 여러 개의 운영체제를 실행하는 기술입니다.
구조는 다음과 같습니다.
Hardware
↓
Hypervisor
↓
Guest OS
↓
Application
각 VM은 독립된 운영체제를 가지고 있습니다.
Docker와 VM의 차이
Docker는 운영체제를 공유합니다.
Application
↓
Container
↓
Docker Engine
↓
Host OS
VM은 운영체제를 각각 설치합니다.
Application
↓
Guest OS
↓
Hypervisor
↓
Host OS
이 차이 때문에 Docker가 훨씬 가볍고 빠릅니다.
Docker와 VM 비교
| 항목 | Docker | 가상머신 |
|---|---|---|
| 운영체제 | 공유 | 각각 설치 |
| 부팅 속도 | 매우 빠름 | 느림 |
| 메모리 사용량 | 적음 | 많음 |
| 디스크 사용량 | 적음 | 큼 |
| 실행 속도 | 빠름 | 상대적으로 느림 |
| 격리 수준 | 프로세스 단위 | 운영체제 단위 |
Docker의 핵심 구성 요소
Docker는 다음 요소로 구성됩니다.
- Docker Engine
- Docker Image
- Docker Container
- Docker Registry
- Docker CLI
이 다섯 가지를 이해하면 Docker의 전체 구조를 쉽게 이해할 수 있습니다.
Docker Image란?
Image는 컨테이너를 만들기 위한 설계도(Template) 입니다.
예를 들어
Ubuntu Image
↓
Container 1
Container 2
Container 3
하나의 이미지로 여러 개의 컨테이너를 생성할 수 있습니다.
Docker Container란?
Container는 Image를 실행한 실제 인스턴스입니다.
이미지는 읽기 전용이고, 컨테이너는 실행 가능한 상태입니다.
예를 들어
Ubuntu Image
↓
docker run
↓
Ubuntu Container
이라는 과정으로 생성됩니다.
Docker Engine이란?
Docker Engine은 컨테이너를 생성하고 관리하는 핵심 프로그램입니다.
다음 작업을 수행합니다.
- 이미지 다운로드
- 컨테이너 생성
- 실행 및 종료
- 네트워크 관리
- 볼륨 관리
Docker 명령은 모두 Docker Engine이 처리합니다.
Docker Registry란?
Docker Registry는 이미지를 저장하는 저장소입니다.
대표적인 Registry는 다음과 같습니다.
- Docker Hub
- GitHub Container Registry
- Amazon ECR
- Google Artifact Registry
필요한 이미지를 Registry에서 내려받아 사용할 수 있습니다.
Docker의 장점
Docker를 사용하는 이유는 다음과 같습니다.
- 빠른 배포
- 동일한 실행 환경
- 높은 이식성
- 효율적인 자원 사용
- 쉬운 확장
- 마이크로서비스 구현에 적합
특히 CI/CD 환경에서 큰 장점을 제공합니다.
Docker의 단점
다음과 같은 제한 사항도 있습니다.
- Host OS 커널을 공유
- Windows와 Linux 컨테이너 차이 존재
- 보안 설정 필요
- 컨테이너 관리 도구 학습 필요
대규모 환경에서는 Kubernetes와 함께 사용하는 경우가 많습니다.
Docker 설치 확인
Docker가 설치되어 있다면 다음 명령으로 확인할 수 있습니다.
docker --version
예시
Docker version 28.3.2
Docker 정보 확인
docker info
Docker Engine 상태와 저장소, 네트워크 등의 정보를 확인할 수 있습니다.
실행 중인 컨테이너 확인
docker ps
모든 컨테이너를 확인하려면
docker ps -a
를 사용합니다.
실무에서 자주 사용하는 명령어
Docker 버전 확인
docker --version
Docker 정보 확인
docker info
실행 중인 컨테이너
docker ps
전체 컨테이너
docker ps -a
다운로드한 이미지 확인
docker images
Docker 도움말
docker --help
실무 사례
예를 들어 개발자가 자신의 PC에서 Python 웹 애플리케이션을 개발했다고 가정해 보겠습니다.
기존에는 운영 서버의 Python 버전이나 라이브러리가 달라 실행 오류가 발생하는 경우가 많았습니다.
하지만 Docker를 사용하면 다음과 같은 절차로 동일한 환경을 유지할 수 있습니다.
- 애플리케이션과 라이브러리를 Docker Image로 생성
- 이미지를 Docker Registry에 업로드
- 운영 서버에서 동일한 이미지를 다운로드
docker run명령으로 컨테이너 실행- 개발 환경과 운영 환경이 동일하게 유지되어 버전 충돌 없이 서비스 운영
이처럼 Docker는 “한 번 만들면 어디서나 동일하게 실행된다(Build Once, Run Anywhere)”는 장점을 제공합니다.
자주 묻는 질문
Docker는 가상머신인가요?
아닙니다. Docker는 컨테이너 기술을 사용하는 플랫폼입니다. 운영체제를 가상화하는 VM과 달리 Host OS의 커널을 공유하며 애플리케이션 실행 환경만 격리합니다.
Docker를 배우면 Kubernetes도 쉽게 배울 수 있나요?
그렇습니다. Kubernetes는 Docker와 같은 컨테이너를 관리하는 오케스트레이션 플랫폼입니다. Docker를 먼저 이해하면 Kubernetes를 훨씬 쉽게 학습할 수 있습니다.
Docker는 Linux에서만 사용할 수 있나요?
아닙니다. Windows와 macOS에서도 Docker Desktop을 통해 사용할 수 있습니다. 다만 대부분의 운영 서버는 Linux 기반이므로 Linux 환경에서 Docker를 사용하는 경우가 가장 많습니다.
마무리
Docker는 현대적인 서버 운영과 DevOps 환경에서 가장 중요한 기술 중 하나입니다. 컨테이너를 통해 애플리케이션과 실행 환경을 함께 배포함으로써 개발 환경과 운영 환경의 차이를 없애고, 빠르고 안정적인 서비스 운영을 가능하게 합니다. 앞으로 Docker Image, Container, Dockerfile, Volume, Network 등을 차례대로 학습하면 Docker의 전체 구조를 체계적으로 이해할 수 있습니다.