私は Docker ベースの分散タスク システムを実行できるように取り組んでいますが、直面している大きな問題は、各 Docker VM に資格情報を取得する方法です。
基本的に、各インスタンスには一意の名前とパスワード/SSL 証明書のいずれかが必要です。その後、起動時にホームに接続し、タスクの処理を開始します。
インスタンスの作成はかなり簡単ですが、各インスタンスに資格情報を挿入するための良い方法は何でしょうか? 一般的なコンセンサスは「環境変数を使用する」ということのようですが、500 文字を超える環境変数 (SSL 証明書全体など) を使用するのは粗雑に思えます。
現在、私がパックしようとしているアプリケーションは、構成に単純な JSON ファイルを使用しています。実行時に Docker インスタンスにファイルを追加する方法、または同様の方法はありますか? おそらく、パラメーターで定義されたファイルを取得する最後のビルド ステップでしょうか?
答え1
Docker ボリュームを追加し、コンテナごとに、必要な SSL 証明書を含むホスト上のフォルダーを指定できます。「単一ファイル」ボリュームを作成することもできます。
docker run -d \
--name=worker0 \
-v "/etc/ssl/worker0.crt":/etc/ssl/private/container.crt \
-v "/etc/ssl/worker0.key":/etc/ssl/private/container.key \
myworkerimage
docker run -d \
--name=worker1 \
-v "/etc/ssl/worker1.crt":/etc/ssl/private/container.crt \
-v "/etc/ssl/worker1.key":/etc/ssl/private/container.key \
myworkerimage
次に、ワーカーの起動に使用している bash スクリプト、ansible などがホスト上で適切な証明書を選択できますが、起動された各コンテナー内の状況は同一です (証明書は常に同じパスにあります)。
これらの「ファイル ボリューム」は静的な構成であり、コンテナーが変更することが期待されるものでも、変更できるものでもないことを反映するために、読み取り専用ボリュームにすることをお勧めします:ro
。