1
我正在設置一個自動構建,我想從中生成2個圖像。提供來自同一個碼頭文件的兩個碼頭圖像
用例是在構建和分發庫: - 與將在特拉維斯 重新用於構建和測試的依賴一個形象 - 一個形象提供內置軟件庫
基本上,我需要能夠在某個時間點(建築物之前)和稍後(建築物和安裝之後)推動容器的圖像。
這可能嗎?我在Dockerfile文檔中找不到任何相關內容。
我正在設置一個自動構建,我想從中生成2個圖像。提供來自同一個碼頭文件的兩個碼頭圖像
用例是在構建和分發庫: - 與將在特拉維斯 重新用於構建和測試的依賴一個形象 - 一個形象提供內置軟件庫
基本上,我需要能夠在某個時間點(建築物之前)和稍後(建築物和安裝之後)推動容器的圖像。
這可能嗎?我在Dockerfile文檔中找不到任何相關內容。
您可以使用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
可惜這不是沒有可能的解決方法。您可能對[向Dockerfiles添加TAG命令](https://github.com/moby/moby/issues/5603)的討論感興趣,最終決定不實現該功能。 – user3151902
感謝您的參考。 Tarun提出的解決方案在我的方案中起到了訣竅的作用。 –