目录

一、前言

1、为什么容器化 Spring Boot 应用程序很重要?

2、一个简单的“Hello World”Spring Boot 应用程序

二、容器化 Spring Boot 代码的 9 个技巧

1、自动化所有手动步骤

2、使用特定的基础图像标签,而不是最新的

3、如果可能,使用 Eclipse Temurin 而不是 JDK

4、 使用多阶段构建

5、使用 .dockerignore

6、支持多架构 Docker 镜像

7、出于安全考虑,以非 root 用户身份运行

8、修复 Java 映像中的安全漏洞

9、使用 OpenTelemetry API 测量 Java 性能

结论


一、前言

大量开发人员使用 Docker 容器来打包他们的Spring Boot应用程序。根据VMWare 的 2021 年春季状况报告,运行容器化 Spring 应用程序的组织数量飙升至 57%,而 2020 年为 44%。

是什么推动了这一显着增长?对减少 Web 应用程序的启动时间和优化资源使用的需求不断增长,这极大地提高了开发人员的工作效率。

1、为什么容器化 Spring Boot 应用程序很重要?

在 Docker 容器中运行 Spring Boot 应用程序有很多好处。首先,Docker 友好的、基于 CLI 的工作流程允许开发人员为所有技能水平的其他开发人员构建、共享和运行容器化的 Spring 应用程序。其次,开发人员可以从一个包中安装他们的应用程序,并在几分钟内启动并运行。第三,Spring 开发者可以在本地编码和测试,同时保证开发和生产的一致性。

将 Spring Boot 应用程序容器化很容易。您可以通过将.jaror.war文件直接复制到 JDK 基础映像中,然后将其打包为 Docker 映像来执行此操作。网上有很多文章可以帮助您有效地打包您的应用程序。然而,许多重要的问题,如 Docker 镜像漏洞、镜像膨胀、缺少镜像标签和糟糕的构建性能都没有得到解决。我们将解决这些常见问题,同时分享九个容器化 Spring Boot 代码的技巧。

2、一个简单的“Hello World”Spring Boot 应用程序

为了更好地理解无人关注的问题,让我们构建一个示例“Hello World”应用程序。通过下载这个预先初始化的项目并生成一个 ZIP 文件来应用程序。然后解压缩并完成以下步骤以运行该应用程序。

在该目录下,您可以使用以下内容src/main/java/com/example/dockerapp/修改您的文件:DockerappApplication.java

package com.example.dockerapp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@SpringBootApplication
public class DockerappApplication {@RequestMapping("/")public String home() {return "Hello World!";}public static void main(String[] args) {SpringApplication.run(DockerappApplication.class, args);}}

以下命令获取您编译的代码并将其打包成可分发的格式,例如 JAR:

./mvnw package
java -jar target/*.jar

现在,您应该可以通过http://localhost:8080访问“Hello World” 。

为了 Dockerize 这个应用程序,你需要使用Dockerfile. ADockerfile是一个文本文档,其中包含用户可以在命令行上调用以组装 Docker 映像的每条指令。一个 Docker 镜像由一堆层组成,每个层代表Dockerfile. 每个后续层都包含对其底层的更改。

通常,开发人员使用以下Dockerfile模板来构建 Docker 映像。

FROM eclipse-temurin
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]

第一行定义了大约 457 MB 的基本映像。ARG指令指定可用于COPY指令的  变量。COPY将JAR 文件从target/文件夹复制到 Docker 映像的根目录。EXPOSE指令通知 Docker 容器在运行时侦听指定的网络端口。最后,ENTRYPOINT允许您配置作为可执行文件运行的容器。它对应于您的命令。java -jar target/*.jar 

您将使用docker build命令构建图像,如下所示:

$ docker build -t spring-boot-docker .
Sending build context to Docker daemon  15.98MB
Step 1/5 : FROM eclipse-temurin---a3562aa0b991
Step 2/5 : ARG JAR_FILE=target/*.jar---Running in a8c13e294a66
Removing intermediate container a8c13e294a66---aa039166d524
Step 3/5 : COPY ${JAR_FILE} app.jar
COPY failed: no source files were specified

上述示例的一个主要缺点是它没有完全容器化。./mvnw您必须首先通过在主机系统上运行package命令来 创建 JAR 文件。这需要您手动安装 Java、设置  JAVA_HOME 环境变量并安装 Maven。简而言之,你的 JDK 必须驻留在你的 Docker 容器之外——这给你的构建环境增加了更多的复杂性。一定有更好的方法。

二、容器化 Spring Boot 代码的 9 个技巧

1、自动化所有手动步骤

建议在您自己的构建过程中构建 JAR Dockerfile。以下RUN说明触发解决所有项目依赖项的目标,包括插件、报告及其依赖项:

FROM eclipse-temurin
WORKDIR /appCOPY .mvn/ .mvn
COPY mvnw pom.xml ./
RUN ./mvnw dependency:go-offlineCOPY src ./srcCMD ["./mvnw", "spring-boot:run"]

容器化 Spring Boot 代码的 9 个技巧相关推荐

  1. buildpack_使用Buildpack容器化Spring Boot应用程序

    buildpack 在本文中,我们将看到如何使用Buildpacks容器化Spring Boot应用程序. 在先前的一篇文章中,我讨论了Jib . Jib允许我们在不使用Dockerfile的情况下将 ...

  2. Docker容器及Spring Boot微服务应用

    2019独角兽企业重金招聘Python工程师标准>>> Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复 ...

  3. Spring Boot 配置随机数那些小技巧

    转载自  Spring Boot 配置随机数那些小技巧 Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位M ...

  4. Docker化Spring Boot应用程序

    你好朋友, 在本教程中,我们将看到如何对Spring Boot应用程序进行Docker化.通过dockerizing意味着我们将以Docker容器的形式运行应用程序. 以下是涉及的步骤: 1.创建一个 ...

  5. cassandra可视化_容器化Spring Data Cassandra应用程序

    cassandra可视化 我正在继续学习Docker的旅程. 在这一点上,我仍然保持简单. 这次,我将解决将Spring和Cassandra应用程序转换为使用容器而不是在主机上本地运行的问题. 更确切 ...

  6. 容器化Spring Data Cassandra应用程序

    我正在继续学习Docker的旅程. 在这一点上,我仍然保持简单. 这次,我将解决将Spring和Cassandra应用程序转换为使用容器而不是在主机上本地运行的问题. 更准确地说,使用Spring D ...

  7. Spring Boot 代码简化利器 lombok

    ▶ IntelliJ IDEA 安装 lombok 插件 1.菜单栏 File > Settings > Plugins > Browse repositories- 2.搜索 Lo ...

  8. Spring Boot 容器镜像分层构建

    本文参考文档 Spring Boot 容器镜像 Spring Boot Maven 插件参考指南 本文使用 Maven 进行配置,Gradle 可以参考下面文档 Spring Boot Gradle ...

  9. 【spring boot2】第8篇:spring boot 中的 servlet 容器及如何使用war包部署

    嵌入式 servlet 容器 在 spring boot 之前的web开发,我们都是把我们的应用部署到 Tomcat 等servelt容器,这些容器一般都会在我们的应用服务器上安装好环境,但是 spr ...

最新文章

  1. CCNA CCNP CCIE所有实验名称完整版
  2. Oracle 变量绑定与变量窥视合集系列三
  3. c++面试准备之螺旋队列
  4. I.MX6 Linux Qt 启动流程跟踪
  5. 工作113:添加echart折线图
  6. HDU 2859 Phalanx(二维DP)
  7. php与web网页计算器,php+html实现网页计算器
  8. 02 ansible核心模块 之 shell script
  9. href中使用javascript:void(0)无法执行操作
  10. 常用类中的方法 —— java.lang.String
  11. 图像匹配之序贯相似性检测法匹配
  12. [数据结构 算法] 2015年蓝桥杯A组C/C++第三题奇妙的数字
  13. 【非线性规划】- 无约束问题(1)局部极小值与全局极小值
  14. WebStorm、HBuilder代码美化快捷键
  15. 设计必备的配色工具01
  16. 区块链:POA委员会选举机制
  17. excel查找在哪里_数据分析,如何学好Excel
  18. Swift教程-视频拍摄教程
  19. 香港中文大学计算机专业学费,香港中文大学研究生专业学费是多少?
  20. MATLAB SCI论文绘图及绘图窗口大小设置

热门文章

  1. SDUT 来淄博旅游
  2. C语言逗号表达式赋值、野指针成因、用户标识符、字符串赋值的几个概念
  3. 计算机模拟太阳系,科学家通过计算机模拟发现太阳系十九颗小行星或来自系外...
  4. 《Android系统源代码情景分析》一书勘误
  5. Concat和Add操作
  6. 15个nosql数据库
  7. 联合国农产品数据分析
  8. gta5维护服务器,GTA6再等10年?R星强行续命GTA5,下月更新地图挤爆服务器
  9. thinksnsv4 php7,社交系统ThinkSNS+安装部署演示
  10. linux 监听终端输入法,xinit 终端中文输入法