■ はじめに
https://dk521123.hatenablog.com/entry/2024/08/21/000445
の冒頭で言ったAirflow の docker-compose.yml の中の 「image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.10.0}」について 調べたら、Compose 内の環境変数を参照方法だと分かった。 これ以外にも色々勉強になったので、 Docker compose の 環境変数についてまとめておく。
Airflow の docker-compose.yml
https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml
image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.10.0}
目次
【0】公式ドキュメント 【1】環境変数の参照 1)$変数 / ${変数} 2)${変数:-default} / ${変数-default} 3)${変数:?err} / ${変数?err} 【2】環境変数の設定 0)優先順位 1).env ファイル 2)--env-file オプション 3)environment キー 4)設定オプションenv_file 5)docker-compose run実行時の環境変数の設定 【3】Tips 1)docker compose config コマンド 【4】補足:secrets 1)サンプル
【0】公式ドキュメント
* 以下のサイトを参照 (ほぼ同じ内容なので軽く一読しとくといいかも)
https://matsuand.github.io/docs.docker.jp.onthefly/compose/environment-variables/
https://docs.docker.jp/compose/environment-variables.html
https://docs.docker.jp/v19.03/compose/environment-variables.html
【1】環境変数の参照
* 以下の公式ドキュメントを参照
https://docs.docker.jp/compose/environment-variables.html#id11
1)$変数 / ${変数}
* $変数 と ${変数} をサポート => どっちも同じ意味
2)${変数:-default} / ${変数-default}
* デフォルト値を設定できる
${変数:-default}
* 変数 が設定されていない or 環境変数の値が空の場合、 defaule の値とする
${変数-default}
* 環境変数内で 変数 が設定されていない場合のみ、 default の値とする
3)${変数:?err} / ${変数?err}
* 以下の構文を使えば、特定の値を 必須(mandatory)にできる
${変数:?err}
* 変数 が設定されていない or 環境変数の値が空の場合、 err を含むエラーメッセージと共に終了する
${変数?err}
* 環境変数内で 変数 が設定されていない場合に、 err を含むエラーメッセージと共に終了する
【2】環境変数の設定
* 各環境ごとに切り替える場合は 「2)--env-file オプション」が便利そう
0)優先順位
https://docs.docker.jp/compose/environment-variables.html#docker-compose-run
より抜粋 ~~~~~ 複数のファイルで同じ環境変数がある場合、 Compose は使用する値を選ぶため、以下の優先度で使います。 1. Compose ファイル 2. シェル環境変数 3. 環境変数ファイル 4. Dockerfile 5. 変数が定義されていない ~~~~~
1).env ファイル
* .envという 環境ファイル
コマンド例
$ cat .env TAG=v1.5 $ docker compose config services: web: image: webapp:v1.5 # ★注目 networks: default: null networks: default: name: work_default
compose.yaml
services: web: image: "webapp:${TAG}"
2)--env-file オプション
* docker-compose --env-fileオプションで 環境ファイルを指定する
コマンド例
$ cat dev.env TAG=v1.6 $ docker-compose --env-file ./dev.env config services: web: image: webapp:v1.6 # ★注目 networks: default: null networks: default: name: work_default
3)environment キー
* compose.yaml 内の environment キーで定義 => 勝手な理解としては、container 内の環境変数のために使う?
https://docs.docker.jp/v19.03/compose/compose-file.html#environment
web: environment: - DEBUG=1 # ★注目
4)設定オプションenv_file
* compose.yaml 内の env_fileキーで定義
web: env_file: - web-variables.env
5)docker-compose run実行時の環境変数の設定
* docker-compose -eオプションで 環境変数と値を指定する
$ docker-compose run -e DEBUG=1
【3】Tips
1)docker compose config コマンド
* 自分で作成した時の確認時に便利
コマンド例
$ docker compose config
【4】補足:secrets
* ついでに、secretsについても触れておく
参考文献
https://qiita.com/myabu/items/89797cddfa7225ff2b5d
https://zenn.dev/xknzw/articles/0d1dc1abb1a3e2
https://www.konchanxxx.com/entry/2023/08/07/154325
1)サンプル
公式ドキュメントより
https://docs.docker.com/compose/use-secrets/
services: db: image: mysql:latest volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD_FILE: /run/secrets/db_password # ★ここで使用 secrets: - db_root_password - db_password # ★ここで設定 secrets: db_password: file: db_password.txt db_root_password: file: db_root_password.txt volumes: db_data:
関連記事
Docker compose ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2022/04/28/000000
Docker compose ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/05/21/222910
Docker compose ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
Docker compose ~ 拡張フィールド ~
https://dk521123.hatenablog.com/entry/2024/08/21/000445
Apache Airflow ~ 環境構築 / Docker 編 ~
https://dk521123.hatenablog.com/entry/2021/10/11/134840
YAML (YAML Ain't Markup Language)
https://dk521123.hatenablog.com/entry/2019/10/13/000000