
- Kubernetes(K8s): 컨테이너화된 애플리케이션의 배포·스케일링·운영을 자동화하는 오케스트레이션 플랫폼. 선언적 구성과 자동화를 핵심 철학으로 함.
- Docker: 애플리케이션을 이미지로 패키징하고 단일 호스트에서 컨테이너 실행을 제공하는 개발·런타임 도구 세트. K8s는 여러 호스트에 걸친 운영(오케스트레이션)을 담당하며 서로 보완 관계.
- 관계 변화: K8s는 v1.24부터 dockershim 제거 → 기본 런타임은 containerd/CRI-O 등(CRI 표준). 여전히 Docker로 이미지를 빌드해 K8s에서 사용할 수 있음.
왜 필요한가
마이크로서비스/분산 환경에서 수십~수백 개 컨테이너의 배치(placement), 복구(self-healing), 롤링 업데이트, 서비스 디스커버리 등을 자동화해 운영 복잡도를 줄인다.
핵심 개념
- 클러스터/노드: 컨트롤 플레인(API 서버, 스케줄러, 컨트롤러, etcd) + 워커 노드(kubelet, CNI/CSI 통합 런타임).
- Pod: K8s의 최소 배포 단위(하나 이상의 컨테이너의 논리적 그룹). Deployment가 Pod 집합의 선언적 업데이트/스케일링을 관리.
- Service: Pod 집합에 안정적인 가상 IP를 부여(서비스 디스커버리). 유형: ClusterIP, NodePort, LoadBalancer, ExternalName.
- Ingress: L7 규칙(호스트/경로 기반)으로 HTTP(S) 트래픽을 서비스로 라우팅(Ingress Controller 필요).
- 구성/비밀/스토리지: ConfigMap, Secret, 볼륨/PersistentVolume으로 설정·자격증명·데이터 영속화 관리.
- CRI & 런타임: kubelet↔컨테이너 런타임을 추상화하는 CRI 표준. 구현체로 containerd, CRI-O 등을 사용.
| 구분 | Docker | Kubernetes |
|---|
| 주 역할 | 컨테이너 빌드/패키징/단일 호스트 실행 | 컨테이너 오케스트레이션(다중 호스트 배포·스케일링·자가복구) |
| 사용 범위 | 로컬 개발·단일 서버 실행 | 프로덕션급 클러스터 운영 |
| 이미지 처리 | 이미지 빌드/푸시 제공 | 이미지를 소비(레지스트리에서 pull) |
| 런타임 | Docker Engine(내부에 containerd 포함) | CRI 호환 런타임(containerd/CRI-O 등) |
| CLI | docker | kubectl(선언적 매니페스트) |
-> Docker로 만든 이미지를 K8s가 대규모로 운영한다는 분업 구조
출처
Kubernetes
Docker