- 有些工具在构建过程中会用到,但是最终的镜像是不需要的(例如用maven编译构建java工程),这要求Dockerfile的编写者花更多精力来清理这些工具,清理的过程又可能导致新的layer;
为了解决上述问题,从17.05版本开始Docker在构建镜像时增加了新特性:多阶段构建(multi-stage builds),将构建过程分为多个阶段,每个阶段都可以指定一个基础镜像,这样在一个Dockerfile就能将多个镜像的特性同时用到,例如:先用maven镜像构建java工程,再把构建结果和jre合成,就做成了一个可以直接运行java工程镜像了;
官方描述如下图所示,地址是:https://docs.docker.com/develop/develop-images/multistage-build/
官方的实例是golang的,今天我们以maven构建springboot工程为例,实战如何使用multi-stage特性构建java微服务镜像;
[](
)环境信息
本次实战的环境信息如下:
-
操作系统:Ubuntu 18.04.2 LTS
-
Docker:18.06.1-ce
-
Java:1.8.0_191
-
Maven:3.6