2017-04-24 3 views
2

を構築し、私のドッキングウィンドウの内側に作曲インストールし実行する必要がありますドッカービルドが適切に機能するためのキー。私は私のPHPアプリケーションドッカーの画像の中に私のSSHのキーを梱包不快感を感じる。は、私は潜在的にこのようになりますドッカファイルを持つことができ

あるいは、ビルダーの外に(たとえばbuild.shのbashスクリプトで)コンポーザー・インストールを実行して、ベンダー/が移植された後にディレクトリーをCOPYすることができます。これは正しいアプローチですか?

この問題を解決する他の方法はありますか?

答えて

5

これは実際に2,3回直面した原理を説明する本当に良い質問です。問題:ベストドッカー

ドッカーに一時ファイルをどのように扱うか

1.)encaで素晴らしいです環境の全体的なレクリエーションを刺激しています。コンテナの外にあるプロセスの一部、つまりをdocker buildプロセスの外に実行すると、意識していないマシン/環境の依存関係が導入されている可能性があるので、移植性の低いビルドプロセスがあります。

Docker内のすべての環境を常に再構築すると、依存関係が常に満たされ、ドッカーファイルを他の人に与えることができるようになり、問題なくローカルで再構築できるという高い確信が得られます。

一時ファイルはDocker内でのビルドに最適です!だから私は可能な限りコンテナ内にそれらを構築しようとします。

2)第二の問題に私たちを上のリードドッカーから解除夫婦承認構築プロセス

、どのようにデカップルする方法をビルドからの認可を?

オプション1 - Bake In composer auth。json専用のビルドユーザーのための信用を持っています。

他の答えとして、資格情報をベイクしてから再度削除することができます。しかし、あなたはsshキーと同じように敏感なものを「焼く」ことは望まないでしょう。 Composerはauth.jsonファイルをサポートしていますので、専用のビルド・ユーザーを作成し、自分の代わりにcredsをauth.jsonファイルに保管してください。万一侵害された場合は、パスワードを変更することができます。コンポーザーのインストールが完了したら、ファイルを削除または上書きします。

COPY . ./ 
RUN composer install --no-dev --no-interaction -o 
RUN rm -f ./auth.json 

オプション2 - credsを自身が過渡作成し、ドッキングウィンドウexecを使用してドッカーコンテナにそれらを渡す:

私は完全にこのアプローチをテストしていませんが、私は、なぜ何かを見ることができませんこれはうまくいかないでしょう。あなたは)

2「を作曲インストール」(またはドッキングウィンドウハブからいずれかを使用する実行できる基本PHPコンテナを構築

1))、それは

を実行しているように、このベースコンテナをスピンアップ

3.)docker execを使用して、すでにコンテナに焼き込まれているラッパースクリプトに信用を渡します。ラッパースクリプトは、作曲はHTTP基本認証を使用して をインストールし実行します - それは、すでにユーザ名が焼いていますので、あなただけのhttp-basic technique

docker exec -d my_base_php_container php -f /my_wrapper_script.php ${PASSWORD} 

4.ごとにパスワードを提供する必要がありますに)あなたはこのコンテナとしてコミット新しいイメージ

docker commit --change "composer install" ${CONTAINER_ID} my_installed_image:1.0 
+0

内部ビルドの主な議論は、私が必要とするすべての依存関係がイメージ内にあることです。それでは、作成したアーティファクトをコピーするためのプライベートイメージを作成してください。そうすれば、私は一貫性のあるビルドプロセスをすべてのものに持たせることができます。また、credsやsshキーでベーキングしなくても、私の展開イメージには作者のような不要なレイヤーがありません。 – NiRR

+0

はい、イメージ内のすべての依存関係を使用すると、一貫性と移植性が得られます。私たちのドッカーコンテナにアーティファクトを作成させてみませんか?良い質問とこれは別の良いアプローチです!これは私がPOMファイルを渡すことができるMavenドッカーの画像で試したことですが、それはうまくいきます。1)authがドッカーの外にある場合はどうすれば他のものを入手できますか?あなたのイメージを構築する?そして2.)どのようにコンテナからアーティファクトを抽出しますか? (これを達成するためにボリュームマウントを使用することもできますが、env固有の依存関係が導入される可能性があります) – GreensterRox

2

ドッカービルドの外に作曲家のインストールを行うことは意味があると思います。

通常、あなたのアプリケーションコードをビルドする初期のビルドプロセスがあります。このビルドでは、いくつかのリンチングや自動テストを実行してから、アプリケーションを実行するために必要なすべてのコードを含む成果物を生成するかもしれません。これには、ソースコード、ベンダフォルダ、自動生成コード(ORMクラス、キャッシュなど)が含まれます。これらの成果物は、通常、tarファイルです。

その後、そのコード成果物を後続のドッカービルドのドッカーコンテナにコピーします。

+0

私はこのアプローチに傾いています。私は、MySQLのコンテナを実行する必要があるかもしれないと思っています。なぜ私はファイルをタールしますか?私の最終的なイメージはおそらくphp/apacheイメージです。 – NiRR

0

いつでもビルドを行うことができます。これはCOPY〜/ .sshを実行し、コンポーザインストールを実行し、次にrmキーを実行します...その後、sshを使用する必要がある場合は、後でdocker-compose by -v)実行時にボリューム/ -vを使用して.sshをローカルにマウントします:)

関連する問題