【问题标题】:There is any "Podman Compose"?有没有“Podman Compose”?
【发布时间】:2019-08-04 20:50:12
【问题描述】:

我最近发现了 Podman (https://podman.io)。有一种使用 Linux fork 进程而不是守护进程并且不必使用 root 运行的方法引起了我的注意。

但我非常习惯于使用 docker-compose 编排在我的机器上运行的容器(在生产中我们使用 kubernetes)。我真的很喜欢它。

所以我正在尝试替换 docker-compose。我将尝试保留 docker-compose 并使用 podman 作为 docker 的别名,因为 Podman 使用与 docker 相同的语法:

别名 docker=podman

它会起作用吗?你能推荐任何其他工具吗?如果可能的话,我真的打算保留我的 docker-compose.yml 文件。

【问题讨论】:

  • 随着 podman 的发展,我期待未来会有很多新的答案

标签: docker docker-compose containers podman


【解决方案1】:

是的,现在可行,检查podman-compose,这是一种方法,另一种方法是使用Kompose 将docker-compose yaml 文件转换为kubernetes 部署。有一篇来自 Jérôme Petazzoni @jpetazzo: from docker-compose to kubernetes deployment的博文

【讨论】:

  • 谢谢@walid!这个很新。但它似乎可以解决问题。 Kompose 它也很有帮助。采用 Kubernetes 作为“事实上的”标准可以帮助您更快地投入生产。我会尝试两个。最好的问候!
  • 您好,@otaviofcs 我已添加 Jérôme Petazzoni 博客参考。我希望这些足以让你继续前进 ;-)
  • 请注意,有很多 docker-compose 命令与 podman-compose 不兼容,很遗憾:github.com/containers/podman-compose/issues
  • 真@RégisB。但是对于简单的情况,您可能只使用 podman,查看有关从 compose 迁移到 podman 的最新文章 redhat.com/sysadmin/compose-podman-pods
【解决方案2】:

以普通用户身份使用 Podman 运行 docker-compose(无根用户)

要求:Podman 版本 >= 3.2.1(2021 年 6 月发布)

  1. 安装可执行文件docker-compose

    curl -sL -o ~/docker-compose https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)
    chmod 755 ~/docker-compose
    

    或者,您也可以在容器映像中运行 docker-compose(见下文)。

  2. 运行

    systemctl --user start podman.socket
    
  3. 设置环境变量DOCKER_HOST

    export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock
    
  4. 运行

    ~/docker-compose up -d
    

以 Podman 为 root 运行 docker-compose

要求:Podman 版本 >= 3.0(2021 年 2 月发布)

按照相同的过程,但删除标志--user

systemctl start podman.socket

在容器镜像中运行 docker-compose

使用容器镜像docker.io/docker/compose运行 docker-compose

podman \
 run \
  --rm \
  --detach \
  --env DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock \
  --security-opt label=disable \
  --volume $XDG_RUNTIME_DIR/podman/podman.sock:$XDG_RUNTIME_DIR/podman/podman.sock \
  --volume $(pwd):$(pwd) \
  --workdir $(pwd) \
  docker.io/docker/compose \
   --verbose \
   up -d

(标志--verbose 是可选的)

同一命令在一行中带有简短的命令行选项:

podman run --rm -d -e DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock --security-opt label=disable -v $XDG_RUNTIME_DIR/podman/podman.sock:$XDG_RUNTIME_DIR/podman/podman.sock -v $(pwd):$(pwd) -w $(pwd) docker.io/docker/compose --verbose up -d

关于 SELINUX:从安全的角度来看,最好使用 SELINUX 运行 Podman,但我没有让它在 Fedora 34 计算机上工作,所以我通过添加命令禁用了 SELINUX -line 选项

--security-opt label=disable

疑难解答提示

测试 Docker REST API

检查 Docker REST API 是否正常工作:

$ curl -H "Content-Type: application/json" \
    --unix-socket $XDG_RUNTIME_DIR/podman/podman.sock \
    http://localhost/_ping
OK$

避免使用短容器图像名称

如果您的任何 docker-compose.yamlDockerfile 文件包含一个简短的容器映像名称,例如

$ grep image: docker-compose.yaml
    image: mysql:8.0.19
$
$ grep FROM Dockerfile
FROM python:3.9
$

编辑文件以改用整个容器映像名称

$ grep image: docker-compose.yaml
    image: docker.io/library/mysql:8.0.19
$
$ grep FROM Dockerfile
FROM docker.io/library/python:3.9
$

通常使用短名称来引用DockerHub Official Imagescatalogue)所以一个很好的猜测是在容器镜像名称前加上docker.io/library/

目前有许多不同的容器镜像注册表,不仅仅是 DockerHub (docker.io)。因此,编写整个容器映像名称是一个好习惯。 Podman 可能会抱怨,这取决于 Podman 的配置方式。

无根用户无法绑定1024以下的端口

例如

$ grep -A1 ports: docker-compose.yml
    ports:
      - 80:80
$

编辑 docker-compose.yaml 使主机端口号 >= 1024,例如 8080

$ grep -A1 ports: docker-compose.yml
    ports:
      - 8080:80
$

另一种解决方案是使用sysctl 调整net.ipv4.ip_unprivileged_port_start(参见Shortcomings of Rootless Podman

万一缺少 Systemd

大多数 Linux 发行版使用 Systemd,您最好通过“启动”Podman 套接字来启动 Podman 服务(提供 REST API)

systemctl --user start podman.socket

systemctl start podman.socket

但如果缺少 Systemd,您也可以直接启动 Podman 服务

podman system service --time 0 unix:/some/path/podman.sock

Systemd 提供了额外的好处,即 Podman 服务通过 Systemd 套接字激活按需启动,并在一段时间不活动后停止。

警告:缺少 Swarm 功能

与 Docker 的不同之处在于,在将 docker-compose 与 Podman 一起使用时,不支持与 Swarm 相关的功能。

参考资料:

【讨论】:

  • 感谢您改进答案。生产就绪时何时可以更新
  • 好吧,我认为需要以 root 模式运行 podman 以支持 docker-compose 是一个缺点。为什么 redhat 没有继续投资 podman-compose?
【解决方案3】:
  1. 确保您的计算机上安装了 Podman。
  2. 您可以使用以下命令在终端中安装 Podman Compose:
pip3 install https://github.com/containers/podman-compose/archive/devel.tar.gz
  1. cd 进入你的 docker-compose 文件所在的目录
  2. 运行podman-compose up

请参阅下面的link 以获得体面的介绍。

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 2021-12-13
    • 2020-09-09
    • 2021-10-01
    • 2020-07-18
    • 2016-12-08
    • 2019-11-15
    • 2023-01-31
    • 2022-12-20
    相关资源
    最近更新 更多