2017-08-12 61 views
1

我正在設置一個自動構建,我想從中生成2個圖像。提供來自同一個碼頭文件的兩個碼頭圖像

用例是在構建和分發庫: - 與將在特拉維斯 重新用於構建和測試的依賴一個形象 - 一個形象提供內置軟件庫

基本上,我需要能夠在某個時間點(建築物之前)和稍後(建築物和安裝之後)推動容器的圖像。

這可能嗎?我在Dockerfile文檔中找不到任何相關內容。

+0

可惜這不是沒有可能的解決方法。您可能對[向Dockerfiles添加TAG命令](https://github.com/moby/moby/issues/5603)的討論感興趣,最終決定不實現該功能。 – user3151902

+0

感謝您的參考。 Tarun提出的解決方案在我的方案中起到了訣竅的作用。 –

回答

1

您可以使用Docker Multi Stage構建做到這一點。有兩個碼頭工人的文件

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 . 

因此,爲了解釋,我們所做的是首先用依賴關係構建圖像。然後在我們的第二個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

相關問題