あとらすの備忘録

チラ裏のメモ帳 | C#とかVue.jsとかAWSとか興味のあることちまちまやってます。

docker-compose.ymlで.envファイルに定義した環境変数を使う

概要

Docker Composeのdocker-compose.yml内に設定値を直接書き込むのではなく別ファイルで環境変数を定義し、その定義した値を使用してコンテナを作成します。

先日、Docker Composeを使用したPHPの環境構築の流れでMySQLを使用したDBサーバ(コンテナ?)を作成しました。
MySQLの初期スキーマ・ユーザ/パスワード・rootパスワードをdocker-compose.ymlに直書きがなんかな〜と思った次第です。

極論、ここ読めです。

目次

参考サイト様

成果物

github.com

docker-compose.yml環境変数を使う

docker-compose.yml内で環境変数の値を使用する方法は複数用意されています。 今回は、.envファイルを作成し環境変数を定義(設定?)します。
その値をdocker-compose.ymlファイル内で使用する流れです。

今回はDocker ComposeでMySQLのコンテナを作成する際にenvironmentセクションで環境変数を使用する想定で進めます。

注意事項

今回、使用する環境変数.envファイルで設定方法はdocker-compose upコマンドでのみ機能します。
下記の公式ドキュメントに記載がありました。引用します。

The .env file feature only works when you use the docker-compose up command and does not work with docker stack deploy.
Compose file version 3 reference #Variable substitution | Docker Documentation

Google翻訳より

.envファイル機能は、docker-compose upコマンドを使用した場合にのみ機能し、docker stack deployでは機能しません。

個人の練習環境で使っているので実用に耐えうるかはわかりません。

docker-compose.yml環境変数を使用するための構文

ファイルまたはexportされている環境変数dokcer-compose.ymlで展開するための構文です。
公式ドキュメントは以下の2つが該当します。

${}で定義した環境変数を記述することで値が使用可能になります。

${hoge}

.envファイルの作成

プロジェクトルートに.envファイルを作成します。
docker-compose upをした際に勝手にこのファイルを探して読み込んでくれるみたいです。

  • .env
USERNAME=sampleuser
USERPASS=password
DATABASE=SAMPLEDB
ROOTPASS=password

それぞれ、docker-compose.ymlMySQLコンテナを定義する際に使用する環境変数です。

docker-compose.ymlの編集

先程の.envファイルを使用するためにdocker-compose.ymlを編集します。

  • 編集前:docker-compose.yml
version: "3.7"
services:
  # 省略
  db:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: SAMPLEDB
      MYSQL_USER: sampleuser
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
    # 省略
  • 編集後:docker-compose.yml
version: "3.7"
services:
  # 省略
  db:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: ${DATABASE}
      MYSQL_USER: ${USERNAME}
      MYSQL_PASSWORD: ${USERPASS}
      MYSQL_ROOT_PASSWORD: ${ROOTPASS}
    # 省略

ただ、単純に環境変数を使用するための構文を使って.envファイルで定義した変数名を記述しています。

docker-compose.ymlで使用した環境変数の値を確認する

環境変数の値が展開された後のdocker-compose.ymlを確認します。
docker-composeコマンドのconfigオプションを使うことで変数の値が展開されたあとのdocker-compose.ymlを確認可能です。

$ docker-compose config
services:
  db:
    environment:
      MYSQL_DATABASE: SAMPLEDB
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: sampleuser
    image: mysql:5.7
    # 省略

以上で完了です。
他にもいろいろやる方法があるので試したらブログにします。

雑感

多分、本番/ステージングで切り替えたりする感じで使うんですよね。
実務でDocker使ったことないから知らんけど。