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

用例是在构建和分发库中:
-一张具有依赖关系的图像,将在Travis上对其进行构建和测试以重用
-提供内置软件库的一张图片

基本上,我需要能够在某个点(构建之前)和稍后(构建和安装之后)推送容器的图像。

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

最佳答案

您可以使用Docker Multi Stage构建来实现。有两个Docker文件

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。并将生成的文件复制到生产镜像。

我的构建截断了输出
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

关于docker - 提供来自同一dockerfile的两个docker镜像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45654266/

10-16 18:34