Skip to content
戻る

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

Published:  at  12:30

概要

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

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

極論、ここ読めです。

目次

参考サイト様

成果物

https://github.com/Lycheejam/php-crud-sample 🔗

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をした際に勝手にこのファイルを探して読み込んでくれるみたいです。

USERNAME=sampleuser
USERPASS=password
DATABASE=SAMPLEDB
ROOTPASS=password

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

docker-compose.ymlの編集

先程の.envファイルを使用するために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
    # 省略
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使ったことないから知らんけど。



前の記事
Vue CLIでwebpack Dev Server Invalid Optionsエラーが発生する
次の記事
PHP 7 + MySQLでPDOを使用するとcould not found driverエラーが発生する