도커의 특성상 가상화 기술과 비교되는 경우가 많다 하지만 이 둘은 분명한 차이가 있다.
도커란? → 실행 환경을 독립적으로 격리한 컨테이너
VirtualBox, VMware 같은 가상화 기술은 가상의 물리 서버를 만드는 것이다.
즉, 물리적인 대상을 SW로 대체했다라는 것이다.
실제의 물리적인 대상인 메인 보드, CPU, Memory 등을 소프트웨어로 구현한 것이다.
실질적으로 물리 서버와 동등한 것이므로 어떠한 OS에서도 아무 것이나 설치가 가능 하며 그 위에서 어떤 SW를 구동하는 것도 가능하다
즉, 가상머신은 하드웨어 수준의 가상화 기술로, 하이퍼바이저(Hypervisor)를 통해 각 VM마다 독립적인 OS를 구동한다.
하이퍼바이저란?
→ CPU, 메모리, 디스크, 네트워크 등 하드웨어 자원을 가상화하여 각 VM에 분배하는 역할을 수행한다.
→ 격리성, 자원분리, 운영체제 다양성, 비교적 무겁다 라는 특징을 가지고 있다.
그렇다면 도커는?
이와 달리 도커는 컨테이너에서 리눅스가 동작하는 것처럼 보이지만 실제 리눅스가 동작하는 것은 X
OS의 기능 중 일부를 호스트 역할을 하는 물리 서버에 맡겨 부담을 덜어 둔 형태다.
→ 컨테이너는 OS의 일부 기능을 호스트 컴퓨터에 의존하기 때문에 물리 서버에도 리눅스 기능이 필요하며, 컨테이너의 내용도 리눅스 OS가 될 수 밖에 없다.
구성 요소
Host OS (호스트 운영체제)
물리 머신의 실제 운영체제 (또는 하이퍼바이저가 직접 실행됨)
Hypervisor (하이퍼바이저)
하드웨어 자원을 분할하여 각 VM에 할당하는 중간 계층
Guest OS (게스트 운영체제)
각 VM이 독립적으로 설치하는 OS (예: Ubuntu, CentOS 등)
Libraries / APP
VM 내부의 독립된 환경에서 실행되는 애플리케이션
구성 요소
Host OS (호스트 운영체제)
실제 물리 서버나 PC의 운영체제 (예: Ubuntu, Windows, macOS)
Docker Engine (도커 엔진)
도커의 핵심 — 컨테이너 생성·관리 역할을 수행
dockerd : 데몬 프로세스로 컨테이너 관리containerd, runc : 컨테이너 실행 및 프로세스 관리Libraries / Dependencies
컨테이너 안의 애플리케이션이 사용하는 라이브러리와 설정 파일들
APP (애플리케이션)
독립된 컨테이너 단위로 실행되는 프로그램
예: Nginx, MySQL, Spring Boot 등

AWS EC2에도 도커의 컨테이너와 비슷한 인스턴스라는 개념이 존재한다
EC2 역시 가상화 기술이다. 각각의 인스턴스가 완전히 독립된 컴퓨터처럼 동작한다.
→ EC2와 도커의 관계는 위의 VirtualBox or VMware와 도커의 관계와 같다.
다만 인스턴스는 컨테이너와 마찬가지로 AMI라는 이미지로부터 생성하므로 인스턴스를 배포하는 방법은 도커와 비슷하다.
| 구분 | Docker | AWS EC2 |
|---|---|---|
| 정의 | 애플리케이션을 컨테이너 단위로 가상화하여 실행하는 기술 | AWS에서 제공하는 가상 서버(Instance) 서비스 |
| 기반 기술 | OS 레벨 가상화 (Container) | 하드웨어 레벨 가상화 (Virtual Machine) |
| 운영 방식 | 하나의 OS 커널을 여러 컨테이너가 공유 | 각 인스턴스가 독립적인 OS를 가짐 |
| 설치 환경 | 로컬 PC, 서버, 클라우드 어디서나 가능 | AWS 클라우드 환경 전용 |
| 시작 속도 | 수 초 (컨테이너 실행) | 수 분 (인스턴스 부팅) |
| 확장성 | 이미지 기반으로 빠르게 복제 가능 | Auto Scaling Group으로 확장 |
| 비용 구조 | 로컬 또는 클라우드 환경에 따라 다름 | 사용한 시간 및 리소스에 따라 과금 |
| 예시 | docker run nginx → 컨테이너 실행 | aws ec2 run-instances → 가상 서버 생성 |
실제 사용 방식에 있어서 차이는 아래와 같다
| 구분 | Docker | AWS EC2 |
|---|---|---|
| 배포 단위 | 이미지(Container) | 인스턴스(VM) |
| 환경 구성 | Dockerfile로 선언적 정의 | AMI 기반 OS 이미지 선택 |
| 확장성 | docker-compose, Kubernetes | Auto Scaling, Load Balancer |
| 유지보수 | 컨테이너 재시작, 롤백 쉬움 | 서버 교체/스냅샷 필요 |
| 주 용도 | 마이크로서비스, CI/CD, 빠른 배포 | 백엔드 서버, 데이터베이스, 웹 서버 호스팅 |
| 대표 예시 | GitHub Actions, Jenkins, K8s | EC2, RDS, Lambda 등과 연동 가능 |
실제 실무에서는 이 둘을 같이 사용하기도 한다.
보통 EC2 위에 Docker를 띄우는 형태로 함께 사용한다.
[AWS EC2 Instance]
└── Ubuntu OS
└── Docker Engine
├── Container 1 (Nginx)
├── Container 2 (Spring Boot)
└── Container 3 (MySQL)
이러한 구조로 사용하면
EC2는 서버 하드웨어 역할, 도커는 앱 실행 환경 관리를 담당하게 된다.
→ 유연성 및 확장성을 동시에 확보
정리하면 도커는 ‘앱 실행 환경 가상화’ AWS EC2는 ‘클라우드 서버 자체 가상화’라고 할 수 있다.

