docker がシークレットを実装する方法であるため、シークレットに対して swarm モードを実行する必要があります。シークレットの価値は、ワーカーがシークレットをディスクに書き込むことはなく、シークレットは知る必要があること (タスクがそこでスケジュールされるまで他のワーカーはシークレットを受信しない) であり、マネージャーがそのシークレットをディスク上で暗号化することです。マネージャーでのシークレットの保存には、raft データベースが使用されます。
コマンドを使用して、単一ノードの swarm クラスターを簡単にデプロイできますdocker swarm init
。そこから、docker-compose up
に変更されdocker stack deploy -c docker-compose.yml $stack_name
ます。
swarm モードのシークレットと構成は、構成のために単一のファイル ボリュームをコンテナーにマウントするための代替手段を提供します。したがって、単一のノードで swarm モードがなくても、いつでも次の定義を行うことができます。
version: '2'
services:
app:
image: myapp:latest
volumes:
- ./secrets:/run/secrets:ro
または、これらのシークレットを名前付きボリュームにロードすることで、アプリからシークレットをわずかに分離できます。そのためには、次のようなことができます。
tar -cC ./secrets . | docker run -i -v secrets:/secrets busybox tar -xC /secrets
次に、その名前付きボリュームをマウントします。
version: '2'
volumes:
secrets:
external: true
services:
app:
image: myapp:latest
volumes:
- secrets:/run/secrets:ro