본문 바로가기
  • ✨contact : survd0404@gmail.com
K8S

Docker Compose와 Kubernetes 비교

by 수민이수민수민이수민 2025. 11. 30.
YAML 기본 개념

 

YAML (YAML Ain't Markup Language): 사람이 읽기 쉬운 데이터 직렬화 형식.

구조:

들여쓰기 기반(스페이스 사용O, 탭 금지X).

-값 쌍으로 데이터 표현.

배열(리스트), 딕셔너리() 형식 지원.

 

 

docker-compose
Compose 구성 요소

 

version: Docker Compose 파일 버전.

services: 실행할 컨테이너 목록.

volumes: 데이터 지속성을 위한 저장소 정의.

 

YAML 파일 (docker-compose.yml) 작성 예시
version: '3.8'  # Compose 버전
services:        # 실행할 컨테이너 정의
  web:
    image: nginx
    ports:
      - "8080:80"   # 호스트:컨테이너 포트 매핑
    volumes:
      - ./web:/usr/share/nginx/html  # 로컬 디렉토리를 컨테이너에 마운트
  db:
    image: mysql:5.7
    environment:   # 환경 변수 설정
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: example_db
volumes:
  db-data:  # MySQL 데이터 볼륨

 

Docker Compose 명령어
docker-compose up -d
docker ps

 

 

kubernates
Kubernetes 주요 리소스

 

Pod: 컨테이너의 최소 단위.

Deployment: 애플리케이션 배포 및 스케일링 관리.

Service: 네트워크 접근을 제공.

 

YAML 파일 구조

 

apiVersion: 리소스 API 버전.

kind: 리소스 종류 (e.g., Deployment, Service).

metadata: 리소스 이름, 라벨 정보.

spec: 리소스의 스펙 정의.

 

apiVersion: apps/v1  # 이 리소스의 API 버전 (apps/v1은 Deployment에 사용됨)
kind: Deployment      # Kubernetes 리소스의 종류 (여기서는 Deployment)
metadata:             # 리소스의 메타데이터 정보
  name: web-deployment  # Deployment의 이름 (고유 식별자)
spec:                 # Deployment의 스펙 정의
  replicas: 2         # 이 Deployment가 생성할 Pod 복제본 개수
  selector:           # 이 Deployment가 관리할 Pod를 선택하는 기준
    matchLabels:      # 선택 기준으로 사용할 라벨
      app: web        # 라벨 키와 값 (app: web인 Pod를 선택)
  template:           # Pod 템플릿 정의
    metadata:         # Pod에 적용할 메타데이터
      labels:         # Pod에 지정할 라벨
        app: web      # Pod에 추가될 라벨 (app: web)
    spec:             # Pod의 스펙 정의
      containers:     # Pod에 포함될 컨테이너 목록
      - name: web         # 컨테이너 이름
        image: nginx      # 컨테이너에서 사용할 이미지 (여기서는 Nginx)
        ports:            # 컨테이너의 네트워크 포트 정의
        - containerPort: 80  # 컨테이너에서 노출할 포트 번호

 

apiVersion: v1          # 리소스의 API 버전 (v1은 Service에 사용됨)
kind: Service           # Kubernetes 리소스의 종류 (여기서는 Service)
metadata:               # 리소스의 메타데이터 정보
  name: web-service     # Service의 이름 (고유 식별자)
spec:                   # Service의 스펙 정의
  selector:             # Service가 연결할 Pod를 선택하는 기준
    app: web            # app: web 라벨이 있는 Pod와 연결
  ports:                # Service에서 사용할 포트 정의
    - protocol: TCP       # 네트워크 프로토콜 (기본값은 TCP)
      port: 80           # Service가 외부에 노출할 포트
      targetPort: 80     # Service가 Pod 내부의 컨테이너와 연결할 포트
  type: NodePort         # Service의 유형 (NodePort는 외부 접근 가능)

 

 

Docker Compose와 Kubernetes 비교
항목 Docker Compose Kubernetes
주요 목적 로컬 환경에서 다중 컨테이너 관리 분산 환경에서 컨테이너 오케스트레이션
구성 파일 docker-compose.yml 여러 YAML 파일 (Deployment, Service )
명령어 docker-compose up kubectl apply -f <파일>
네트워크 자동 생성된 내부 네트워크 사용 Pod, Service로 네트워크 관리