Manage sensitive data with Docker secrets

docker

Tl;dr

  • Sensitive Dataはどう管理すればいいのか、良い方法を知りたい
    • Usernames and passwords
    • TLS certificates and keys
    • SSH keys
    • Other important data such as the name of a database or internal server
    • Generic strings or binary content (up to 500 kb in size)
  • Docker secretを使って極秘データを一元に管理できる、利用のコンテナだけに安全で渡せる
  • Docker secrets are only available to swarm services, not to standalone containers

Docker containerを立ち上げる時に秘密な情報などをコンテナにどう渡せばよいかについて調べましたのでメモです。
Docker Secretがあります。

  • Docker Secretを利用しないDocker compose:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    mongo:
    image: mongodb
    ports:
    - 27017:27017
    environment:
    - MONGO_INITDB_DATABASE=mydb
    - MONGO_INITDB_ROOT_USERNAME=rootuser
    - MONGO_INITDB_ROOT_PASSWORD=rootpassword
    volumes:
    - mongo-db:/data/db
  • Docker Secretを利用するDocker compose:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    services:
    mongo:
    image: mongodb
    ports:
    - 27017:27017
    environment:
    - MONGO_INITDB_DATABASE=mydb
    - MONGO_INITDB_ROOT_USERNAME_FILE=rootuser
    - MONGO_INITDB_ROOT_PASSWORD_FILE=/run/secrets/db_root_password
    volumes:
    - mongo-db:/data/db
    secrets:
    db_root_password:
    file: db_password.txt
    secretsで db_root_passwordの秘密データを定義されます。
    サービス開始するとき、Dockerは/run/secrets/<key-name>にマウントします。