使用 Podman Desktop 容器化 Spring Boot 应用
1、概览
本文将带你了解如何使用 Podman Desktop 对 Spring 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”(仪表盘)部分看到:
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” 按钮:
接下来,填写镜像的细节:
- 设置镜像名称。
- 选择
Containerfile
。 - 使用项目目录作为上下文目录。
- 还可以选择镜像的平台(Platform),这里使用默认值。
示例如下:
填写完详细信息后,单击 “Build” 按钮来构建镜像。构建完成后,可以在 “Images” 部分找到镜像。
6、运行容器
镜像就绪后,使用该镜像运行一个容器。
单击 “Images” 部分中 hello-world-demo
镜像旁边的 “Run” 按钮:
6.1、启动容器
接下来,填写容器的详细信息。在 Containerfile
中设置的属性会被预填充进去。
可以根据需要进行自定义:
在本例中,端口映射和命令已经填好。如有需要,还可以设置其他属性,如环境变量、Volume 等。还可以设置容器的名称。
填写完详细信息后,可以单击 “Start Container”(启动容器)按钮来启动容器。
可以看到容器日志:
6.2、测试应用
容器启动后,可以通过打开浏览器并访问 http://localhost:8080/hello
来请求应用。
你可以在页面上看到 "Hello, World!"
消息:
说明一切 Ok。
6.3、停止容器
要停止容器,可以单击上面 “Container” 详情部分中的 “Stop” 按钮。
或者,也可以进入容器列表,点击容器的 “Stop” 按钮:
7、总结
本文介绍了如何使用 Podman Desktop 对 Spring Boot 应用进行容器化。
首先,创建了一个简单 Spring Boot 应用,并暴露了一个 API。然后,为其创建了一个 Containerfile
。接着,使用 Podman Desktop 构建了一个镜像,并使用该镜像运行了一个容器。最后,测试了容器启动后端点是否正常工作。
Ref:https://www.baeldung.com/spring-boot-podman-desktop