将 Podman 与 Quarkus 一起使用
Podman 是一个开源的、无守护进程的、无 root 权限的容器引擎,用于在 Linux、Windows 和 Mac 上开发、管理和运行 OCI 容器。它可以用于支持 Quarkus 上的容器功能和开发服务。
安装 Podman
Podman 的安装方式取决于您使用的操作系统,并且所需的步骤也会随着 Podman 版本的变化而变化。对于 Mac 和 Windows,我们强烈建议通过 Podman Desktop 图形应用程序进行安装。 这是最简单的选择,步骤最少,它增加了额外的功能,例如自动启动,并且有助于管理未来的更新。 也可以使用仅 CLI 的选项。 但是,此设置需要额外的手动任务来管理、更新和启动 Podman Machine 环境。
|
Mac 上的 Homebrew 包管理器 (brew) 不应被用于安装 Podman,因为它会导致未经验证的组件组合。 这是因为 Homebrew 在项目之间共享依赖项,并且对升级请求的审查有限。 例如,有几个实例 qemu 的更新在 Apple Silicon 上中断,从而阻止了 Podman Machine VM 的启动。 |
在 Linux 上,Podman 集成到操作系统中,并通过系统的包管理器进行安装。 与 Mac 和 Windows 一样,也可以安装 Podman Desktop 来补充 Podman CLI。 但是,在 Linux 上,Podman Desktop 充当本机 Podman 集成的客户端,并且不管理底层 Podman 安装。
有关最新版本的 Podman Desktop,请参阅 https://desktop.podman.org.cn/downloads/。
此外,如果您使用的是 Linux,请参阅 Podman Linux 安装文档,了解有关将 Podman 安装到特定 Linux 发行版的说明。
平台差异
虽然与容器的交互在 Mac、Windows 和 Linux 之间几乎相同,但需要注意重要的环境差异。 值得注意的是,容器的执行方式不同,因为“容器是 Linux”。 更具体地说,容器包含 Linux 用户空间二进制文件,这些文件依赖于 Linux 内核 syscall 接口。 因此,Linux 容器无法在本机 macOS 或 Windows 上运行; 相反,它们需要使用运行 Linux 的虚拟机 (VM) 来托管它们。 对于需要它的系统,Podman 包括一个名为 Podman Machine 的子系统,该子系统用于管理此 VM。 Podman Desktop 执行此 VM 的引导式交互式设置,并将自动为您启动它。
Rootful vs Rootless
Podman 支持两种操作模式:rootful,在这种模式下,容器以 root 用户身份在 Linux 主机(或 Mac/Windows 中的 VM)上运行;另一种是 rootless,在这种模式下,容器在标准的 Unix 用户帐户下运行。 后者提供了更强大的安全性,但某些容器无法在增加的限制下运行。 例如,如果容器创建新设备、loopback mount 点并执行其他高度受限的操作,则必须以 root 用户身份运行它们。 请注意,这不应与 Containerfile/Dockerfile 中指定的 USER 值混淆,该值是指容器内的进程如何看待自己。 在 rootless 模式下,在具有 USER "root" 的容器中运行的进程将彼此显示为 root 用户,但由于 pid 命名空间,它们实际上将作为主机系统上的标准受限用户帐户运行。
在 Win & Mac 上配置
在涉及 Podman Machine 管理的 VM(Mac & Windows)的系统上,容器客户端和 Podman 命令远程通信到运行 VM 的 rootful 或 rootless 系统服务。 使用哪个由 Podman Machine 的 rootful 设置决定。 为了获得最大的兼容性,Podman Desktop 默认启用 rootful 用于新的 Machine 实例。 这对此的安全影响有限,因为 VM 本身是在用户进程下运行的。 也可以通过 podman 命令更改此设置
podman machine set --rootful=true # or false
podman machine stop
podman machine start
其他 Linux 设置
镜像的短名称
Testcontainers 和 Quarkus Dev Services 还希望他们所请求的容器服务是非交互式的。 如果您在 Docker 或 Podman 配置中配置了多个注册表,并且在使用短镜像名称时,Podman 会响应一个提示,询问应使用哪个注册表来拉取镜像。
虽然我们建议您避免短名称,并始终使用包括注册表的完全指定名称,但不幸的是,Testcontainers 目前在内部依赖于短名称。 如果您直接或通过开发服务使用 Testcontainers,则需要通过在 /etc/containers/registries.conf 中设置 Podman 的 short-name-mode="disabled" 配置属性来禁用此提示。