Dockerのdocker-compose.ymlを使ってMySQLのコンテナを作るときに、同ymlファイルにMySQLの環境変数について設定した「.env」ファイルから情報を読み込ませることができます。
それによって、docker-compose.ymlの自体にパスワードなどの情報を書く必要がなくなり、よりdocker-compose.ymlの使いまわし(共有?)がしやすくなります。今回はその方法を説明します。
やることは難しくありませんが、そのためにはdocker-compose.ymlの「env_file」オプションを使います。ではその使い方を見ていきましょう。
Contents
docker-compose.ymlの「env_file」オプションの使い方
env_fileとは?
Dockerのdocker-composeには、env_fileというオプションが用意されています。これは、環境変数などの情報を記述した環境設定ファイルを読み込むためのものです。
今回はそのオプションを使って、MySQLの環境変数ファイルの.envを読み込もうというわけです。
詳しくは下のリンクから公式サイトをご覧ください
Docker ドキュメント日本語化プロジェクト:env_file
使い方と使用例
まず次のようなdocker-compose.ymlがあるとします。このサービス名「db」項目中のコメントアウト部分「#☆」部分を見てください。
version: '3'
services:
django:
container_name: django_container
(略)
db:
image: mysql:8.2.0
container_name: mysql-container
#☆外部.envファイルで設定した環境変数を利用して環境を設定
env_file: ../mysql/.env
volumes:
- ../mysql/my.cnf:/mysql/conf.d/my.cnf
- db_data:/var/lib/mysql
volumes:
db_data:
(略)
この記述の中で、
#☆外部.envファイルで設定した環境変数を利用して環境を設定
env_file: ../mysql/.env
としている部分が今回のポイントとなる「env_file」オプションの部分です。
env_file: .envへのパス
という書き方です。
「.envへのパス」については、基本的にdocker-compose.ymlからの相対パスを書くのが基本になると思います。

今回の私のファイル構成は簡単に上画像のようになっているので、docker-compose.ymlから.envへの相対パスは、
../mysql/.env
となっています。
では次にこの.envファイルの中身ですが、それは次のようになっています。
MYSQL_DATABASE: test
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: root
TZ: 'Asia/Tokyo'
便宜上、パスワードやユーザー名はあくまでテキトーにつけただけのものです。
このようにしたうえで、実際にdocker-compose.ymlによってDockerコンテナのビルドを実行します。
実行結果確認と「docker-compose config」コマンド
では実際にきちんとパスワードなどがMySQLコンテナに設定されているか見てみましょう。そのためには、WindowsならコマンドプロンプトやPowerShell、Macならターミナル、Linux系ならシェルを起動させます。
そして使用しているdocker-compose.ymlが存在しているフォルダ(ディレクトリ)へ移動します。
それから次のコマンドを入力します。
docker-compose config
この実行結果ですが、今回の私の場合は、
docker-compose.ymlがあるディレクトリ> docker-compose config
name: docker
services:
db:
container_name: mysql-container
environment:
MYSQL_DATABASE: test
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: user
TZ: Asia/Tokyo
image: mysql:8.2.0
networks:
default: null
volumes:
- type: bind
このようになり、MYSQL_DATABASEなどの変数が表示され、.envファイルの記述が反映されているのがわかります。
なお、このenv_fileオプションは複数の環境設定ファイルを読み込むことが出来ます。その場合は、
env_file:
- ../ageage/common.env
- ./apps/web.env
- ../src/opt/secrets.env
などのように複数連ねて書くことが可能です。