fig.yml でも Yaml anchors/references ですっきり書ける


経緯

例えば

  • PHP 5.4、5.5、5.6 のコンテナをこうばばっと Fig で起動したい
  • アプリケーションコードは各コンテナが同じディレクトリを volume でマウント

ということをしたい時、fig.yml をこうするでしょうか。

php54:
  image: example/php54
  ports:
    - "80"
  volumes:
    - /opt/app:/opt/app

php55:
  image: example/php55
  ports:
    - "80"
  volumes:
    - /opt/app:/opt/app

php56:
  image: example/php56
  ports:
    - "80"
  volumes:
    - /opt/app:/opt/app

かなりタルい。image だけ違ってあとは共通、となるとこうなってしまいがちです。

共通項目であるところの portsvolumes
Dockerfile に VOLUME とか EXPOSE とか書けば良い、というのは
確かにその通りなんですが、せっかく fig で呼び出すのだから
fig.yml にある程度まとめておきたい。

そんな時

Yaml の Anchor(&) と Reference(*) を思い出しました。

php54: &php
  image: example/php54
  ports:
    - "80"
  volumes:
    - /opt/app:/opt/app

php55:
  <<: *php
  image: example/php55

php56:
  <<: *php
  image: example/php56

すっきりした

参考

「各サービスで使えるグローバルなパラメータ設定したいわ」
「お前それ Yaml の anchor でがんばれよ」

というやりとりが多かった。