Docker Compose で使用する環境変数にデフォルト値を設定する

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} と、コロン(:)とハイフン(-)を付けた値を追加しました。これにより、「.envHOGE=PIYO のように HOGE に値がセットされていれば PIYO を、そうでなければデフォルト値として :- の後の文字列 (この場合は FUGA) をセット」となります。

例えば上述の - MYSQL_DATABASE=${MYSQL_DBNAME:-test} の部分では、 MariaDB のコンテナイメージに対して MYSQL_DATABASE キーへ .envMYSQL_DBNAME に値がセットされていればその値を、そうでなければ test をセット、となります。

なお - がない場合は empty も許容されるので、空文字列が環境変数にセットされるようです。今回はどれも空文字列では都合が宜しくないので全てハイフンありで統一。

参考

デフォルト値

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。