10.4.확장 필드로 중복 제거하기

확장 필드

  • YAML의 여러 블록을 한곳에서 정의하는 일종의 사용자 정의 필드.
  • 컴포즈 파일에서는 스크럽트 전체에 걸쳐 이 블록을 재사용하는 효과를 얻을 수 있다.
  • 스크립트의 중복을 제거하는 동시에 잠재적인 오류를 줄여 준다.
  • YAML 병합 문법에 익숙하다면 직관적으로 사용할 수 있다.
  • 다만 컴포즈의 강력한 기능 중 하나이지만 그리 널리 쓰이는 기능은 아니다.

도커 컴포즈 파일에 정의된 확장 필드

  • 블록은 관습적으로 x로 시작하는 이름을 붙인다.
# docker-compose-prod.yml

001) x-labels-1: &logging
002)   logging:  
003)     options:
004)       max-size: '100m'
005)       max-file: '10'
006) 
007) x-labels-2: &labels
008)   app-name: image-gallery
  1. 001~005: logging 확장 필드는 logging 프로퍼티를 포함하므로 서비스에서 바로 사용할 수 있다.
  2. 007~008: labels 확장 필드는 labels 프로퍼티를 포함하지 않기 때문에 기존 labels 필드 안에서 사용돼야 한다.

서비스 정의에서 YAML 병합을 통해 확장 필드를 사용한 예

# docker-compose-prod.yml

001) services:
002)   iotd:
003)     ports:
004)       - 8080:80
005)     <<: *logging
006)     labels:
007)       <<: *labels
008)       public: api
  • 컴포즈 파일의 확장 필드가 처리되는 것을 확인하려면 config 부명령을 사용하면 된다.
001)  docker-compose -f ./docker-compose.yml -f ./docker-compose-prod.yml config
002) services:
003)   iotd:
004)     logging:
005)       options:
006)         max-file: "10"
007)         max-size: 100m
008)     labels:
009)       app-name: image-gallery
010)       public: api

links

social