我正在从 docker 迁移到 podman(不会直接使用 kubernetes,因为那样肯定会有点过度)。
现在,许多优雅的配置都可以作为 docker-compose 设置 - 但是 docker-compose 依赖于 docker 守护进程来启动(并保持运行)相互依赖的容器。
podman 实现这一点的方法是让 systemd 单元文件相互依赖,并让 systemd 进行监控、启动(和关闭)。
现在,手动将 docker-compose 设置转换为单元文件容易出错,而且有点繁琐。
是否有已知的合理 docker-compose 兼容读取器来源,我可以设置它来生成 systemd 单元文件?
答案1
2024 年 4 月 11 日更新
命令行工具podlet
从 podman 命令或组合文件生成 podman quadlet 文件。
该命令podman generate systemd
已弃用。Podman 开发团队现在建议改用 quadlet 文件(请参阅podman-systemd.unit(5)/usr/libexec/podman/quadlet
)。这些文件将通过 中描述的方法自动转换为 systemd 服务单元systemd.generator(7)
旧答案
Podman 3.0(2021 年 2 月发布)引入了对该标准的支持docker-compose。Podman 现在对 Docker REST API 的支持已经足够好,能够满足 docker-compose 的需求。
虽然我还没有测试过,但我希望以下方法可以将 docker-compose YAML 转换为 systemd 服务文件:
- 启动 docker-compose
export DOCKER_HOST=unix:///some/path/podman.sock
docker-compose up -d
(我又写了一篇Stackoverflow 答案详细信息)
- 尝试识别 docker-compose 启动的 Podman 容器的名称:
podman container list
- 从这些容器生成 systemd 服务文件
podman generate systemd --new --files --name containername
(见手册页)
文章使用 Podman 从 Docker Compose 转换到 Kubernetes讨论相关主题:如何转换Docker 撰写 YAML 到Kubernetes YAML。