AWS ECS가 이에 해당한다.
이들 서비스를 사용하면 별도로 가상 서버를 만들지 않아도 컨테이너 이미지를 그대로 실행 할 수 있다.
이 둘은 밀접하게 연결되어 있지만, 역할과 추상화 서비스 수준이 다르다.
| 구분 | Docker | AWS ECS (Elastic Container Service) |
|---|---|---|
| 정의 | 컨테이너를 빌드하고 실행하는 도구 (로컬 or 서버) | 도커 컨테이너를 클라우드에서 자동으로 배포·관리하는 AWS 서비스 |
| 역할 | 컨테이너 생성 및 실행 | 컨테이너 오케스트레이션(배포·확장·모니터링) |
| 운영 위치 | 로컬 PC, 온프레미스 서버 등 어디서나 | AWS 클라우드 전용 |
| 관리 단위 | 단일 컨테이너 / 이미지 | 여러 컨테이너(Task, Service) |
| 인프라 관리 | 사용자가 직접 | AWS가 대신 관리 (Fargate 등) |
| 확장성 | 수동 설정 필요 | 자동 확장 지원 (Auto Scaling) |
| 비용 구조 | 무료 (자체 호스팅 시) | EC2/Fargate 사용량 기반 과금 |
| 연계 서비스 | Docker Hub, Docker Compose | EC2, Fargate, ECR, CloudWatch |
ECS는 도커를 클라우드에서 자동으로 관리해주는 서비스이다.
각각의 아키텍처 구조는 아래와 같다.
[Local / Server]
└── Docker Engine
├── Container 1 (App + Lib)
├── Container 2 (DB)
└── Container 3 (Nginx)
[AWS ECS Cluster]
├── ECS Service (웹서비스)
│ ├── Task 1 → Container 1 (Nginx)
│ └── Task 2 → Container 2 (API)
├── ECS Service (DB서비스)
│ └── Task 3 → Container 3 (MySQL)
└── Managed by AWS (EC2 or Fargate)
배포 방식에 있어서도 차이가 있다.
| 항목 | Docker (로컬/자체 서버) | AWS ECS |
|---|---|---|
| 배포 명령어 | docker run / docker-compose up | ECS Task Definition + ECS Service |
| 배포 위치 | 로컬 서버 / EC2 | AWS ECS Cluster (Fargate/EC2) |
| 스케일링 | 수동 (docker-compose scale) | 자동 (Auto Scaling) |
| 로깅/모니터링 | 직접 설정 (Prometheus 등) | CloudWatch로 자동 수집 |
| 장애 복구 | 직접 재시작 | 자동 재시작 (ECS Service) |
실제 실무에서는 이 둘을 같이 사용하기도 한다.
[Dockerfile] → [ECR (이미지 저장)] → [ECS (배포)]
도커로 애플리케이션 이미지 빌드
→ AS ECR에 PUSH (도커 Hub 대체)
→ ECS에서 해당 이미지를 기반으로 컨테이너 실행
→ 필요시 Fargate로 자동 인프라 관리 (서버리스 컨테이너)
