跳至内容

简介

Podman 是一个与 Docker 兼容的容器运行时替代方案,与 Docker 不同的是,它包含在 Rocky Linux 的仓库中,并且可以将容器作为 systemd 服务运行。

安装 Podman

使用 dnf 工具安装 Podman

dnf install podman

添加容器

让我们以运行 Nextcloud 自托管云平台为例

podman run -d -p 8080:80 nextcloud

您将收到一个提示,要求您选择要下载的容器注册表。在我们的示例中,我们将使用 docker.io/library/nextcloud:latest

下载 Nextcloud 容器后,它将开始运行。

在您的 Web 浏览器中输入 ip_address:8080(假设您在 firewalld 中打开了端口),然后设置 Nextcloud。

Nextcloud in container

将容器运行为 systemd 服务

使用 quadlet

从 4.4 版本开始,Podman 随附 Quadlet,这是一个 systemd 生成器,可以为无根和有根的 systemd 服务生成单元文件。

有根服务的 Quadlet 文件可以放在

  • /etc/containers/systemd/
  • /usr/share/containers/systemd/

而无根文件可以放在以下任一目录中:

  • $XDG_CONFIG_HOME/containers/systemd/~/.config/containers/systemd/
  • /etc/containers/systemd/users/$(UID)
  • /etc/containers/systemd/users/

虽然支持单个容器、Pod、镜像、网络、卷和 kube 文件,但让我们专注于我们的 Nextcloud 示例。创建一个名为 nextcloud.container 的新文件 ~/.config/containers/systemd/,内容如下:

[Container]
Image=nextcloud
PublishPort=8080:80

还提供 许多其他选项

要运行生成器并让 systemd 知道有新服务,请运行:

systemctl --user daemon-reload

要运行您的服务,请运行:

systemctl --user start nextcloud.service

注意

如果您在有根服务的目录之一中创建了文件,请省略 --user 标志。

要让容器在系统启动或用户登录时自动运行,您可以在 nextcloud.container 文件中添加另一个部分:

[Install]
WantedBy=default.target

由于生成的服务文件被视为临时的,因此它们无法被 systemd 启用。为了解决这个问题,生成器在生成过程中手动应用安装。这有效地也启用了这些服务文件。

还支持其他文件类型:pod、volume、network、image 和 kube。例如,Pod 可用于对容器进行分组——systemd 会自动管理生成的 systemd 服务及其依赖项(在容器之前创建 Pod)。

使用 podman generate systemd

Podman 还提供了 generate systemd 子命令。它可用于生成 systemd 服务文件。

警告

generate systemd 已弃用,将不再获得新功能。建议使用 Quadlet。

现在让我们用 Nextcloud 来做。运行:

podman ps

您将获得正在运行的容器列表。

04f7553f431a  docker.io/library/nextcloud:latest  apache2-foregroun...  5 minutes ago  Up 5 minutes  0.0.0.0:8080->80/tcp  compassionate_meninsky

如上所示,我们的容器名称是 compassionate_meninsky

要为 Nextcloud 容器创建一个 systemd 服务并在重新启动时启用它,请运行以下命令:

podman generate systemd --name compassionate_meninsky > /usr/lib/systemd/system/nextcloud.service
systemctl enable nextcloud

compassionate_meninsky 替换为您容器的分配名称。

当您的系统重新启动时,Nextcloud 将在 Podman 中重新启动。

作者:Neel Chauhan

贡献者:Steven Spencer, Ganna Zhyrnova, Christian Steinert