跳到主要内容

Podman 使用交接

PODMAN logo

运维交接

本文档概述了与使用 Podman 的基础设施相关的运维和开发交接时的有用信息。

概述

Podman 是一个用于管理 Pods、容器和容器镜像的工具。Podman 的 CLI 基于 Docker CLI,但 Podman 不需要运行守护进程即可工作。此外,Podman 还通过 Podman 套接字激活的系统服务支持 Docker API。

系统工具

许多传统的工具仍然非常有用,如 pstreensenterlsns。同样,一些 systemd 辅助工具,如 systemd-cglssystemd-cgtop,也仍然适用。

等价物

对于许多故障排除和信息收集步骤,可能存在现有的模式。以下提供了使用 Podman 工具收集信息或进入容器的等价方法,以供运维使用:

Docker 命令等价物

Docker 命令Podman 等价物描述
docker pspodman ps列出正在运行的容器
docker imagespodman images列出可用的容器镜像
docker inspect <container>podman inspect <container>获取容器的详细信息
docker exec -it <container> <command>podman exec -it <container> <command>在正在运行的容器中执行命令
docker logs <container>podman logs <container>获取容器的日志
dockercontainer>停止容器
docker start <container>podman start <container>启动已停止的容器

docker rm < Docker 中,经常使用 ``docker exec -it /bin/bash 来进入正在运行的容器。在 Podman 中,这个命令是完全相同的:

podman exec -it <container> /bin/bash

或者使用其他 shell,例如 /bin/sh

podman exec -it <container> /bin/sh

系统服务和日志

Podman 可以通过系统服务来运行,这意味着你可以使用 systemctl 来管理它,以及使用 journalctl 来查看相关的日志:

systemctl status podman.socket
journalctl -u podman.socket

开发交接

对于开发者来说,了解如何在他们的开发环境中使用 Podman,以及如何在他们的 CI/CD 管道中集成 Podman,是至关重要的。这可能包括:

  • 设置 Podman 作为本地容器运行时。
  • 编写使用 Podman 的脚本或自动化测试。
  • 了解如何在持续集成/持续部署 (CI/CD) 环境中使用 Podman。

开发者可能还需要了解 Podman 的配置文件位置(通常是 ~/.config/containers/libpod.conf),以及如何自定义这些配置以满足特定需求。

此外,开发者还应该了解 Podman 支持的高级功能,如卷管理、网络配置、安全特性(如 SELinux 集成)以及与其他容器运行时(如 Docker)的兼容性。

在交接过程中,确保提供足够的文档和示例,以帮助开发者快速上手 Podman,并理解如何在他们的项目中使用它。

最后,考虑建立一个支持渠道(如邮件列表、Slack 频道或内部论坛),以便开发者和运维人员可以在需要时寻求帮助或分享经验。

开发交接

除了上述工具外,还有以下一些等价工具或步骤:

现有步骤Podman(及相关工具)
dockerpodman
docker attachpodman attach
docker auto-updatepodman auto-update
docker buildpodman build
docker commitpodman commit
docker containerpodman container
docker container prunepodman container prune
docker cppodman cp
docker createpodman create
docker diffpodman diff
docker eventspodman events
docker execpodman exec
docker exportpodman export
docker historypodman history
docker imagepodman image
docker imagespodman images
docker importpodman import
docker infopodman info
docker inspectpodman inspect
docker killpodman kill
docker loadpodman load
docker loginpodman login
docker logoutpodman logout
docker logspodman logs
docker manifest podman manifest
docker manifest annotatepodman manifest annotate
docker manifest createpodman manifest create
docker manifest inspectpodman manifest inspect
docker manifest pushpodman manifest push
docker manifest rmpodman manifest rm
docker network podman network
docker network connectpodman network connect
docker network createpodman network create
docker network disconnectpodman network disconnect
docker network inspectpodman network inspect
docker network lspodman network ls
docker network rmpodman network rm
docker pausepodman pause
docker portpodman port
docker pspodman ps
docker pullpodman pull
docker pushpodman push
docker renamepodman rename
docker restartpodman restart
docker rmpodman rm
docker rmipodman rmi
docker runpodman run
docker savepodman save
docker searchpodman search
docker secret podman secret
docker secret createpodman secret
docker secret inspectpodman secret
docker secret lspodman secret
docker secret rmpodman secret
docker servicepodman service
docker startpodman start
docker statspodman stats
docker stoppodman stop
docker system podman system
docker system dfpodman system df
docker system eventspodman system events
docker system infopodman system info
docker system prunepodman system prune
docker tagpodman tag
docker toppodman top
docker unpausepodman unpause
docker versionpodman version
docker volume podman volume
docker volume createpodman volume create
docker volume inspectpodman volume inspect
docker volume lspodman volume ls
docker volume prunepodman volume prune
docker volume rmpodman volume rm
docker waitpodman wait

在开发交接过程中,确保开发人员熟悉这些 Podman 命令,并了解如何在他们的开发环境中使用这些命令。这将有助于他们顺利地进行容器管理和操作,以及在需要时与运维团队合作解决问题。此外,还建议为开发人员提供相关的文档和示例,以便他们能够快速上手并有效地使用 Podman 工具集。

行为差异与陷阱

这些命令的行为与 Docker 中的命令有所不同:

命令描述
podman volume createdocker volume create 不同,podman volume create 在卷已存在时会产生错误,而不是像 Docker 那样是幂等的。有关更多信息,请参阅此 Docker 问题
podman run -v /tmp/noexist:/tmp ...当使用 docker run -v /tmp/noexist:/tmp 时,如果主机上不存在该卷,Docker 会自动创建它。然而,Podman 会报告该卷不存在。Podman 团队认为这是 Docker 的一个错误。

Podman 中缺少的命令

以下 Docker 命令目前在 podman 中没有等价物:

缺少的命令描述
docker builderPodman 不支持此功能。
docker buildxPodman 不支持此功能。
docker configPodman 不支持此功能。
docker contextPodman 不支持此功能。
docker container updatePodman 不支持在运行时更改容器。我们建议您使用正确的参数重新创建容器。
docker nodePodman 不支持 Swarm 功能,因此也不支持此命令。
docker pluginPodman 不支持插件。我们建议您使用其他 OCI 运行时或 OCI 运行时钩子来更改 Podman 的行为。
docker stackPodman 不支持此功能。
docker swarmPodman 不支持 Swarm 功能。对于编排,我们推荐使用 CRI-O 支持的 Kubernetes。
docker trustPodman 中有对应的命令:podman image trust
docker updatePodman 不支持此功能。

请注意,Podman 旨在作为一个轻量级的、无守护进程的容器引擎,因此它可能不会包含 Docker 的所有功能。在决定使用 Podman 还是 Docker 时,请根据您的具体需求进行评估。

Docker 中缺少的命令

以下 podman 命令在 Docker 中没有对应的等效项:

这些命令全面涵盖了 Podman 的多个关键领域,包括 Pod 管理、网络配置、卷操作、镜像维护、容器控制以及系统级别的设置。通过执行这些命令,用户能够高效地管理容器化应用程序及其相关资源,从而充分发挥 Podman 的优势。此外,这些命令还凸显了 Podman 相较于 Docker 的一些独特功能和扩展性,特别是在远程虚拟机和镜像管理方面。当需要在轻量级环境中无守护进程地管理容器时,Podman 提供了丰富而实用的工具集。然而,也需注意,Docker 和 Podman 在设计理念和目标上各有侧重,因此并非所有功能都能在两者间找到直接的对应关系。