用Podman Desktop本地容器化部署Spring Boot应用

写在开头

本文主要讲述Podman Desktop基本概念和如何用Podman Desktop本地容器化部署Spring Boot应用。主要翻译了下文:

参考链接:https://developers.redhat.com/articles/2023/10/19/containerize-spring-boot-application-podman-desktop#wrapping_up

什么是Podman Desktop

Podman是一个用于管理容器实例的开源工具,它提供了一个简单而强大的方式来创建、运行、管理和部署容器。Podman使用和Docker类似的命令行接口,但它是一个独立的容器管理工具,不依赖于守护进程(如Docker守护进程)。它采用了一种更加安全的架构,使用普通用户权限即可管理容器,同时也支持Rootless模式。

Podman和Docker之间的一些区别包括:

  1. 架构:Podman没有守护进程,而Docker有一个守护进程来管理容器。Podman使用普通用户权限即可管理容器,而Docker通常需要Root权限。
  2. 安全性:Podman采用了Rootless模式,使得容器操作更加安全,而Docker通常需要Root权限来运行。
  3. 资源隔离:Podman在容器运行时使用新的命名空间和Cgroups来实现资源隔离,与Docker有一些不同的实现方式。
  4. 生态系统:Docker在容器生态系统方面更加成熟,而Podman作为一个较新的项目,其生态系统相对来说还不如Docker完善。

Podman Desktop是一个基于Podman工具的桌面应用,它提供了一个图形用户界面(GUI)来方便地管理容器的创建、运行和部署。Podman Desktop的目标是让开发人员可以更容易地在桌面环境中使用容器技术,而无需直接使用命令行。

Podman Desktop提供了类似于Docker Desktop的界面和功能,但是它是基于Podman的,使用Podman的命令行接口和工具来管理容器。通过Podman Desktop,用户可以轻松地创建、运行和管理容器实例,同时也可以方便地查看容器日志、设置网络和存储卷等功能。

实际上Podman和Docker非常相似,一些Docker命令只需把docker换成podman就能照搬执行。在Docker商用收费的背景下,Podman不失为一个更好的选择。

先决条件

  • Spring Boot应用:准备一个本地的Spring Boot应用
  • Podman Desktop

创建Containerfile

直接在Spring项目的根目录中创建一个Containerfile,它将作为我们稍后创建的容器image的蓝图(类似于Docker的Dockerfile)。Containerfile:

# 指定了基础镜像,即该容器将基于 eclipse-temurin 项目提供的 22 镜像构建。这个基础镜像中包含了 Java 22 版本的 JDK(Java开发工具包)
FROM eclipse-temurin:22

# 指定了容器内的工作目录,意味着后续的命令都会在这个目录下执行
WORKDIR /opt/app/hello-world

# 复制本地主机中的 .mvn 目录到容器内的 .mvn 目录下。.mvn 目录通常包含了 Maven 构建工具的配置文件和插件配置
COPY .mvn/ .mvn

# 复制本地主机中的 mvnw 和 pom.xml 文件到容器内的当前工作目录下
COPY mvnw pom.xml ./

# 给在容器内的所有用户(即所有者、所属组和其他用户)赋予 mvnw 文件的执行权限
RUN chmod a+x mvnw
# 用于解析项目的依赖并下载所需的库
RUN ./mvnw dependency:resolve

# 复制本地主机中的 src 目录(应用程序的源代码)到容器内的 ./src 目录下
COPY src ./src

# 定义了容器启动时要执行的命令。在这里,它运行了 Maven Wrapper 的 mvnw 命令,并传递了参数 spring-boot:run,这会启动 Spring Boot 应用程序
CMD ["./mvnw", "spring-boot:run"]
  • FROM eclipse-temurin:22中22指代的是Java版本,可以根据实际项目依赖Java版本切换成8或17等。
  • RUN chmod a+x mvnw这段命令如果不加会在执行RUN ./mvnw dependency:resolve时报错权限不足。暂时不清楚为啥会报这个错误,在本文参考链接中的例子里是没有这行命令的。这可能是由于22基础镜像和17基础镜像的不同导致的。

让我们仔细检查一下IDE中的目录结构和Containerfile。

IDE中的目录结构

用Podman Desktop创建一个镜像

点击左侧的Images选项卡,然后点击右上角Build按钮,会打开一个创建镜像的菜单。
在这里插入图片描述第一行是选择之前创建的Containerfile的路径,该路径应位于spring应用文件夹的根目录中。选择Containerfile后,第二行上下文目录会自动填充。第三行为镜像命名。现在,单击“Build”,您将看到Containerfile的每行命令将被自动执行。
在这里插入图片描述
创建成功后,可以在Images中找到新创建的镜像。

启动容器化的应用

点击右侧的启动图标,配置容器。
在这里插入图片描述
注意配置你的端口映射,确保将容器的相应端口(Spring Boot应用配置的端口)分配给主机的相应端口。其他设置可以为默认设置。单击Start Container,以启动Spring Boot应用程序的容器化实例

在这里插入图片描述现在,随着容器的启动和运行,可以看到Spring应用已经正常启动了。点击右上角的快捷按钮,可以快速打开浏览器并访问项目端口。
在这里插入图片描述现在我们可以在浏览器中看到这个应用程序在运行,但这还不是全部。对于更多可能涉及命令行终端的功能,我们现在可以使用Podman Desktop。这可能包括SSH进入容器进行调试和修改设置,查看容器的日志,或检查环境变量。这一切都可以在启动容器后自动打开的Container Details部分下完成。
在这里插入图片描述

结束语

我们已经从本地的Spring Boot代码变成了容器化应用程序并使用Podman Desktop运行它!现在,作为一个容器,我们可以上传镜像到Quay.io和DockerHub等镜像仓库中以共享此应用程序,并使用Kubernetes和OpenShift将其部署到各种不同的云提供商。

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值