Docker Compose で使用する .env
の環境変数にデフォルト値を設定する方法についてメモ。
経緯
PHP Webアプリケーション用のコンテナからDB用のコンテナに接続する際、DB名やユーザ名・パスワードを任意の値に設定したい。
ただし .env
は Git 管理にはしたくないので標準では sample.env
等に逃がしており、うっかりファイルをコピー・リネームし忘れていたり、あるいはキー名をタイポして値が消えてしまったりすると困る……ということでデフォルト値を設定できないか、と考えました。
コード
docker-compose.yml
version: '3.7'
volumes:
logs:
driver: local
services:
php:
build:
context: ./_docker/dockerfiles/
dockerfile: Dockerfile
working_dir: /var/www
command: php -S 0.0.0.0:8080 -t public
ports:
- 8080:8080
db:
image: mariadb
restart: always
ports:
- ${MYSQL_PORT:-3306}:${MYSQL_PORT:-3306}
environment:
- MYSQL_ROOT_PASSWORD=pwd
- MYSQL_DATABASE=${MYSQL_DBNAME:-test}
- MYSQL_USER=${MYSQL_USER:-user}
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-pwd}
.env (サンプル)
MYSQL_DBNAME=foo_db
MYSQL_USER=foo_user
MYSQL_PASSWORD="Password-1234"
MYSQL_HOST=192.0.2.1
MYSQL_PORT=3306
早速ですが用意したコード。
まず基本的に .env
を用意すれば、 ${HOGE}
の形式で環境変数をセットできます。
今回はそこに ${HOGE:-FUGA}
と、コロン(:
)とハイフン(-
)を付けた値を追加しました。これにより、「.env
に HOGE=PIYO
のように HOGE
に値がセットされていれば PIYO
を、そうでなければデフォルト値として :-
の後の文字列 (この場合は FUGA
) をセット」となります。
例えば上述の - MYSQL_DATABASE=${MYSQL_DBNAME:-test}
の部分では、 MariaDB のコンテナイメージに対して MYSQL_DATABASE
キーへ .env
の MYSQL_DBNAME
に値がセットされていればその値を、そうでなければ test
をセット、となります。
なお -
がない場合は empty も許容されるので、空文字列が環境変数にセットされるようです。今回はどれも空文字列では都合が宜しくないので全てハイフンありで統一。