Docker多阶段构建实战(multi-stage builds)

为了解决上述问题,从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微服务镜像;

环境信息

本次实战的环境信息如下:

  1. 操作系统:Ubuntu 18.04.2 LTS

  2. Docker:18.06.1-ce

  3. Java:1.8.0_191

  4. Maven:3.6.1

实战源码

本次实战用到的源码是个普通springboot工程,功能是SpringCloud中的注册中心eureka,您可以在Github下载,地址和链接如下所示:

| 名称 | 链接 | 备注 |

| :-- | :-- | :-- |

| 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |

| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |

| git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |

这个git项目中有多个文件夹,本章源码在springcloudscaledemo这个文件夹下,如下图红框所示:

在这里插入图片描述

springcloudscaledemo文件夹内有三个工程,本次实战用到的是eureka-server,如下图:

在这里插入图片描述

准备材料

在能正常运行docker的电脑上新建一个目录,例如我这里是ubuntu系统上/home/willzhao/temp/201906/02,将maven工程eureka-server复制到这个目录下;

避免每次构建镜像都下载工程所需的jar包

构建镜像过程中会用maven构建springboot工程,会下载springboot工程依赖的jar包,此过程很漫长,如果您多次构建Dockerfile镜像,那么每次都要经历这个过程,为了避免每次都下载,请做如下操作:

  1. 找一个可以运行maven的环境,把eureka-server工程复制到这个环境上;

  2. 在eureka-server目录下执行命令mvn clean package -U -DskipTests,开始构建此工程;

  3. 构建成功后,进入本地的maven缓存目录,通常是用户的home目录下的.m2文件夹

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值