2017-08-12 130 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

相关问题