애플리케이션을 쉽게 만들고, 테스트하고, 배포할 수 있도록 도와주는 소프트웨어 플랫폼을 말한다.
이미지:
컨테이너:
Dockerfile:
Docker Hub:
Volime:
네트워크:
Bridge Network (브리지 네트워크) / Host Network (호스트 네트워크) / Overlay Network (오버레이 네트워크)
- Docker는 “가볍고 빠른 애플리케이션 단위의 격리 환경”
- VM은 “무겁지만 완전한 운영체제 단위의 격리 환경”
| 항목 | Docker (컨테이너) | VM (가상머신) |
|---|---|---|
| 부팅 속도 | 수 초 | 수 분 |
| 자원 사용량 | 매우 적음 (OS 공유) | 많음 (OS 중복 설치) |
| 배포 속도 | 매우 빠름 (이미지 실행) | 느림 (OS 설치 필요) |
| 확장성 (Scalability) | 쉽고 빠름 (컨테이너 수십 개도 가능) | 느림 (VM 하나 띄우려면 OS부터 부팅) |
| 격리 수준 | 중간 (커널 공유로 완벽한 분리는 아님) | 높음 (완전한 OS 단위 분리) |
| 이식성 | 매우 높음 (어디서든 같은 환경) | 중간 (하이퍼바이저 종류에 따라 다름) |
| 보안성 | 비교적 낮음 (커널 공유) | 높음 (OS 격리로 완전 분리) |
| 운영 비용 | 낮음 | 높음 |
✅ 장점
❌ 단점
✅ 장점
❌ 단점
| 구분 | Docker | VM |
|---|---|---|
| 격리 단위 | 프로세스 단위 | OS 단위 |
| OS 포함 여부 | ❌ (커널 공유) | ✅ (게스트 OS 포함) |
| 속도 | 매우 빠름 | 느림 |
| 자원 효율 | 높음 | 낮음 |
| 보안성 | 중간 | 높음 |
| 대표 사용처 | 마이크로서비스, 배포 자동화 | 완전 분리된 서버 환경, OS 테스트 |
| 예시 | Spring + Redis + DB 컨테이너 | Ubuntu VM, Windows Server VM |
| 상황 | 권장 |
|---|---|
| 개발/테스트/배포 자동화 환경 구축 | 🐳 Docker |
| 하나의 서버에 수십 개의 마이크로서비스 실행 | 🐳 Docker |
| OS마다 완전한 분리 필요 (Windows+Linux 혼용) | 🖥️ VM |
| 보안이 최우선인 환경 (예: 금융, 국방) | 🖥️ VM |