YAML の マージ してより見やすく実装をしてみよう!
この記事ではdocker-composeで利用する YAML 形式のファイルについて、 マージ (アンカーとエイリアス)の方法をご紹介します。
docker-composeの実装ファイル
Dockerコンテナを作成・管理する際非常に重宝するのがdocker-composeです。
定番中の定番ツールですよね。
このdocker-compose必ず使用するのファイルがdocker-compose.ymlです。
※ファイル名はこの別名を指定することもできますが特に指定しない場合、docker-comoseはdocker-compose.ymlを読み込むようになっています。
このファイルはYAMLというフォーマットで記述していきます。なんだか聞きなれないフォーマットですよね。
巷ではHTMLやXMLが有名で、JSON形式のデータも認知度が高まってきているかと思います。YAMLはこれらの仲間です。
一例を挙げましょう
下記がdocker-compose.ymlの一例となります。
私が使用を検討していたWordPressコンテナの定義です。
version: '3'
#ワードプレス
services:
db:
image: mysql:5.7
#container_name: "mysql57"
volumes:
- ./db/mysql:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: fuga
MYSQL_DATABASE: wordpress_db
MYSQL_USER: user
MYSQL_PASSWORD: hoge
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
wordpress:
image: wordpress:latest
#container_name: "wordpress"
volumes:
- ./wordpress/html:/var/www/html
- ./php/php.ini:/usr/local/etc/php/conf.d/php.ini
restart: always
depends_on:
- db
ports:
- 80:80
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress_db
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: hoge
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
全体の説明は割愛します。
今日はここに注目してください。
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
同じ記述がこのファイルでは2回登場しています。
プログラムの世界では「同じコードは2度書くな!」という格言があります。
(嘘です)
しかし同じコードを見ればまとめたくなるのがプログラマーの特徴ですよね(笑
YAMLではこのようなコードは「アンカーとエイリアス」を使用してまとめることができます。
プログラムでいう変数みたいなものですね。実際にどのように記載するのか見てみましょう。
version: '3'
#ワードプレス
services:
db:
image: mysql:5.7
#container_name: "mysql57"
volumes:
- ./db/mysql:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: fuga
MYSQL_DATABASE: wordpress_db
MYSQL_USER: user
MYSQL_PASSWORD: hoge
logging: &logging_hoge # ★注目
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
wordpress:
image: wordpress:latest
#container_name: "wordpress"
volumes:
- ./wordpress/html:/var/www/html
- ./php/php.ini:/usr/local/etc/php/conf.d/php.ini
restart: always
depends_on:
- db
ports:
- 80:80
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress_db
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: hoge
logging: *logging_hoge # ★注目
最初に登場したloggingの定義部分で&logging_hogeという名前を付けて
次に登場するloggingの部分ではその定義を*logging_hogeで呼び出しています。
こうすると同じ定義を2回記述しなくて済みますよね!
構文チェック
この記載が正しいのか、docker-composeにはconfigというオプションがあります。
このオプションを使用すると構文がチェックされて最終的に実行されるYAMLコードを出力することができます。
docker-compose config
services:
db:
environment:
MYSQL_DATABASE: wordpress_db
MYSQL_PASSWORD: hoge
MYSQL_ROOT_PASSWORD: fuga
MYSQL_USER: user
image: mysql:5.7
logging:
driver: json-file
options:
max-file: '3'
max-size: 100m
restart: always
volumes:
- /Docker/files/hoge/db/mysql:/var/lib/mysql:rw
wordpress:
depends_on:
db:
condition: service_started
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress_db
WORDPRESS_DB_PASSWORD: hoge
WORDPRESS_DB_USER: user
image: wordpress:latest
logging:
driver: json-file
options:
max-file: '3'
max-size: 100m
ports:
- published: 80
target: 80
restart: always
volumes:
- /Docker/files/hoge/wordpress/html:/var/www/html:rw
- /Docker/files/hoge/php/php.ini:/usr/local/etc/php/conf.d/php.ini:rw
version: '3'
loggingの部分に注目してください。
正しく割り当てられているのがわかりますよね。
YAMLはほかにも便利な書き方がたくさんあります。
これらを駆使してきれいなコードを目指したいものですよね。
ディスカッション
コメント一覧
まだ、コメントがありません