我正在设置一个自动构建,我想从中生成2个图像。
用例是在构建和分发库: - 一个带有依赖关系的图像,这些图像将被重用于Travis的构建和测试 - 一个图像来提供构建的软件库
基本上,我需要能够在某一点(建筑物之前)和之后(建造和安装之后)推动容器的图像。
这可能吗?我没有在Dockerfile文档中找到任何相关内容。
答案 0 :(得分:1)
您可以使用Docker Multi Stage版本来实现。有两个Docker文件
<强> Dockerfile 强>
FROM alpine
RUN apk update && apk add gcc
RUN echo "This is a test" > /tmp/builtfile
<强> Dockerfile-刺强>
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。并将构建的文件复制到生产映像。
我构建的截断输出
vagrant@vagrant:~/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