前言
三年前,我写过一篇 使用 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 的说法,这个目录下有几个不同的配置文件:
- containers.conf: 主配置文件
- mounts.conf: 决定挂载逻辑的配置文件
- policy.json: 签名验证配置
- registries.conf: 自定义私有库配置
- storage.conf: 存储后端配置
常见的想要修改的配置有:
– 数据存储路径: 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 条评论