2017-08-12 10 views
1

私は2つの画像を作成したい自動ビルドを設定しています。私は、一つの画像は同じドッカーファイルから2つのドッカー画像を提供する

基本的に構築されたソフトウェアのlibsを提供する - - トラヴィス に建物やテストのために再利用される依存関係を持つ一つの画像:

ユースケースは、建物内にあり、ライブラリを配布しますコンテナの画像を特定のポイント(ビルド前)および1ポイント後(ビルドおよびインストール後)にプッシュできる必要があります。

これは可能ですか? Dockerfileのドキュメントに関連するものは見つかりませんでした。

+0

を参照してください。 [DockerfilesへのTAGコマンドの追加](https://github.com/moby/moby/issues/5603)に関するディスカッションに興味があるかもしれませんが、最終的にはその機能を実装しないことに決めました。 – user3151902

+0

参考に感謝します。私のシナリオでは、Tarunの提案された解決策がそのトリックを行います。 –

答えて

1

これは、Docker Multi Stageビルドを使用して行うことができます。持っている2つのドッカーファイル

Dockerfile

FROM alpine 
RUN apk update && apk add gcc 
RUN echo "This is a test" > /tmp/builtfile 

Dockerfile-PROD

FROM myapp:testing as source 

FROM alpine 
COPY --from=source /tmp/builtfile /tmp/builtfile 
RUN cat /tmp/builtfile 

build.sh

docker build -t myapp:testing . 
docker build -t myapp:production -f Dockerfile-prod . 

説明すると、最初に依存関係を持つイメージを構築することです。その後、私たちの2番目のDockerfile-prodには、以前ビルドされたイメージのFROMだけが含まれています。そして、ビルドされたファイルを本番イメージにコピーします。詳細については

私のビルドから切り捨てられた出力

[email protected]:~/so$ ./build.sh 
Step 1/3 : FROM alpine 
Step 2/3 : RUN apk update && apk add gcc 
Step 3/3 : RUN echo "This is a test" > /tmp/builtfile 
Successfully tagged myapp:testing 

Step 1/4 : FROM myapp:testing as source 
Step 2/4 : FROM alpine 
Step 3/4 : COPY --from=source /tmp/builtfile /tmp/builtfile 
Step 4/4 : RUN cat /tmp/builtfile 
This is a test 
Successfully tagged myapp:production 

残念ながら、それは回避策なしではできませんhttps://docs.docker.com/engine/userguide/eng-image/multistage-build/#name-your-build-stages

関連する問題