前言

三年前,我写过一篇 使用 Podman 代替 docker-compose。那时候 podman 发展还不成熟,还只能使用 podman-compose 实现对 docker-compose 的桥接。现在 Podman 已经发展到 v5 这个大版本了,其引入的 Podman Quadlet 可以很好的实现 systemd 集成。

安装

现在,大部分发行版应该都已经内置的 podman 软件包。只需要从软件源中安装即可:

apt-get install podman

配置

默认配置存放于下面的几个目录中,podman 会按顺序读取:

  • /usr/share/containers/
  • /etc/containers/
  • $HOME/.config/containers/

根据 podman.1 的说法,这个目录下有几个不同的配置文件:

常见的想要修改的配置有:
– 数据存储路径: storage.conf -> storage.graphroot
– 自定义短名称 alias: registries.conf -> aliases

Podman quadlet

Podman Quadlet 是将 podman 与 systemd 结合的脚本。它的名字来源于 k8s 的 kubelet,希望能像 kubelet 一样使用配置文件管理 pod。

它的用法非常简单。只需要像编写 systemd 的脚本那样编写服务即可:

[Unit]
Description=Test alpine image
After=local-fs.target

[Container]
Image=alpine:latest
Exec=sleep 1000

[Install]
# Start by default on boot
WantedBy=multi-user.target default.target

将上述文件放置于 $HOME/.config/containers/systemd/alpine.container 文件下,然后使用下面的命令即可使用 systemd 启动对应的容器:

systemctl --user daemon-reload
systemctl --user start alpine.service

然后你可以使用 podman ps 查看这个容器是否启动:

CONTAINER ID  IMAGE                            COMMAND     CREATED         STATUS         PORTS       NAMES
1845b3732130  docker.io/library/alpine:latest  sleep 1000  15 seconds ago  Up 15 seconds              systemd-alpine

看着是不是很简洁明了?同时它还与 systemd 完美结合,使得管理这些容器不再是一件难事。对于系统级别的服务,需要放置在 /etc/containers/systemd/ 目录下。

如果在运行了 systemd daemon-reload 之后,找不到生成的服务,那么可能是你的配置文件写的有问题。你可以使用 systemd-analyze --user --generators=true verify alpine.service 命令尝试获取更多信息。

这里我总结了一些常见的参数供各位参考:

用途 Docker Compose Podman Quadlet
容器命名 container_name: name ContainerName=name
挂载目录 volumes: [ /source:/dest ] Volume=/source:/dest
端口映射 ports: [ 8080:80 ] PublishPort=8080:80
环境变量 environment: foo: bar Environment=foo=bar
环境变量文件 env_file: [ /tmp/env ] EnvironmentFile=/tmp/env

除容器之外,Quadlet 还支持其他不同类型的声明:

  • .volume: 声明卷
  • .network: 创建网络
  • .build: 镜像构建
  • .pod: Pod
  • .kube: K8s 配置文件启动(podman kube play /kube.yaml)
  • .image: 镜像拉取策略

如果不想手动转换 compose 文件到 quadlet 格式的话,Podlet 是一个转换工具,可以帮你将已经写好的 compose 文件转换为 quadlet 文件。

只需要运行下面的命令,就能直接帮你转换并且复制到目标目录:

podlet -u compose ./compose.yaml
分类: 未分类

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注