springcloudscaledemo文件夹内有三个工程,本次实战用到的是eureka-server,如下图:
准备材料
在能正常运行docker的电脑上新建一个目录,例如我这里是ubuntu系统上/home/willzhao/temp/201906/02,将maven工程eureka-server复制到这个目录下;
避免每次构建镜像都下载工程所需的jar包
构建镜像过程中会用maven构建springboot工程,会下载springboot工程依赖的jar包,此过程很漫长,如果您多次构建Dockerfile镜像,那么每次都要经历这个过程,为了避免每次都下载,请做如下操作:
-
找一个可以运行maven的环境,把eureka-server工程复制到这个环境上;
-
在eureka-server目录下执行命令mvn clean package -U -DskipTests,开始构建此工程;
-
构建成功后,进入本地的maven缓存目录,通常是用户的home目录下的.m2文件夹,里面有个名为repository的目录;
-
将整个repository目录复制到前面提到的/home/willzhao/temp/201906/02目录下,和eureka-server放在同一目录,如下图:
这样,在编写Dockerfile的时候只要用这个repository覆盖镜像中的maven缓存,在编译时就不会去maven的中央仓库下载jar了,会节省很多时间。
编写Dockerfile
在/home/willzhao/temp/201906/02目录下创建文件Dockerfile,内容如下所示:
Docker image for multi stage build
VERSION 0.0.1
Author: bolingcavalry
第一阶段,用maven镜像进行编译
FROM maven:3.6.1 AS compile_stage
####################定义环境变量 start####################
#定义工程名称,也是源文件的文件夹名称
ENV PROJECT_NAME eureka-server
#定义工作目录
ENV WORK_PATH /usr/src/$PROJECT_NAME
####################定义环境变量 start####################
#作者
MAINTAINER BolingCavalry zq2599@gmail.com
#将源码复制到当前目录
COPY ./$PROJECT_NAME $WORK_PATH
#如果前面您已经准备好了repository目录,就可以用来替换镜像中的repository