我正在设置一个自动生成的图像,我想从中生成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/