확장 필드
- 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
- 001~005: logging 확장 필드는 logging 프로퍼티를 포함하므로 서비스에서 바로 사용할 수 있다.
- 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