Spring Boot教程之三十九: 使用 Maven 将 Spring Boot 应用程序 Docker 化

如何使用 Maven 将 Spring Boot 应用程序 Docker 化?

Docker 是一个开源容器化工具 ,用于在隔离环境中构建、运行和管理应用程序。它方便开发人员捆绑其软件、库和配置文件。Docker 有助于将一个容器与另一个容器隔离。在本文中,为了将Spring Boot 应用程序 docker 化 以进行部署,我们将学习如何创建 Spring Boot 应用程序,以及如何为 Spring Boot 应用程序创建docker 镜像,并在docker 容器上运行它。

目录

  • ++++Spring Boot 中的 Docker 是什么?++++
  • ++++Spring Boot Docker Compose 做什么?++++
  • ++++Docker化独立的Spring Boot应用程序++++
  • ++++如何在 Docker Compose 中部署 Spring Boot 应用程序?++++
  • ++++在容器中运行 Spring Boot Docker 映像++++
  • ++++如何更改基础++++ ++++镜像++++ ++++?++++
  • ++++使用 Docker Compose 工具将 Spring Boot 应用程序 Docker 化++++

Spring Boot 中的 Docker 是什么?

++++Spring Boot++++ 应用程序中的++++Docker++++有助于将 Spring Boot 应用程序容器化。它支持应用程序提供一致性、可扩展性和易于部署。使用 Docker 时,开发人员将能够将应用程序与其依赖项和配置一起打包,确保它在不同环境中以相同的方式运行。这种方法有助于简化应用程序部署,提高资源利用率和增强可扩展性,使其成为现代云原生应用程序的理想选择。

使用 Maven 将 Spring Boot 应用程序 Docker 化是让您的应用程序更易于移植和管理的重要步骤。对于那些希望深入探索 Docker 化并掌握从开发到生产的整个过程的人来说,++++DevOps 工程 - 规划到生产++++课程提供了全面的指南。

Spring Boot Docker Compose 做什么?

使用++++docker compose 编写++++spring boot java 应用程序有助于实现多容器 spring boot 应用程序的无缝部署和管理。以下是它的一些好处:

  • 简化配置:它支持在单个 YAML 文件中定义和管理 Spring Boot 应用程序以及数据库和其他服务。
  • **一致的环境:**它确保应用程序在开发、测试和生产环境中以相同的方式运行,从而最大限度地减少系统问题。
  • **可扩展性:**它提供可扩展性功能,可以根据需求轻松地扩展或缩小 Spring Boot 服务,从而优化资源使用。
  • **高效的编排:**实现相互依赖服务的启动、关闭和管理的自动化,从而简化部署过程。

Docker化独立的Spring Boot应用程序

独立 Spring Boot 应用程序: 独立 Spring Boot 应用程序是利用 Spring Boot 框架的 Java 应用程序,无需外部服务器软件即可独立运行。它嵌入应用程序服务器,可以作为独立++++JAR 文件++++执行,从而简化部署并减少依赖性。

要将 Spring Boot 应用程序 docker 化,我们首先需要创建一个简单的 Spring Boot 应用程序。然后我们需要将 Maven 插件添加到我们的 XML 文件中,之后我们可以创建一个可执行 jar 文件。下一节将讨论并指导其实现。

如何在 Docker Compose 中部署 Spring Boot 应用程序?

以下是指导将 Spring Boot 应用程序 docker 化的步骤:

步骤 1:使用https://start.spring.io创建骨架应用程序。

**第 2 步:**现在创建一个具有以下配置的 maven 项目。输入所有详细信息后,单击"生成"按钮下载项目。

**步骤3:**解压压缩文件。

  • 现在,在您选择的 IDE 中打开它。

Spring Boot 构建包

++++借助 Spring Boot buildpacks,将 Spring Boot 应用打包到容器镜像中时无需Dockerfile++++和手动配置。它允许开发人员利用针对其 Spring Boot 项目的自动镜像生成功能,从而让他们能够专注于编写代码。

这些构建包会自动识别应用程序的先决条件,包括运行时参数和依赖项,并将所有内容组合在一起以制作适合生产的容器映像。这提高了开发人员的工作效率,简化了容器化过程,并提高了部署之间的一致性。

步骤 4:下面是使用 buildpacks 创建 docker 镜像的依赖项。现在我们需要在 pom.xml 文件中添加以下 Maven 插件。

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

**第五步:**打开项目的基础java文件,向应用程序的基类添加一个新的控制器。

复制代码
@RequestMapping("/")
public String home() {
    return "Dockerizing Spring Boot Application";
}

步骤 6: 现在,添加**@RestController**注释并导入所需的包。最后,您的 Application.java 文件应如下所示。

Java

package com.docker.spring;

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;

@SpringBootApplication
@RestController
public class Application {

@RequestMapping("/")
public String home() {
return "Dockerizing Spring Boot Application";
}

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}

**步骤 7:**现在通过运行以下命令启动应用程序,

复制代码
$ ./mvnw spring-boot:run
  • 以下屏幕截图说明 java sprint boot 应用程序成功运行。

步骤8: 导航到http://localhost:8080来测试应用程序。

项目结构

  • 此时项目结构应该是这样的,

Docker化我们的应用程序

**步骤 9:**生成 .jar 文件

  • 接下来,让我们通过在 IntelliJ 终端中执行命令 ./mvnw clean package 来生成 .jar 文件。此命令将编译项目、运行任何必要的测试,并将应用程序打包到 .jar 文件中。
  • 该过程完成后,导航到项目目录中的目标文件夹。您将在那里找到生成的 spring-0.0.1-SNAPSHOT.jar 文件。
  • 现在使用 maven builder 创建一个新的 jar 文件。
复制代码
$ ./mvnw clean package
  • 上述命令将构建我们的 docker 镜像。下图表示通过执行上述命令生成 jar 文件。参考第二张图,构建成功并创建了 jar 文件。
  • 以下屏幕截图说明了使用 Maven 构建工具成功构建 Java 应用程序。

**步骤 10:**创建 Dockerfile

  • 在项目根目录下运行以下命令来构建 Dockerfile。此命令将在当前目录中创建一个空的++++Dockerfile 。++++
  • 创建 Dockerfile 后,您可以按照以下步骤继续定义构建++++Docker 映像所需的指令。++++

$ touch Dockerfile

**步骤 11:**添加配置以将 Spring Boot 应用程序 docker 化

  • 现在我们有一个可以运行的 Spring Boot 应用程序,要将应用程序 Docker 化,现在将以下内容粘贴到 Dockerfile 中:
复制代码
FROM openjdk:18
WORKDIR /app
COPY ./target/spring-0.0.1-SNAPSHOT.jar /app
EXPOSE 8080
CMD ["java", "-jar", "spring-0.0.1-SNAPSHOT.jar"]

上述文件包含以下信息:

  • FROM openjdk:18 --此行指定 ++++Docker 容器++++的基础镜像。在本例中,它使用标记为版本 18 的官方 OpenJDK 镜像。此镜像为 Java 应用程序提供运行时环境。
  • WORKDIR /app **--**此行将容器内的工作目录设置为/app。所有后续命令都将相对于此目录执行。
  • COPY ./target/spring-0.0.1-SNAPSHOT.jar /app **--**此命令将 Spring Boot 应用程序 JAR 文件从主机./target目录复制到/app容器内的目录。假设您已构建 Spring Boot 应用程序并且 JAR 文件位于指定位置。
  • **EXPOSE 8080 -**此行通知 Docker 容器将在运行时监听端口 8080。但是,它实际上并未发布端口。它只是容器预期使用哪些端口的文档。
  • **CMD ["java", "-jar", "spring-0.0.1-SNAPSHOT.jar"] -**此命令指定容器启动时要运行的默认命令。它通过java -jar使用 Spring Boot JAR 文件作为参数执行命令来启动 Spring Boot 应用程序。

**步骤 12:**现在使用 docker build 命令创建一个 docker 镜像:

复制代码
$ docker build -t [name:tag] .
  • **-t:**镜像的名称和标签
  • **. :**构建过程的背景

构建过程完成后,您将收到新镜像的 ID 和标签。

在容器中运行 Spring Boot Docker 映像

在容器中运行我们的镜像之前,让我们确保在尝试将容器端口映射到本地主机端口时避免任何潜在错误。为此,我们需要在++++Docker 命令++++ 或++++Docker Compose++++文件中指定正确的端口绑定配置。这可确保容器的端口已公开并可从主机系统访问。

**步骤 13:**通过运行以下命令创建 Docker 容器:

复制代码
$ docker run -d -p [host_port]:[container_port] --name [container_name] [image_id/image_tag]
  • **-d:**运行容器并打印容器ID。
  • **-p:**映射容器的端口
  • **--name:**为容器指定名称

**步骤 14:**通过运行以下命令验证容器是否已成功创建:

复制代码
$ docker container ps

步骤15: 检查项目

  • 确保项目结构符合标准程序并具有 Spring Boot 应用程序所需的所有部分。
  • 此外,确认应用程序的目录结构合理且定义明确,并且所有依赖项都配置正确。

步骤 16: 检查申请

  • 打开 Web 浏览器并转到 http://localhost:8080/ 来检查该程序。这将显示计算机上正在运行的本地 Spring Boot 应用程序。

如何更改基础 镜像

修改 Dockerfile 中的基础映像是一个简单的过程,但可能会对容器的大小、安全性和功能产生很大影响。请按照以下步骤修改基础映像:

1. 选择一个新的基础 镜像 在进行任何更改之前,进行彻底的研究以获得符合应用程序要求的合适的基础镜像非常重要。

  • 操作系统、图片大小、安全功能以及与应用程序堆栈的兼容性都是需要考虑的重要因素。
  • 应优先考虑来自 Docker Hub 或其他可靠来源的官方镜像,以确保可靠性并符合安全最佳实践。
  • 通过仔细权衡这些考虑因素,您可以选择一个既能优化速度又能保证安全性的基础映像,作为您的容器化应用程序的坚实基础。

2. 更新 Dockerfile: 打开文本编辑器并选择您的 Dockerfile。查找文件开头的指令"FROM",它表示当前基础映像。

  • 用新镜像替换现有镜像,如下面的示例所示。
复制代码
FROM image:version  #Change the image and version as per your requirement

3. 调整依赖项和配置:由于新旧基础镜像之间的差异,可能需要更新 Dockerfile 中的依赖项、配置或指令。

  • 确保在新的基础映像上安装并配置了所有必需的工具、库和包。

**4.验证您的更改:**对 Dockerfile 进行更改后,使用"docker build"命令重新创建您的 Docker 映像:

复制代码
docker build -t [name:tag] .

使用 Docker Compose 工具将 Spring Boot 应用程序 Docker 化

Dockerfiles 和 Docker 命令非常适合构建单个容器。如果我们想在应用程序的共享网络上操作,容器管理就会变慢。

Docker 提供了一个名为 Docker Compose 的工具来解决此问题。此实用程序采用 YAML 中独特的构建文件格式。多个服务的配置可以合并到一个名为 docker-compose.yml 的文件中。

Docker Compose 文件

以下是 Docker Compose 文件示例,它是用于编排多个服务的基本配置。它定义了两个服务"service1"和"service2",每个服务都具有指定的 Docker 镜像、容器名称、公开端口和环境变量。我们可以根据需要修改版本。

版本:'3.8'

复制代码
version: '3.8'

services:
  spring-boot-app:
    image: openjdk:18
    container_name: spring-boot-app
    working_dir: /app
    volumes:
      - ./target/spring-0.0.1-SNAPSHOT.jar:/app/spring-0.0.1-SNAPSHOT.jar
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/mydatabase
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=example
    depends_on:
      - db
    command: ["java", "-jar", "spring-0.0.1-SNAPSHOT.jar"]

  db:
    image: mysql:8.0
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydatabase
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:
  • 以下命令用于构建docker-compose文件:
复制代码
$ docker-compose config
  • 为了构建映像并创建 Docker 容器,我们可以使用以下命令:

$ docker-compose up --build

  • 要停止容器,我们应该将其从 Docker 中删除。为此,我们可以使用以下命令:

$docker-compose down

扩展服务

Docker Compose 中的扩展服务是指能够增加或减少 Docker Compose 文件中定义的服务实例数量。这可以通过调整服务的"scale"属性来指定要为该服务运行的容器数量来实现。

复制代码
$ docker-compose --file docker-compose.yml up -d --build --scale service=1 --scale product-server=1

此操作将启动单个服务服务器和单个产品服务器。

最后

因此,通过这种方式,我们可以使用 Maven 插件将镜像发布到 Docker 容器。最好不要使用本地环境将 docker 镜像上传到任何注册表,使用++++CI/CD++++管道或任何工具始终是最佳实践。

使用 Maven 将 Spring Boot 应用程序 Docker 化 - 常见问题解答

如何将 Maven 项目 Docker化?

在项目根目录中创建一个 ++++Dockerfile++++ ,将应用程序的 JAR 文件复制到 ++++Docker 镜像++++ 中,并提供在容器内启动应用程序的命令,以便 Docker 化 ++++Maven 项目。++++

如何使用 Maven 建立 Spring Boot 应用程序?

创建一个新的 Maven 项目,并将必要的依赖项(例如 spring-boot-starter-parent 以及应用程序要求特有的任何其他依赖项)添加到 pom.xml 文件中,以使用 Maven 设置 Spring Boot 应用程序。接下来,按照推荐的目录布局为您的 Spring Boot 应用程序开发类和资源。

如何将 Spring Boot 微服务 Docker 化?

创建一个指定基础镜像的 Dockerfile,复制应用程序 JAR 文件,公开必要的端口,并描述启动应用程序的命令,以便将 Spring Boot ++++微服务++++ docker 化。接下来创建 Docker 镜像,并使用它来启动容器。

如何将我的项目 Docker化?

制作一个 Dockerfile,列出基础镜像、所需的库以及用于构建和执行应用程序的命令,以便将您的项目 Docker 化。

什么是 Dockerize 命令?

使用 Dockerize 命令可以将应用程序打包到 ++++Docker 容器++++ 中,从而可以轻松地在各种上下文中部署和执行。通常,它需要生成 Dockerfile,使用 docker build 生成镜像,然后使用 docker run 启动容器。

相关推荐
赵谨言4 分钟前
基于 Java 大数据的旅游推荐系统的设计与实现
java·经验分享·毕业设计
NHuan^_^1 小时前
RabbitMQ基础篇之Java客户端 Topic交换机
java·rabbitmq·java-rabbitmq
中國移动丶移不动1 小时前
Java List 源码解析——从基础到深度剖析
java·后端·list
Java知识技术分享2 小时前
spring boot 异步线程池的使用
java·spring boot·spring
m0_748232922 小时前
Springboot3.x整合swagger3
java
东林知识库2 小时前
Mysql高级
java·mysql
m0_748248232 小时前
Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)
java·spring boot·后端
顾北辰202 小时前
基本算法——回归
java·spring boot·机器学习
Dusk_橙子3 小时前
在K8S中,节点状态notReady如何排查?
云原生·容器·kubernetes