使用 Podman Desktop 容器化 Spring Boot 应用

1、概览

本文将带你了解如何使用 Podman DesktopSpring Boot 应用进行容器化。Podman 是一种容器化工具,它允许我们在不需要守护进程的情况下管理容器。

Podman Desktop 是一款具有图形用户界面(GUI)的桌面应用,用于使用 Podman 管理容器。

为了演示其用法,我们要创建一个简单的 Spring Boot 应用,构建容器镜像,并使用 Podman Desktop 运行容器。

2、安装 Podman Desktop

我们需要在本地计算机上 安装 Podman Desktop 才能开始使用。它适用于 Windows、macOS 和 Linux 操作系统。下载安装程序后,按照安装说明在机器上安装 Podman Desktop 即可。

以下是设置 Podman Desktop 的几个重要步骤:

  • 机器上应已安装 Podman。如果没有安装,Podman Desktop 会提示并为我们安装。
  • Podman 准备就绪后,系统会提示我们启动 Podman 虚拟机。我们可以选择默认设置,也可以根据需要自定义设置。在运行容器之前,这是必须的。
  • 此外,对于 Windows,需要启用/安装 WSL2(Windows Subsystem for Linux),然后才能运行 Podman。

在安装过程结束时,我们应该有一个正在运行的 Podman 虚拟机,并可以使用 Podman Desktop 进行管理。

可以在 “Dashboard”(仪表盘)部分看到:

Podman 仪表盘

3、创建 Spring Boot 应用

创建一个小型 Spring Boot 应用。该应用有一个 REST Controller,当我们访问 /hello 端点时,它返回一条 "Hello, World!" 消息。

使用 Maven 来构建项目并创建一个可执行的 JAR 文件。然后,创建一个 Containerfile(在 Docker 中也称为 Dockerfile),Podman Desktop 通过使用这个文件来为我们的应用构建一个容器镜像。

3.1、项目设置

首先,在项目中添加 Spring Boot Starter Web 依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>3.3.1</version>
    </dependency>
</dependencies>

该依赖为创建 Spring Boot Web 应用提供了必要的库。

3.2、Controller

创建 REST Controller:

@RestController
public class HelloWorldController {
    @GetMapping("/hello")
    public String helloWorld() {
        return "Hello, World!";
    }
}

如上,使用 @RestController 注解将类标记为 Controller,并使用 @GetMapping 注解将方法映射到 /hello 端点。当访问该端点时,它会返回 "Hello, World!" 消息。

3.3、构建项目

在终端运行以下命令,使用 Maven 构建项目:

mvn clean package

该命令会编译项目、运行测试并在 target 目录下创建 jar 文件。

4、Containerfile

Spring Boot 应用就绪后,创建一个 Containerfile 文件来构建应用镜像。

在项目的根目录下创建该文件:

FROM openjdk:17-alpine
WORKDIR /app
COPY target/spring-boot-podman-desktop-1.0-SNAPSHOT.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

短短几行,也很好理解:

  • 首先,使用 openjdk:17-alpine 镜像作为基础镜像。
  • 接下来,将工作目录(WORKDIR)设置为 /app
  • 然后,将 Maven 生成的 jar 文件复制到 /app 目录。
  • 暴露 Spring Boot 应用的默认端口 8080
  • 最后,使用 CMD 命令指定要在容器启动时使用 java -jar 命令运行 jar 文件。

5、使用 Podman Desktop 创建镜像

Containerfile 就绪后,使用 Podman Desktop 创建镜像。

首先,进入 “Images” 部分,点击 “Build” 按钮:

Podman 镜像视图,选择 Button 按钮

接下来,填写镜像的细节:

  • 设置镜像名称。
  • 选择 Containerfile
  • 使用项目目录作为上下文目录。
  • 还可以选择镜像的平台(Platform),这里使用默认值。

示例如下:

Podman 创建镜像的参数

填写完详细信息后,单击 “Build” 按钮来构建镜像。构建完成后,可以在 “Images” 部分找到镜像。

6、运行容器

镜像就绪后,使用该镜像运行一个容器。

单击 “Images” 部分中 hello-world-demo 镜像旁边的 “Run” 按钮:

从 podman 镜像部分运行容器

6.1、启动容器

接下来,填写容器的详细信息。在 Containerfile 中设置的属性会被预填充进去。

可以根据需要进行自定义:

在运行容器之前设置其属性

在本例中,端口映射和命令已经填好。如有需要,还可以设置其他属性,如环境变量、Volume 等。还可以设置容器的名称。

填写完详细信息后,可以单击 “Start Container”(启动容器)按钮来启动容器。

可以看到容器日志:

Podman 容器启动日志

6.2、测试应用

容器启动后,可以通过打开浏览器并访问 http://localhost:8080/hello 来请求应用。

你可以在页面上看到 "Hello, World!" 消息:

在浏览器中测试容器 API

说明一切 Ok。

6.3、停止容器

要停止容器,可以单击上面 “Container” 详情部分中的 “Stop” 按钮。

或者,也可以进入容器列表,点击容器的 “Stop” 按钮:

在 Podman Desktop 的 Containers 部分停止容器

7、总结

本文介绍了如何使用 Podman Desktop 对 Spring Boot 应用进行容器化。

首先,创建了一个简单 Spring Boot 应用,并暴露了一个 API。然后,为其创建了一个 Containerfile。接着,使用 Podman Desktop 构建了一个镜像,并使用该镜像运行了一个容器。最后,测试了容器启动后端点是否正常工作。


Ref:https://www.baeldung.com/spring-boot-podman-desktop