학습 목표
가상 머신(VM)과 컨테이너의 차이를 설명할 수 있다.
컨테이너가 프로세스 격리로 동작함을 설명할 수 있다.
이미지·컨테이너·레지스트리의 관계를 설명할 수 있다.
컨테이너를 도입할 때 얻는 것과 잃는 것을 설명할 수 있다.
문제 상황
- "내 로컬에선 되는데 서버에서만 깨진다"
- Python 3.9 vs 3.11, OpenSSL 버전,
libc차이
- Python 3.9 vs 3.11, OpenSSL 버전,
- VM마다 OS 패치·디스크·부팅 시간이 부담
- 마이크로서비스 20개에 VM 20대는 무겁다
- 배포할 때마다 수동으로 런타임 설치
- 재현 가능한 환경 단위가 없다
오리엔테이션에서 code → deploy 파이프라인을 봤다. 컨테이너는 앱 + 의존성을 하나의 실행 단위로 묶는다.
1. VM vs 컨테이너
둘 다 격리를 제공하지만 추상화 층이 다르다.

| 가상 머신 (VM) | 컨테이너 | |
|---|---|---|
| 격리 단위 | 하드웨어 가상화 (Hypervisor) | OS 커널 위 프로세스 |
| 게스트 OS | 각 VM마다 전체 OS | 호스트 커널 공유 |
| 시작 시간 | 분 단위 (부팅) | 초 단위 |
| 이미지 크기 | GB 단위 | MB~수백 MB |
| 밀도 | 상대적으로 낮음 | 같은 호스트에 많이 배치 가능 |
- VM이 필요한 경우
- 다른 OS 커널이 필요 (Windows on Linux host 등)
- 강한 하드웨어 수준 격리·컴플라이언스
- 컨테이너가 유리한 경우
- Linux 위 Linux 워크로드, 빠른 배포·스케일
- 동일 커널에서 앱 단위 패키징
2. 컨테이너 = 격리된 프로세스
컨테이너는 "가벼운 VM"이 아니라 namespace + cgroup 으로 묶인 프로세스다.
- Linux namespace
- PID, mount, network, UTS 등 보이는 자원 분리
- 컨테이너 안 PID 1은 호스트에서 다른 PID
- cgroup (Control Group)
- CPU·메모리·I/O 사용량 제한·측정
- OOM 시 특정 컨테이너만 종료 가능

- 호스트 커널 하나를 공유
- 커널 취약점은 격리 경계를 넘을 수 있음 — 런타임·보안 편에서 보강
- 컨테이너 안 프로세스는 호스트에서
ps로 볼 수 있다 (namespace 밖에서)- "가상"이지 물리적으로 다른 머신이 아님
3. 이미지 · 컨테이너 · 레지스트리
배포 단위의 핵심 개념 세 가지.

| 개념 | 설명 | 비유 |
|---|---|---|
| Image | 읽기 전용 레이어 스택. 앱·런타임·라이브러리 포함 | 클래스, 금형 |
| Container | 이미지에서 생성된 실행 인스턴스. 쓰기 레이어 추가 | 객체, 인스턴스 |
| Registry | 이미지 저장·배포 저장소 (Docker Hub, ECR, GCR) | npm, Maven Central |
- 이미지는 불변(immutable) 에 가깝다
- 변경은 새 이미지 빌드 → 배포
- "서버에 SSH 들어가서 apt upgrade"는 컨테이너 철학과 어긋남
- 컨테이너 쓰기 레이어는 삭제되면 사라짐
- 영속 데이터는 볼륨·외부 DB에 (다음 Docker 편)
Dockerfile → docker build → Image → docker push → Registry
→ docker run → Container(s)
4. 왜 컨테이너인가
플랫폼 오리엔테이션의 배포 문제에 대한 답.
| 이점 | 설명 |
|---|---|
| 환경 일관성 | dev / staging / prod 동일 이미지 |
| 빠른 배포 | VM 부팅 없이 pull & run |
| 밀도·비용 | 같은 하드웨어에 더 많은 워크로드 |
| 오케스트레이션 | K8s가 컨테이너를 스케줄·복구·스케일 (이후 편) |
| 트레이드오프 | 설명 |
|---|---|
| 상태 관리 | 기본적으로 ephemeral — 스토리지 설계 필요 |
| 네트워킹 | overlay, service mesh 등 복잡도 |
| 보안 | 공유 커널 — 이미지 스캔, rootless, 최소 권한 |
| 관측 | 로그·메트릭이 stdout/파일이 아닌 플랫폼으로 모여야 함 |
- 컨테이너만으로 끝이 아니다
- 오케스트레이션(Kubernetes), CI/CD, 레지스트리·시크릿이 함께 가야 프로덕션에 쓴다
다음에 다룰 것
- Docker 기초
- Dockerfile, 레이어 캐시, 볼륨, 포트 매핑
해당 내용은 Docker Documentation 및 OCI Image Format Specification 의 내용을 기반으로 합니다.
'플랫폼, 데브옵스와 클라우드' 카테고리의 다른 글
| Pod와 Deployment (0) | 2026.06.23 |
|---|---|
| Kubernetes 개요 (0) | 2026.06.22 |
| 컨테이너 런타임과 보안 (0) | 2026.06.21 |
| Docker 기초 (0) | 2026.06.20 |
| 플랫폼 오리엔테이션 (0) | 2026.06.18 |