도커(Docker)는 애플리케이션과 그 실행에 필요한 모든 환경(코드, 런타임, 라이브러리, 설정 파일 등)을 "컨테이너(Container)"라는 격리된 표준 단위로 패키징하는 기술입니다.
핵심 역할: "빌드하고, 배송하고, 어디서든 실행한다(Build, Ship, and Run Any App, Anywhere)"
Dockerfile:
FROM), 파일 복사(COPY), 명령어 실행(RUN, CMD) 등을 순서대로 정의하는 텍스트 파일입니다.이미지 (Image):
컨테이너 (Container):
레지스트리 (Registry):
문제점: 도커만으로는 수십, 수백 개의 컨테이너를 운영 환경에서 안정적으로 관리하기 어렵습니다. (장애 복구, 스케일링, 네트워킹, 배포 자동화 등)
쿠버네티스(Kubernetes, k8s)는 이러한 복잡한 문제들을 해결하기 위한 컨테이너 오케스트레이션(Container Orchestration) 플랫폼입니다. 즉, "컨테이너 군단(Fleet)을 지휘하는 지휘관" 역할을 합니다.
| 오브젝트 | 역할 | 비유 |
|---|---|---|
| Pod | • 컨테이너를 감싸는 가장 작은 배포 단위. • 일회성이며 IP가 계속 바뀜. | 컨테이너를 담는 작은 캡슐 |
| Deployment | • Pod의 개수와 버전을 관리. • 자동 복구, 스케일링, 무중단 업데이트를 책임짐. | Pod를 관리하는 현장 매니저 |
| Service | • 변하기 쉬운 Pod들에게 고정된 IP와 DNS 이름을 부여. • 요청을 여러 Pod에 로드 밸런싱. | Pod 그룹의 대표 전화번호, 안내 데스크 |
| ConfigMap / Secret | • 애플리케이션의 설정/비밀 정보를 코드와 분리하여 관리. | 설정 파일 보관함 / 비밀 금고 |
Docker와 Kubernetes는 경쟁 관계가 아닌, 상호 보완적인 관계입니다.
Docker는 컨테이너를 만들고(Build), 실행하는(Run) 저수준의 "컨테이너 엔진" 기술에 집중합니다. (컨테이너라는 표준화된 화물을 만듦)
Kubernetes는 Docker로 만들어진 수많은 컨테이너들을 대규모 환경에서 조율하고 관리하는(Orchestrate) 고수준의 "관리 플랫폼"입니다. (수많은 화물들을 배송하고, 관리하고, 배치하는 물류 시스템)
흐름: