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로 네트워크 관리 |