Docker で秘匿情報を環境変数を通じて渡す方法

結論

docker build を実行する際の書き方」と「Dockerfile の書き方」の 2つ の書き方を双方とも適用する必要がある。

docker build を実行する際の書き方

RAILS_MASTER_KEY という環境変数に渡したいデータが格納済みとする。

$ docker build --secret id=rails_master_key,env=RAILS_MASTER_KEY --tag my_app .

Dockerfile の書き方

(これより前は省略)
RUN --mount=type=secret,id=rails_master_key RAILS_MASTER_KEY=$(cat /run/secrets/rails_master_key)
(これより後は省略)

ポイント

  • Docker イメージ内の /run/secrets 配下に値がファイルとして渡る
    • ファイル名は --secret で指定した id= の値である
  • Dockerfile で指定する --mount=type=secret という文字列に含まれる記号は両方とも =(イコール)です
    • あまりこういう書き方は見ない*1ので念のため

補足

  • docker build 時の --secret の値として、env ではなく src を指定するとファイルまるごと渡せる
  • Dockerfile 内の --mount=type=secret のオプション指定にて、`RUN --mount=type=secret,id=my_env1,target=/path/to などと指定すると渡り先のパスを明示的に指定できる

公式ドキュメント

もろもろ公式ドキュメントを一読するとよいと思います*2

docs.docker.com

*1:イコールは一つだけのことが多い

*2:将来的にこの記事の内容が正しくなくなっている可能性もあるので

Powered by はてなブログ