Composeにおける環境変数と構成
メニューを表示するにはスワイプしてください
docker-compose.ymlでの環境変数の利用
環境変数を使用することで、柔軟かつ再利用可能なDocker Compose構成を作成可能。変数を定義することで、ポート番号、イメージタグ、認証情報などの値をdocker-compose.ymlファイル内に直接記述することを避けられる。これらの変数を参照し、Docker Composeは実行時にその値を置き換える。この方法は、開発・テスト・本番など異なる環境へ同じアプリケーションをデプロイする際に特に有用。
Composeファイルで環境変数を定義・利用する手順:
.envファイルに環境変数をdocker-compose.ymlと同じディレクトリに保存する;- Composeファイル内で
${VARIABLE_NAME}構文で変数を参照する; - シェルやCI/CDパイプラインで直接変数を渡して上書きすることも可能。
例えば、データベースのパスワードやアプリケーションのポートを環境変数で設定する場合、以下のような.envファイルを作成:
DB_PASSWORD=supersecret
APP_PORT=8080
docker-compose.yml内でこれらの変数を次のように参照:
version: "3.8"
services:
web:
image: myapp:latest
ports:
- "${APP_PORT}:80"
environment:
- DB_PASSWORD=${DB_PASSWORD}
docker-compose upを実行すると、Docker Composeは.envファイルから値を設定に反映する。この方法により、機密情報や環境固有のデータをComposeファイルから分離し、構成の移植性を高めることができる。
Composeファイルでのシークレットおよび機密データの管理
環境変数は便利だが、パスワードやAPIキー、証明書などの機密情報を扱う際には必ずしも最も安全な方法ではない。環境変数は、ログやプロセスリスト、バージョン管理を通じて意図せず露出する可能性があるため、注意が必要。Docker Composeでシークレットを管理するためのセキュリティ向上策として、以下の方法がある:
- 機密値を別の
.envファイルに保存し、このファイルを.gitignoreでバージョン管理から除外する; - Docker Swarmでデプロイする場合は、Docker secretsを利用し、シークレットをコンテナ内のファイルとして安全にマウントする;
- ホスト上のファイルとしてシークレットを管理し、Composeファイルの
volumesキーでコンテナにマウントする。
例: データベースパスワードを露出させないため、db_password.txtというファイルに保存し、コンテナにマウント:
services:
db:
image: postgres:latest
volumes:
- ./db_password.txt:/run/secrets/db_password
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db_password
この方法により、実際のシークレットはComposeファイルや環境変数から分離され、意図しない露出リスクを低減できる。常に構成やワークフローを見直し、シークレットが保護されていることを確認し、機密データをバージョン管理にコミットしないこと。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください