2022-05-23に投稿

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

参考

デフォルト値

Originally published at labor.ewigleere.net
ツイッターでシェア
みんなに共有、忘れないようにメモ

arm-band

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

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント