从同一个dockerfile提供两个docker镜像

时间:2017-08-12 19:44:09

标签: docker dockerfile

我正在设置一个自动构建,我想从中生成2个图像。

用例是在构建和分发库:   - 一个带有依赖关系的图像,这些图像将被重用于Travis的构建和测试   - 一个图像来提供构建的软件库

基本上,我需要能够在某一点(建筑物之前)和之后(建造和安装之后)推动容器的图像。

这可能吗?我没有在Dockerfile文档中找到任何相关内容。

1 个答案:

答案 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