简介¶
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 容器后,它将运行。
在您的网络浏览器中输入 **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 示例。使用以下内容创建一个新文件 ~/.config/containers/systemd/nextcloud.cotainer
[Container]
Image=nextcloud
PublishPort=8080:80
许多其他选项可用。
要运行生成器并让 systemd 知道有新服务运行,请运行
systemctl --user daemon-reload
现在运行您的服务,请运行
systemctl --user start nextcloud.service
注意
如果您在有根服务的目录中创建了文件,请省略 --user
标志。
要让容器在系统启动或用户登录时自动运行,您可以在 nextcloud.container
文件中添加另一个部分
[Install]
WantedBy=default.target
由于生成的 service 文件被认为是临时的,因此无法通过 systemd 启用它们。为了减轻这种影响,生成器在生成期间手动应用安装。这也有效地启用了这些 service 文件。
其他文件类型也受支持:pod、volume、network、image 和 kube。Pod 例如,可以用来对容器进行分组 - 生成的 systemd service 及其依赖项(在容器之前创建 pod)会由 systemd 自动管理。
使用 podman generate systemd
¶
Podman 还提供 generate systemd
子命令。它可以用来生成 systemd
service 文件。
警告
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
service 并将其在重启时启用,请运行以下命令:
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