Docker Secretsをdocker-composeとswarmで利用する

Docker secretsを利用すれば機密データなどを安全に必要なコンテナに送り込むことができる。

今回はgce-proxyを使って例を書きます。gce-proxyについて軽く説明します。

  • gce-proxyは起動引数に認証用のJSONを要求します。
  • その認証用のJSONをsecretに格納して読み込ませます。

swarmにsecretを登録して利用する

secretはswarm上ではクラスタ上に登録できます。(通常のdockerではできません。その代わり後述のdocker-compose.yamlでファイルから指定する方法で代用できます。)

docker -H manager-node secret create auth_json ./auth.json

少し逸れますが、swarmではdocker-compose.yamlを指定してデプロイできるようなんです。ローカルで立ち上げるdocker-compose.yamlとほとんど差異がないので両方で使い回しがききそうだ。

話を戻します。secretの指定はこのyamlで行います。secretsでsecret (auth_json) を指定しつつ、コンテナからも指定します。そうすると起動したときに /run/secrets/ にマウントされるので、アプリケーションから読み込みます。

version: '3.5'

services:

  db:
    image: gcr.io/cloudsql-docker/gce-proxy:1.16
    secrets:
      - auth_json
    ports:
      - 3306:3306
    command: /cloud_sql_proxy -instances=project_id:zone:name=tcp:0.0.0.0:3306 -credential_file=/run/secrets/auth_json

secrets:
  auth_json:
    external: true

docker-compose upでsecretを利用する

swarmでなければsecretは登録できませんが、docker-compose.yamlのsecretsからファイルを指定することができますので、これでdocker-compose upしたときに読み込めます。yamlの構造はsecretsの指定がexternalからfileになっているだけです。この切り替えで本番とローカルの差異をかなり減らして作業ができます。

version: '3.5'

services:

  db:
    image: gcr.io/cloudsql-docker/gce-proxy:1.16
    secrets:
      - auth_json
    ports:
      - 3306:3306
    command: /cloud_sql_proxy -instances=project_id:zone:name=tcp:0.0.0.0:3306 -credential_file=/run/secrets/auth_json

secrets:
  auth_json:
    file: ./auth.json

おわり

ここまで本番との差異がなくなってくると楽になってきますな。あとはDBだ。。定義の中に毎度gce-proxyを立ち上げるより別途立ち上げているところに接続する方が良さそうな気がする。ローカルと本番の定義は極力同じ状態を意識したい。

参考

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA