简介¶
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。
将容器运行为 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