温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

发布时间:2021-10-12 14:06:46 来源:亿速云 阅读:142 作者:柒染 栏目:云计算

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

SpringBoot应用源码

本次实战用的是普通的SpringBoot工程,如果您不想写代码,源码可在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项目中有多个文件夹,本章的应用在<font color="blue">dockerlayerdemo</font>文件夹下,如下图红框所示:

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

版本信息

  1. SpringBoot:2.3.0.RELEASE

  2. JDK:1.8.0_121

  3. Maven:3.3.9

  4. Docker:19.03.8

  5. 操作系统:MacBook pro 13寸,macOS Catalina 10.15.4

构建镜像实战

  1. 修改pom.xml,给<font color="blue">spring-boot-maven-plugin</font>插件的配置增加子节点,<font color="blue">enabled</font>的值为<font color="red">true</font>,如下图红框所示:

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

  1. 在pom.xml文件所在目录新增<font color="blue">Dockerfile</font>文件,内容如下:

# 指定基础镜像,这是分阶段构建的前期阶段
FROM openjdk:8u212-jdk-stretch as builder
# 执行工作目录
WORKDIR application
# 配置参数
ARG JAR_FILE=target/*.jar
# 将编译构建得到的jar文件复制到镜像空间中
COPY ${JAR_FILE} application.jar
# 通过工具spring-boot-jarmode-layertools从application.jar中提取拆分后的构建结果
RUN java -Djarmode=layertools -jar application.jar extract

# 正式构建镜像
FROM openjdk:8u212-jdk-stretch
WORKDIR application
# 前一阶段从jar中提取除了多个文件,这里分别执行COPY命令复制到镜像空间中,每次COPY都是一个layer
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
  1. 执行以下命令编译构建工程:

mvn clean package -U -DskipTests
  1. 编译构建完成后确保target目录有<font color="red">jar</font>文件生成;

  2. 在Dockerfile所在目录执行以下命令构建镜像(请按照您的实际情况调整镜像名):

docker build -t dockerlayerdemo:0.0.1 .
  1. 镜像构建成功的提示如下:

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

验证

  1. 执行以下命令创建并启动容器:

docker run --rm -p 8080:8080 dockerlayerdemo:0.0.1
  1. 启动成功的控制台信息:

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的 3. 浏览器访问:http://localhost:8080/hello ,如下图,一切正常:

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的 4. 看看镜像的分层信息,执行命令:

docker history dockerlayerdemo:0.0.1
  1. 如下图,整个jar的内容,例如class、依赖库、依赖资源等,分多次COPY到镜像空间中,所以今后如果只改了class,在更新镜像的时候,只需要下载class的layer即可(其他layer可以直接用之前缓存到本地的):

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

至此,SpringBoot-2.3.0.RELEASE官方推荐的镜像构建方式就实践完成了,但是也留下了一些疑问:

  1. 2.3版本推荐的镜像构建方案,和旧版本比有什么不同?

  2. pom.xml中spring-boot-maven-plugin插件新增的参数,到底做了什么?

  3. Dockerfile中,<font color="blue">java -Djarmode=layertools -jar application.jar extract</font>这个操作啥意思?

看完上述内容,你们掌握SpringBoot(2.3)应用制作Docker镜像的方法是怎样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI