9

環境変数を使用して Docker の動作を制御するネイティブまたは一般的に受け入れられている方法、つまり 12factor の方法はまだありますか?

私が見た唯一の言語に依存しない方法は、docker run コマンドを -e 変数で汚染することです。私が見た中で最も保守しやすいソリューションは、cat と sed の組み合わせを使用して、.env ファイルを使用して CLI パラメーターを生成することです: https://twitter.com/DataKyle/status/422843345120296960

現在、開発には Vagrant を使用し、テストとデプロイには CI/CD ホステッド プロバイダーを使用し、AWS Elastic Beanstalk をステージングおよび本番 PAAS として使用しています。私たちのアプリには 100 を超える構成可能なパラメーターがあり、そのほとんどは既定値に設定されていますが、各環境ではそれらの約 10 ~ 20 をカスタマイズする必要があります。そのようなコマンドライン変数の膨大なリストを使って docker を実行するのは、ハックすぎるように思えます。

さらに、さらにハッキングせずに、docker ホストから変数 (CI プロバイダーのプレインストールされた Redis または Postgres 資格情報など) を取得することはできません。

私が見つけていないこれに対する解決策はありますか?それとも、これは Docker にとって欠落している部分ですか? それとも、これはどういうわけか哲学的に Docker の哲学に反しているのでしょうか?

4

1 に答える 1

4

Docker 0.10.0 以降 (2014 年 4 月 8 日) は を受け入れますdocker run --env-file <filename>。これにより、docker の実行環境に.env-like ファイルをフィードできます。

さらに、Docker がさらに対話できるようにすることもできます。--volumes-from参照されているコンテナーからすべてのボリュームをマウントし、参照--linkされているコンテナーの公開ポートの詳細をコンテナーに知らせることができます。

現時点では、Docker の実行リファレンスは少し脆弱ですが、CLI リファレンスの実行セクションコンテナ リンク リファレンスですべての詳細を見つけることができます。

コンテナから何を始めるかについて。通常、シェル スクリプトを開始することをお勧めします。シェル スクリプトは、デフォルトの環境変数を設定し (の行に沿って: ${ENV:=default_value})、それらをエクスポートしてから、exec単一の実行可能ファイルを作成します。この実行可能ファイルは、フォアグラウンドで目的のアプリケーションにすることも、またはのような init 置換にすることもできrunitますsupervisord

docker がシステムの一部でない場合は、docker 内で実行することはお勧めしませsshdん (たとえば、gitlab のコンテナーには sshd が含まれている必要があります。これは、ssh を介した git リポジトリ アクセスを提供するためです)。メンテナンスまたはデバッグの目的で、nsenter代わりに使用することをお勧めします。

于 2014-10-12T20:42:49.627 に答える