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 문서를 참고해요.