docker-composeの変数と言われると、docker-compose自体に入れる変数と、その中のコンテナに対して入れる環境変数がありますね。
ここでは前者のほうに関してです。
知ってる人は知ってる書き方
コンテナの中に対して入れる環境変数の値を外の.envファイルから読み取って値を入れてくれる方法です。(${DB_DATABASE}
といった箇所です)
Laravelなどでは最初から.envが存在するのもあってその.envに合わせて名前を定義すると良いですね。
mysql:
image: mysql:5.7
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- db-data:/var/lib/mysql
ports:
- "3306:3306"
実はデフォルト値が設定できる
実はこの定義方法にはデフォルト値が設定できる記法があって、たまたま他のdocker-composeを見てたら見つけてええやん!ってなりました。
logstash:
image: blacktop/logstash:${ELASTIC_VERSION:-6.6.1}
ports:
- "5044:5044"
基本的な書き方はこの-をつける書き方です。
ドキュメントにも書いてあります。→https://docs.docker.com/compose/compose-file/#variable-substitution
記述例 | 説明 |
---|---|
${VARIABLE:-default} | VARIABLEが未設定またはempty値の場合にdefaultを設定する |
${VARIABLE-default} | VARIABLEが未設定の場合にdefaultを設定する |
また、エラーにする記法もあります。
記述例 | 説明 |
---|---|
${VARIABLE:?err} | VARIABLEが未設定またはempty値の場合にエラーメッセージを表示して終了する |
${VARIABLE?err} | VARIABLEが未設定の場合にエラーメッセージを表示して終了する |
エラーで終了する記法は後者のほうが使われそうですね。