docker-composeで開発環境を構築していて、
.env に各コンテナ名の情報を定義しておき
docker-compose.yaml の env_fileに読み込ませ
各コンテナ間の疎通に環境変数に定義したコンテナ名を利用したりしていた。
.env
#docker-composeプロジェクト名定義
COMPOSE_PROJECT_NAME=projecta
#php(web)コンテナ名
WEBCONTAINER=projecta_web_1
#mysqlコンテナ名
DBCONTAINER=projecta_mysql_1
docker-compose.yaml
env_file:
.env
こうしておくと、phpのスクリプト内で環境変数を使ってDBコンテナを指定できる
php
// DB接続先定義
define('DB_HOST', getenv("DBCONTAINER"));
phpのセッション保存用にmemcachedのコンテナも立ち上げていて
こちらはcompose内で定義しているサービス名をphp.iniにベタ書きしていたけど、
php.ini内でも環境変数が使える様子
■変更前
docker-compose.yaml
//memcached のサービス定義
memcached:
php.ini
[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
session.save_handler = memcached
session.save_path = memcached:11211
↓↓↓
■変更後
.env
#memcachedコンテナ名
MEMCACHEDCONTAINER=projecta_memcached_1
${変数名}で参照ができる
php.ini
[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
session.save_handler = memcached
session.save_path = ${MEMCACHEDCONTAINER}:11211
https://www.php.net/manual/ja/configuration.file.php
php.iniで環境変数を使うことは今までなかったけど、
dockerでコンテナ間通信で利用するコンテナ名はできるだけ外から
注入する形で統一したかったので勉強になった。