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提出的解决方案在我的方案中起到了诀窍的作用。 –