docker-composeで機密情報を環境変数から分離する方法

compose.ymlに機密を直書きするとリポジトリ漏洩に直結する。envファイル分離、Docker secrets、外部シークレットストアの3段階の管理方法を比較する。

.envファイルによる分離

最低限の対策として機密を.envに逃がし、.gitignoreに追加する。variable展開でcompose.ymlから参照でき、導入コストが最も低い。

Docker secretsの利用

secretsとして定義するとコンテナ内に/run/secrets/以下のファイルとしてマウントされる。環境変数と違いpsやinspectで漏れない利点がある。

外部ストアとの連携

本番相当ではクラウドのシークレット管理サービスから起動時に取得する方式が堅い。エントリポイントで取得して環境へ注入するラッパーが定番。