"내 컴퓨터에서는 잘 되는데, 서버에서는 에러가 나요!"
개발자의 노트북, 테스트 서버, 운영 서버는 운영체제 버전, 자바 버전, 환경 변수 등이 모두 미세하게 다릅니다. 이 '의존성 지옥(Dependency Hell)'을 해결하기 위해 과거에는 가상머신(VM)을 썼지만 너무 무거웠습니다. 도커는 컨테이너(Container) 기술을 이용해 애플리케이션과 그 실행 환경 전체를 하나의 패키지(이미지)로 묶어 어디서든 100% 동일하게 실행되도록(멱등성 보장) 만들어줍니다.
가상머신은 앱을 띄우기 위해 운영체제(Guest OS) 자체를 새로 부팅해야 하지만, 도커 컨테이너는 호스트 OS의 커널(핵심 기능)을 공유하고 단순히 격리된 프로세스 하나를 실행하는 개념입니다. 따라서 부팅이 수 초 이내로 빠르고 자원도 매우 적게 차지합니다.
| 비교 항목 | 가상머신 (Virtual Machine) | 도커 컨테이너 (Docker Container) |
|---|---|---|
| 게스트 OS | 각 VM마다 수십GB의 운영체제(Guest OS) 설치 필수 | 없음 (호스트 OS의 커널을 그대로 공유) |
| 크기 및 리소스 | GB 단위 (매우 무거움), 시스템 자원을 미리 할당해둠 | MB 단위 (매우 가벼움), 필요한 만큼만 동적 사용 |
| 부팅 속도 | OS 부팅 과정이 필요하므로 분(Minute) 단위 소요 | 단순 프로세스 실행과 같아 초(Second) 단위 소요 |
| 이식성 (Portability) | VM 이미지가 크고 하이퍼바이저 종속성이 존재 | 어느 환경(Windows, Mac, Linux)이든 도커만 있으면 100% 동일하게 동작 |