• 体验SpringBoot(2.3)应用制作Docker镜像(官方方案)


    关于《SpringBoot-2.3容器化技术》系列

    《SpringBoot-2.3容器化技术》系列,旨在和大家一起学习实践2.3版本带来的最新容器化技术,让咱们的Java应用更加适应容器化环境,在云计算时代依旧紧跟主流,保持竞争力;

    全系列文章分为主题和辅助两部分,主题部分如下:

    1. 《体验SpringBoot(2.3)应用制作Docker镜像(官方方案)》
    2. 《详解SpringBoot(2.3)应用制作Docker镜像(官方方案)》
    3. 《掌握SpringBoot-2.3的容器探针:基础篇》
    4. 《掌握SpringBoot-2.3的容器探针:深入篇》
    5. 《掌握SpringBoot-2.3的容器探针:实战篇》

    辅助部分是一些参考资料和备忘总结,如下:

    1. 《SpringBoot-2.3镜像方案为什么要做多个layer》
    2. 《设置非root账号不用sudo直接执行docker命令》
    3. 《开发阶段,将SpringBoot应用快速部署到K8S》

    本篇简介

    1. 本篇的主题是动手实战,力求最快速度体验官方的镜像制作方案;
    2. 本篇不会涉及理论知识,这些留给下一章;
    3. 一通操作后可能会产生诸多疑问,文末留下了几个典型问题,您可以先思考再进入下一章揭晓;

    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项目中有多个文件夹,本章的应用在dockerlayerdemo文件夹下,如下图红框所示:

    在这里插入图片描述

    版本信息

    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,给spring-boot-maven-plugin插件的配置增加子节点,enabled的值为true,如下图红框所示:

    在这里插入图片描述

    1. 在pom.xml文件所在目录新增Dockerfile文件,内容如下:
    # 指定基础镜像,这是分阶段构建的前期阶段
    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目录有jar文件生成;
    2. 在Dockerfile所在目录执行以下命令构建镜像(请按照您的实际情况调整镜像名):
    docker build -t dockerlayerdemo:0.0.1 .
    
    1. 镜像构建成功的提示如下:

    在这里插入图片描述

    验证

    1. 执行以下命令创建并启动容器:
    docker run --rm -p 8080:8080 dockerlayerdemo:0.0.1
    
    1. 启动成功的控制台信息:

    在这里插入图片描述
    3. 浏览器访问:http://localhost:8080/hello ,如下图,一切正常:

    在这里插入图片描述
    4. 看看镜像的分层信息,执行命令:

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

    在这里插入图片描述

    留下的问题

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

    1. 2.3版本推荐的镜像构建方案,和旧版本比有什么不同?
    2. pom.xml中spring-boot-maven-plugin插件新增的参数,到底做了什么?
    3. Dockerfile中,java -Djarmode=layertools -jar application.jar extract这个操作啥意思?

    这些问题留待下一篇文章一起深入研究。

    参考信息

    官方文档地址:
    https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/pdf/spring-boot-reference.pdf ,4.31章节

    欢迎访问我的GitHub

    欢迎关注我的公众号:程序员欣宸

    在这里插入图片描述

    本文由博客一文多发平台 OpenWrite 发布!

  • 相关阅读:
    实用C语言技巧
    ASP.NET的适配器设计模式(Adapter)
    MongoDB的管理
    WinForm实现类似QQ停靠,显示隐藏过程添加特效效果
    dreamhappy博客索引
    Namenode的介绍
    asp.net
    学习
    采用Mono进行移动开发图书推荐
    VS2010+C#写的3D
  • 原文地址:https://www.cnblogs.com/bolingcavalry/p/13062886.html
Copyright © 2020-2023  润新知