メモ > サーバ > 各論: Docker > 値のやりとり
値のやりとり
■environment
docker-compose.yml にて以下のように指定すると、
environment:
TZ: Asia/Tokyo
phpinfo() では以下が表示されている
Environment
TZ: Asia/Tokyo
PHP Variables
$_ENV['TZ']: Asia/Tokyo
date
Default timezone: Asia/Tokyo
date.timezone: Asia/Tokyo
この値は自由に定義することができ、その内容は環境変数として取得できる
具体的には docker-compose.yml にて以下のように指定すると、
environment:
TZ: Asia/Tokyo
TEST_VALUE1: TEST
TEST_VALUE2: TEST MESSAGE
TEST_VALUE3: "This is a test message!"
phpinfo() では以下が表示された
Environment
TZ: Asia/Tokyo
TEST_VALUE1: TEST
TEST_VALUE2: TEST MESSAGE
TEST_VALUE3: This is a test message!
PHP Variables
$_ENV['TZ']: Europe/Rome
$_ENV['TEST_VALUE1']: TEST
$_ENV['TEST_VALUE2']: TEST MESSAGE
$_ENV['TEST_VALUE3']: This is a test message!
また、PHPプログラム内で以下のようにすると、
<p>TEST_VALUE1: <?php echo $_ENV['TEST_VALUE1'] ?></p>
<p>TEST_VALUE2: <?php echo $_ENV['TEST_VALUE2'] ?></p>
<p>TEST_VALUE3: <?php echo $_ENV['TEST_VALUE3'] ?></p>
以下のように各値を取得できた
TEST_VALUE1: TEST
TEST_VALUE2: TEST MESSAGE
TEST_VALUE3: This is a test message!
日本語も扱えるが、その場合は docker-compose.yml の文字コードをUTF-8Nにしておく必要がある
■.env
docker-compose.yml にて以下のように指定すると、
environment:
TZ: Asia/Tokyo
TEST_VALUE1: TEST
TEST_VALUE2: テストメッセージ!
TEST_VALUE3: "This is a test message!"
TEST_VALUE4: ${SAMPLE_VALUE4}
TEST_VALUE5: ${SAMPLE_VALUE5}
TEST_VALUE4 と TEST_VALUE5 の内容は、docker-compose.yml と同階層に置いた .env で以下のように指定できる
SAMPLE_VALUE4=TEST
SAMPLE_VALUE5="メッセージ"
さらに docker-compose.yml にて以下のように指定すると
TEST_VALUE6: ${SAMPLE_VALUE6:-XXX}
TEST_VALUE7: ${SAMPLE_VALUE7-YYY}
.env で値が未設定またはカラの場合に「XXX」が、
.env で値が未設定の場合に「YYY」が、
それぞれのデフォルト値として使用される
つまり、.env はデフォルト値の定義場所として使用できる
案外知られてないdocker-composeの環境変数定義の記法 - Qiita
https://qiita.com/fagai/items/b944950b26af19453c02
■secrets
※ファイルを参照できなかった
改めて検証したい
environment や .env の方法で機密情報を渡すと、環境変数に値が現れるので意図しない値の流出が起こりえる
開発環境で使う分には問題無いが、本番環境では問題になる
機密情報は secrets の仕組みで渡す必要があるらしい
Docker Composeの環境変数ではなくsecretsで秘密情報を扱う - Qiita
https://qiita.com/myabu/items/89797cddfa7225ff2b5d
Docker/Docker ComposeのSecretsを試す - そんな今日この頃の技術ネタ
https://blue1st-tech.hateblo.jp/entry/2017/08/27/230546
以下は機密情報を環境変数で扱おうとしている?
Dockerコンテナのクレデンシャル設計パターン | DevelopersIO
https://dev.classmethod.jp/articles/creds-design-pattern-in-docker/
以下も参考になるか
docker secretsの部分的導入 | WordPress試用
https://elephantcat.work/2021/10/15/post-1020/
以下によると、暗号化して環境変数に展開するくらいしかなかった?
ECSの場合はマネージドな仕組みに任せることができそうだが、ECSを使わない場合は簡単では無い問題かもしれない
ECSでごっつ簡単に機密情報を環境変数に展開できるようになりました! | DevelopersIO
https://dev.classmethod.jp/articles/ecs-secrets/