개발을 하다 보면 “컨테이너”, “도커(Docker)”, “VM”, “이미지” 같은 용어가 자주 등장합니다.
하지만 각각이 정확히 어떤 기술인지 묻는다면 헷갈릴 때가 많습니다.
이 글에서는 컨테이너 기술과 Docker의 차이,
왜 Docker가 대중화되었는지,
어떤 기술적 배경이 있는지
를 정리합니다.
컨테이너는 애플리케이션과 그 실행 환경을 하나로 묶어 실행하는 기술이다.
코드, 라이브러리, 설정 등을 패키징하고, OS 커널 수준에서 격리된 환경에서 실행된다.
컨테이너 기술은 특정 회사가 개발한 기술이 아니라, 리눅스 커널 기능을 활용한 개념이다.
프로세스, 네트워크, 파일 시스템 등을 분리하여
마치 독립적인 시스템처럼 보이도록 만든다.
CPU, 메모리, I/O 등의 사용량을 제한하는 기술.
애플리케이션 + 실행 환경을 패키징한 스냅샷.
OCI(Open Container Initiative) 표준을 따름.
이미지를 실제 컨테이너로 실행하는 역할.
즉, 컨테이너 기술은 위 요소들이 합쳐진 개념이다.
VM은 “가짜 컴퓨터 전체”를 만들고,
컨테이너는 “격리된 프로세스”만 만든다.
컨테이너 기술은 오래전부터 존재했지만, 사용하기 매우 어려웠다.
Namespaces, Cgroups를 직접 설정해야 했고, 이미지 표준도 없었다.
docker run nginx
이 명령 한 줄로 복잡한 리눅스 커널 기능을 자동 설정.
FROM openjdk:17
COPY app.jar .
CMD ["java", "-jar", "app.jar"]
레이어(layer) 기반 이미지 포맷을 도입하여
캐싱·배포·공유가 쉬워짐.
누구나 이미지 공유 → 즉시 사용 가능.
개발자가 컨테이너 기술 자체를 몰라도 쉽게 사용 가능.
Docker는 “컨테이너 기술을 쉽게 사용할 수 있게 만든 플랫폼”이다.
컨테이너 기술 자체를 만든 것이 아니다.
컨테이너의 핵심인 Namespaces/Cgroups는 리눅스 커널 기능이다.
그래서 초기에는 컨테이너는 리눅스에서만 실행할 수 있었다.
Linux Kernel
├─ Namespaces
├─ Cgroups
├─ OverlayFS
Docker Desktop이 내부적으로 리눅스 VM을 1개 실행하기 때문이다.
그 VM 내부에서 리눅스 컨테이너가 실행된다.
→ 아니다.
VM은 1개만 돌고, 그 안에서 컨테이너가 빠르게 실행된다.
실제 서버에서는 리눅스 위에서 VM 없이 바로 실행되므로
컨테이너의 성능 장점은 그대로다.
꼭 그렇진 않다.
시장 기준으로는 “컨테이너 = 사실상 리눅스 컨테이너”
Docker가 성공한 가장 큰 이유는 바로 이미지의 표준화이다.
“내 컴퓨터에서는 되는데 서버에서만 오류 남”
이 문제가 거의 사라짐.
| 구분 | 컨테이너 기술 | Docker |
|---|---|---|
| 정의 | OS 수준 가상화 기술 자체 | 컨테이너 기술을 쉽게 쓰도록 만든 플랫폼 |
| 제공자 | 기술 개념 | Docker Inc. |
| 기반 | 리눅스 커널 기능 | Linux 기반 컨테이너를 추상화 |
| 구성 요소 | Namespaces, Cgroups, 이미지 포맷, 런타임 | Dockerfile, Docker Engine, CLI, Hub |
| 실행 환경 | 리눅스 중심 | Mac/Windows에서는 내부 VM 사용 |