Fragments
Fragments (프래그먼트)
Compose에서는 내장 YAML 기능을 사용해 Compose 파일을 더 깔끔하고 효율적으로 만들 수 있어요. 앵커(anchor)와 별칭(alias)으로 재사용 가능한 블록을 만들 수 있어요. 여러 서비스에 걸쳐 공통 설정이 있을 때 유용하며 재사용 블록이 잠재적 실수를 줄여줘요.
출처: 문서
본문
앵커는 & 기호로 만들고 그 뒤에 별칭 이름이 와요. 나중에 이 별칭을 * 기호로 참조해 앵커 뒤의 값을 사용할 수 있어요. &와 * 문자와 다음 별칭 이름 사이에 공백이 없어야 해요.
하나의 Compose 파일에서 여러 앵커와 별칭을 사용할 수 있어요.
예시 1 (Example 1)
volumes:
db-data: &default-volume
driver: default
metrics: *default-volume
위 예제에서 default-volume 앵커가 db-data 볼륨을 기반으로 만들어지고, 나중에 *default-volume 별칭으로 재사용되어 metrics 볼륨을 정의해요.
앵커 해석은 변수 보간(interpolation)보다 먼저 일어나므로 변수로 앵커나 별칭을 설정할 수 없어요.
예시 2 (Example 2)
services:
first:
image: my-image:latest
environment: &env
- CONFIG_KEY
- EXAMPLE_KEY
- DEMO_VAR
second:
image: another-image:latest
environment: *env
둘 이상의 서비스에서 쓰려는 앵커가 있으면 extension과 함께 사용해 Compose 파일을 유지보수하기 쉽게 만들 수 있어요.
예시 3 (Example 3)
값을 부분적으로 오버라이드할 수도 있어요. Compose는 YAML merge type이 규정한 규칙을 따라요.
다음 예제에서 metrics 볼륨 사양은 반복을 피하려고 별칭을 사용하지만 name 속성은 오버라이드해요:
services:
backend:
image: example/database
volumes:
- db-data
- metrics
volumes:
db-data: &default-volume
driver: default
name: "data"
metrics:
<<: *default-volume
name: "metrics"
예시 4 (Example 4)
앵커를 확장해 추가 값을 더할 수도 있어요.
services:
first:
image: my-image:latest
environment: &env
FOO: BAR
ZOT: QUIX
second:
image: another-image:latest
environment:
<<: *env
YET_ANOTHER: VARIABLE
참고
YAML merge는 매핑에만 적용되고 시퀀스에는 쓸 수 없어요.
위 예제에서 환경 변수는
FOO: BAR매핑 문법으로 선언해야 해요.- FOO=BAR시퀀스 문법은 프래그먼트가 관여하지 않을 때만 유효해요.
더 알아보기 (Learn more)
- 앵커와 extension의 결합은
extension문서를 참고해요.