stage之间交互的是文件,故COPY 命令需要扩展,通过--from=<name> 来指定需要从上方的哪个"stage" 拷贝文件, 其完整命令格式如下:
COPY --from=<name|index> <src>... <dest> # 注意--from 是可选的,当上层的stage没有名字时可以按照index(从0开始)的顺序引用,eg. --from=0值得一提的是,默认情况下使用docker build 命令构建一个包含多个stage的dockerfile时,最终的产物是最下方的一个stage 所产生的镜像。
当然,如果出于调试原因或其他需求,docker也是支持构建到指定的stage的,使用 --target builder 就可以只构建builder镜像。
docker build -t zhouzhipeng/builder --target builder . 最后一步到目前为止,我们已经有了一个能够一键构建的Dockerfile 文件,接下来就只差让它能够自动构建了!
你可以用你熟悉的jenkins 结合github的webhook来实现提交一次代码,就执行一次docker build命令。
当然,我推荐个人体验的话就用官方的docker hub 吧,因为这样你构建的镜像还可以与他人共享。
具体的用Docker hub 的 automated build 功能就不详细说明了, 下面用一张gif图快速演示下,感兴趣的朋友可以自行去探索下。
总结Multi-Stage Build 这一特性非常适合做构建管道流,对于那些依赖环境复杂、流程也复杂的应用来说最合适不过了。
可以clone下上面的源码试下哦: https://github.com/zhouzhipeng/docker-multi-stage-demo
by zhouzhipeng from https://blog.zhouzhipeng.com/dockerfile-auto-ci-tool.html本文可全文转载,但需要保留原作者和出处。 参考文献 https://docs.docker.com/v17.09/engine/userguide/eng-image/multistage-build/
https://blog.alexellis.io/mutli-stage-docker-builds/