
📝 Dockerfile ➜ 🔨 docker build ➜ 📦 Image ➜ ▶️ docker run ➜ 🏃 Container
도커는 리눅스 컨테이너를 누구나 쉽게 쓸 수 있게 만든 표준 툴셋이다.
리눅스 컨테이너에 대해서 알아보자
하나의 리눅스 머신 안에서 애플리케이션 실행환경을 가볍게 여러개 쪼개서 격리하는 기술
- 서버 한대에 여러 앱을 돌리면 서로 간섭
- VM(Virtual Machine)으로도 분리 가능했지만 너무 무거움
- 컨테이너로 커널(핵심 OS)는 공유하고, 앱 실행환경만 가상으로 격리
[ Linux Host OS ]
└─ Linux Kernel (Namespace + cgroup)
├─ Container 1 (nginx 실행)
├─ Container 2 (mysql 실행)
├─ Container 3 (api 서버 실행)
| 🔍 | 리눅스 컨테이너 | 가상머신(VM) |
|---|---|---|
| 🏠 비유 | 한 집(커널)에서 방만 여러 개 만든 것 | 집 자체를 통째로 복제해서 여러 채 만든 것 |
| 📦 무게 | 커널은 공유하니까 가볍다 | OS가 하나씩 따로라 무겁다 |
| ⚡ 속도 | 프로세스 수준이라 초 단위로 실행 | OS 부팅까지 걸려서 느리다 |
여러 컨테이너를 한 번에 정의하고 실행하는 YAML 기반 도구
| 비교 항목 | 🐳 Docker Compose | ☸️ Kubernetes |
|---|---|---|
| 📌 목적 | 여러 컨테이너를 로컬/개발/테스트용으로 간단하게 관리 | 컨테이너를 대규모 분산 환경에서 자동 운영 |
| ⚙️ 스케일링 | docker-compose up --scale로 수동 확장 가능, 자동은 안 됨 | 자동 스케일링(HPA), 롤링 업데이트, 롤백 지원 |
| 🔄 상태 복구 | 컨테이너 실패 시 자동 재시작 일부 지원 (depends_on 제한적) | 파드 자동 복구, Self-Healing |
| 🗂️ 구성 파일 | docker-compose.yml | 여러 YAML 매니페스트(Deployment, Service, Ingress 등) |
| 🧩 네트워킹 | 단일 호스트(로컬 bridge 네트워크) 중심 | 클러스터 전역 Overlay 네트워크 |
| ☁️ 멀티 호스트 지원 | 기본적으로는 단일 호스트 | 멀티 노드 클러스터, 클라우드 네이티브 |
| 🚀 운영환경 | 로컬/개발에 최적화 | 프로덕션(대규모, 무중단 배포) 필수 |
대규모 컨테이너(Pod)를 자동 배포, 운영, 복구, 확장하는 오케스트레이션 플랫폼
| 🚫 컨테이너만 쓸 때 | ☸️ 쿠버네티스 쓸 때 |
|---|---|
| Pod 다운 시 직접 재시작 | 죽으면 자동으로 다시 띄움 (Self-Healing) |
| 새 버전 배포 중 다운타임 발생 | 롤링 업데이트로 단계적 교체, 장애 시 롤백 |
| 트래픽 폭주하면 수동으로 scale | HPA로 CPU/메모리 기반 오토스케일링 |
| 컨테이너 IP 바뀌면 통신 오류 | Service가 IP를 고정하고 로드밸런싱 |
| 시크릿/환경변수 직접 관리 | ConfigMap/Secret으로 안전하게 주입 |
| 클라우드 연동 직접 셋팅 | 관리형 K8s(EKS, GKE, AKS)로 부담 ↓ |
| 오브젝트 | 설명 |
|---|---|
| 🧩 Pod | 쿠버네티스에서 관리하는 최소 실행 단위. 보통 하나의 Pod에 하나의 컨테이너가 들어있지만, 사이드카 패턴 등으로 여러 개도 가능! |
| 📑 Deployment | “내 Pod 3개로 유지해!” 같은 원하는 상태를 선언하고 자동으로 유지하게 함. 롤링 업데이트, 롤백까지 자동. |
| 🔗 Service | IP가 계속 바뀌는 Pod들을 고정 주소로 묶고 로드밸런싱해줌. 클러스터 내부/외부 접근 모두 담당! |
| 🌍 Ingress | 외부 트래픽을 Service로 라우팅. 도메인 기반 라우팅 & TLS(HTTPS) 설정도 가능! |
Pod -> Deployment로 유지 -> Service로 묶고 -> Ingress로 외부로 공개
- 쿠버네티스에서 관리하는 가장 작은 배포 단위
- 하나 이상의 컨테이너를 묶어 하나의 논리 단위로 실행
-> 컨테이너 단일 실행만 있으면 로그 수집, 모니터링 등 사이드카 패턴 같은 부가기능 불가능
Pod를 원하는 상태로 선언하고 지속적으로 유지하도록 관리하는 쿠버네티스 리소스
| 역할 | 설명 |
|---|---|
| 📋 선언적 상태 유지 | replicas: 3이라면 항상 3개 Pod 유지 |
| 🔄 롤링 업데이트 | 새 이미지 배포 시 다운타임 없이 단계적 교체 |
| 🔙 롤백 | 장애 발생 시 이전 버전으로 즉시 복원 |
| 🌀 스케일링 | replicas 숫자만 바꿔도 수평 확장/축소 가능 |
동적 Pod들을 하나로 묶고, 고정 IP/도메인/로드밸런싱을 제공
| 타입 | 설명 |
|---|---|
| 📡 ClusterIP | 클러스터 내부 통신용 (기본) |
| 🌐 NodePort | 클러스터 외부에서 Node IP + Port로 접근 가능 |
| ☁️ LoadBalancer | 클라우드 환경에서 외부 로드밸런서와 연동 (AWS ELB 등) |
| 🔗 Headless | Service DNS만 제공, 직접 Pod로 접근 (StatefulSet에서 사용) |
- 외부 클라이언트 트래픽을 Service로 도메인 기반으로 라우팅하는 진입점
- 로드밸런싱 + 리버스 프록시 + TLS 설정
| 기능 | 설명 | 예시 |
|---|---|---|
| 🌐 도메인 라우팅 | 하나의 IP에 여러 도메인을 연결해 각기 다른 Service로 트래픽 분기 | api.example.com → API Servicewww.example.com → Web Service |
| 🔒 TLS 종단 처리 | HTTPS 인증서를 Ingress에서 관리하고 SSL 연결을 종료(종단 처리) | Let’s Encrypt 자동 발급 연동 |
| 🔗 리버스 프록시 | 하나의 도메인에서 경로(path)에 따라 다른 Service로 연결 | /api → API Service/static → Static Service |
컨테이너(Container)라는 격리된 실행환경에서 애플리케이션을 구동해
개발 → 테스트 → 운영까지 동일한 환경을 보장하는 가상화 기술입니다.
이미지는 컨테이너 실행에 필요한 템플릿(스냅샷)이고,
컨테이너는 그 이미지를 실행한 실제 인스턴스입니다.
VM은 OS 단위 가상화라 무겁고 느린 반면, Docker는 커널을 공유하고
앱 실행환경만 격리해 가볍고 실행 속도가 빠릅니다.
리눅스 커널의 네임스페이스와 cgroup 기능을 활용해 프로세스를 서로 격리하고,
리소스를 제한하여 동일 OS 안에서 여러 격리된 앱 환경을 운영하는 기술입니다.
컨테이너는 기본적으로 호스트와 네트워크가 격리되어 있어 외부에서 접근할 수 없습니다.
-p 옵션으로 호스트 포트를 컨테이너 포트에 연결해 접근 경로를 열어줍니다.
여러 컨테이너(웹 서버, DB 등)를 한 번에 정의하고 실행할 수 있어
MSA 개발과 테스트 환경 구축이 간편해집니다.
Dockerfile로 이미지를 빌드하고, docker-compose.yml로
그 이미지를 기반으로 여러 컨테이너를 정의하고 실행합니다.
수백~수천 개의 컨테이너(Pod)를 자동으로 배포, 운영, 복구, 확장하는
오케스트레이션 플랫폼입니다.
컨테이너만으로는 장애 복구, 스케일링, 롤링 업데이트, 롤백 등을 수동으로 해야 해
운영이 어렵습니다. Kubernetes는 이걸 자동화해 무중단 서비스를 실현해줍니다.
쿠버네티스에서 관리하는 가장 작은 실행 단위로, 하나 이상의 컨테이너와
공유 네트워크/볼륨으로 구성됩니다.
Pod의 원하는 상태(예: 3개로 유지)를 선언하면, 쿠버네티스가
ReplicaSet으로 이를 자동으로 유지하고 롤링 업데이트/롤백을 지원합니다.
IP가 바뀌는 Pod들을 고정 IP/도메인으로 묶어 안정적인 통신과 로드밸런싱을 제공합니다.
외부 트래픽을 도메인/경로 기반으로 Service에 연결하고, HTTPS까지 처리하는
클러스터 진입점입니다.
ReplicaSet이 원하는 개수와 실제 개수를 비교하고, 부족하면 즉시 새 Pod를 생성합니다.
Horizontal Pod Autoscaler(HPA)가 CPU/메모리 사용량을 감시해
자동으로 Pod 수를 늘려줍니다.
대규모 클러스터에서 장애 복구, 롤링 업데이트, 오토스케일링 같은 고급 기능을
훨씬 안정적으로 지원하며, 클라우드 관리형 서비스(EKS/GKE/AKS)가 풍부해 운영 비용이 절감됩니다.
수 많은 컨테이너들을 자동으로 관리하는 Container Orchestrator

애플리케이션의 기능을 논리적으로 분리된 세 개의 개층으로 나누어 구성하는 클라이언트-서버 아키텍쳐






