Docker Compose 파일을 통한 YAML 문법 설명 핸드북
1. 최상위 구조
Docker Compose의 YAML 파일(docker-compose.yml)은 다음 최상위(top-level) 요소로 구성된다.
- version: Compose 파일 명세 버전 (예: 
'3.8') - services: 컨테이너 단위의 서비스 정의
 - networks: 서비스 간 통신 네트워크 정의
 - volumes: 데이터 지속성을 위한 볼륨 정의
 - configs, secrets: 설정·비밀값 관리(옵션)
 
version: '3.8'
 
services:
  # 서비스 정의 블록
 
networks:
  # 네트워크 정의 블록
 
volumes:
  # 볼륨 정의 블록
 
configs:
  # 설정(configs) 정의
 
secrets:
  # 비밀(secrets) 정의2. version
- 문자열로 명시 (
'2.4','3.9'등) - 최신 기능을 사용하려면 3.x 계열 권장
 
version: '3.8'3. services
각 서비스는 컨테이너 하나를 나타내며, 서비스 이름으로 블록을 시작한다.
services:
  web:
    image: nginx:latest        # 이미지 이름
    ports:
      - "80:80"                 # 호스트:컨테이너 포트 매핑
    environment:
      - ENV=production         # 환경변수
    volumes:
      - web-data:/usr/share/nginx/html
    networks:
      - front-net
 
  db:
    image: postgres:13
    environment:
      POSTGRES_DB: mydb        # key: value 형태도 가능
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - back-net- image 또는 build(경로/객체) 중 하나 필수
 - ports, environment, volumes, networks, depends_on 등 다양한 옵션 지원
 
4. networks
서비스 간 통신 채널을 정의한다.
networks:
  front-net:
    driver: bridge
  back-net:
    driver: bridge- 기본 드라이버는 
bridge external: true로 외부 네트워크 참조 가능
5. volumes
컨테이너 재시작·삭제 시에도 데이터 유지용 볼륨 정의.
volumes:
  web-data:
  db-data:- 서비스의 
volumes키에서 참조 - 드라이버·옵션 지정 가능
 
6. configs & secrets
configs
Swarm 모드에서 설정 파일 단일 관리
configs:
  app-config:
    file: ./config/app.conf
 
services:
  web:
    configs:
      - source: app-config
        target: /etc/app.confsecrets
민감 정보(비밀번호·키) 파일로 주입
secrets:
  db_pass:
    file: ./secrets/db_pass.txt
 
services:
  db:
    image: postgres:13
    secrets:
      - db_pass7. YAML 문법 포인트
- 들여쓰기: 스페이스만, 탭 금지
 - 시퀀스: 
- item또는[a, b] - 매핑: 
key: value또는{k: v} - 스칼라 표기: 따옴표 생략·
'single'·"double" - 주석: 
# 설명 - 멀티 문서: Compose에선 사용하지 않음
 
8. 예시 전체 구조
version: '3.8'
 
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - web-data:/usr/share/nginx/html
    networks:
      - front-net
 
  db:
    image: postgres:13
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - back-net
    secrets:
      - db_pass
 
networks:
  front-net:
    driver: bridge
  back-net:
    driver: bridge
 
volumes:
  web-data:
  db-data:
 
secrets:
  db_pass:
    file: ./secrets/db_pass.txt이 예시를 통해 Docker Compose 파일에서 최상위 요소, 서비스 옵션, 네트워크·볼륨 정의, configs·secrets 관리를 포함한 YAML 문법 활용법을 한눈에 파악할 수 있다.
⁂