Podman 使用交接
运维交接
本文档概述了与使用 Podman
的基础设施相关的运维和开发交接时的有用信息。
概述
Podman 是一个用于管理 Pods、容器和容器镜像的工具。Podman 的 CLI 基于 Docker CLI,但 Podman 不需要运行守护进程即可工作。此外,Podman 还通过 Podman 套接字激活的系统服务支持 Docker API。
系统工具
许多传统的工具仍然非常有用,如 pstree
、nsenter
和 lsns
。同样,一些 systemd 辅助工具,如 systemd-cgls
和 systemd-cgtop
,也仍然适用。
等价物
对于许多故障排除和信息收集步骤,可能存在现有的模式。以下提供了使用 Podman
工具收集信息或进入容器的等价方法,以供运维使用:
Docker 命令等价物
Docker 命令 | Podman 等价物 | 描述 |
---|---|---|
docker ps | podman ps | 列出正在运行的容器 |
docker images | podman 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(及相关工具) |
---|---|
docker | podman |
docker attach | podman attach |
docker auto-update | podman auto-update |
docker build | podman build |
docker commit | podman commit |
docker container | podman container |
docker container prune | podman container prune |
docker cp | podman cp |
docker create | podman create |
docker diff | podman diff |
docker events | podman events |
docker exec | podman exec |
docker export | podman export |
docker history | podman history |
docker image | podman image |
docker images | podman images |
docker import | podman import |
docker info | podman info |
docker inspect | podman inspect |
docker kill | podman kill |
docker load | podman load |
docker login | podman login |
docker logout | podman logout |
docker logs | podman logs |
docker manifest | podman manifest |
docker manifest annotate | podman manifest annotate |
docker manifest create | podman manifest create |
docker manifest inspect | podman manifest inspect |
docker manifest push | podman manifest push |
docker manifest rm | podman manifest rm |
docker network | podman network |
docker network connect | podman network connect |
docker network create | podman network create |
docker network disconnect | podman network disconnect |
docker network inspect | podman network inspect |
docker network ls | podman network ls |
docker network rm | podman network rm |
docker pause | podman pause |
docker port | podman port |
docker ps | podman ps |
docker pull | podman pull |
docker push | podman push |
docker rename | podman rename |
docker restart | podman restart |
docker rm | podman rm |
docker rmi | podman rmi |
docker run | podman run |
docker save | podman save |
docker search | podman search |
docker secret | podman secret |
docker secret create | podman secret |
docker secret inspect | podman secret |
docker secret ls | podman secret |
docker secret rm | podman secret |
docker service | podman service |
docker start | podman start |
docker stats | podman stats |
docker stop | podman stop |
docker system | podman system |
docker system df | podman system df |
docker system events | podman system events |
docker system info | podman system info |
docker system prune | podman system prune |
docker tag | podman tag |
docker top | podman top |
docker unpause | podman unpause |
docker version | podman version |
docker volume | podman volume |
docker volume create | podman volume create |
docker volume inspect | podman volume inspect |
docker volume ls | podman volume ls |
docker volume prune | podman volume prune |
docker volume rm | podman volume rm |
docker wait | podman wait |
在开发交接过程中,确保开发人员熟悉这些 Podman 命令,并了解如何在他们的开发环境中使用这些命令。这将有助于他们顺利地进行容器管理和操作,以及在需要时与运维团队合作解决问题。此外,还建议为开发人员提供相关的文档和示例,以便他们能够快速上手并有效地使用 Podman 工具集。
行为差异与陷阱
这些命令的行为与 Docker 中的命令有所不同:
命令 | 描述 |
---|---|
podman volume create | 与 docker 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 builder | Podman 不支持此功能。 |
docker buildx | Podman 不支持此功能。 |
docker config | Podman 不支持此功能。 |
docker context | Podman 不支持此功能。 |
docker container update | Podman 不支持在运行时更改容器。我们建议您使用正确的参数重新创建容器。 |
docker node | Podman 不支持 Swarm 功能,因此也不支持此命令。 |
docker plugin | Podman 不支持插件。我们建议您使用其他 OCI 运行时或 OCI 运行时钩子来更改 Podman 的行为。 |
docker stack | Podman 不支持此功能。 |
docker swarm | Podman 不支持 Swarm 功能。对于编排,我们推荐使用 CRI-O 支持的 Kubernetes。 |
docker trust | Podman 中有对应的命令:podman image trust |
docker update | Podman 不支持此功能。 |
请注意,Podman 旨在作为一个轻量级的、无守护进程的容器引擎,因此它可能不会包含 Docker 的所有功能。在决定使用 Podman 还是 Docker 时,请根据您的具体需求进行评估。
Docker 中缺少的命令
以下 podman
命令在 Docker 中没有对应的等效项:
podman container checkpoint
- 用于对容器进行检查点操作,以保存容器的状态。podman container cleanup
- 清理不再使用的容器资源。podman container exists
- 检查容器是否存在。podman container refresh
- 刷新容器的状态信息。podman container restore
- 从之前保存的检查点恢复容器的状态。podman container runlabel
- 显示或修改容器的运行标签。podman generate
- 生成各种资源文件,如 Kubernetes YAML 或 systemd 服务单元。podman generate kube
- 生成 Kubernetes YAML 文件以描述容器或镜像。podman generate systemd
- 生成 systemd 服务单元文件以管理容器。podman healthcheck
- 管理容器的健康检查设置。podman healthcheck run
- 手动运行容器的健康检查。podman image diff
- 显示两个镜像之间的差异。podman image exists
- 检查镜像是否存在。podman image mount
- 挂载镜像的文件系统。podman image prune
- 删除未使用的镜像。podman image sign
- 对镜像进行签名。podman image tree
- 显示镜像的层结构。podman image trust
- 管理镜像的信任策略。podman image unmount
- 卸载之前挂载的镜像文件系统。podman init
- 运行一个 init 系统以管理容器进程。podman machine
- 管理远程虚拟机上的 Podman 实例。podman machine init
- 初始化 Podman 机器。podman machine list
- 列出所有 Podman 机器。podman machine rm
- 删除 Podman 机器。podman machine ssh
- 通过 SSH 连接到 Podman 机器。podman machine start
- 启动 Podman 机器。podman machine stop
- 停止 Podman 机器podman manifest add
- 添加镜像清单podman manifest exists
- 检查镜像清单是否存在podman manifest remove
- 移除镜像清单podman mount
- 挂载容器或镜像的文件系统podman network exists
- 检查网络是否存在podman network prune
- 清除未使用的网络podman network reload
- 重新加载网络配置podman play
- 使用 Kubernetes YAML 文件或容器配置运行容器podman play kube
- 使用 Kubernetes YAML 文件运行容器podman pod
- 管理 Podpodman pod create
- 创建 Podpodman pod exists
- 检查 Pod 是否存在podman pod inspect
- 显示 Pod 的详细信息podman pod kill
- 终止 Pod 中的容器podman pod pause
- 暂停 Pod 中的容器podman pod prune
- 清除未使用的 Podpodman pod ps
- 列出 Pod 中的容器podman pod restart
- 重启 Pod 中的容器podman pod rm
- 删除 Podpodman pod start
- 启动 Pod 中的容器podman pod stats
- 显示 Pod 中容器的统计信息podman pod stop
- 停止 Pod 中的容器podman pod top
- 显示 Pod 中容器的进程信息podman pod unpause
- 恢复 Pod 中容器的执行podman system connection
- 管理 Podman 系统连接podman system connection add
- 添加 Podman 系统连接podman system connection default
- 设置默认 Podman 系统连接podman system connection list
- 列出 Podman 系统连接podman system connection remove
- 删除 Podman 系统连接podman system connection rename
- 重命名 Podman 系统连接podman system migrate
- 迁移 Podman 容器和镜像podman system renumber
- 重新编号 Podman 容器podman system reset
- 重置 Podman 系统状态podman system service
- 管理 Podman 系统服务podman unmount
- 卸载容器或镜像的文件系统podman unshare
- 停止共享命名空间podman untag
- 从镜像中移除标签podman volume exists
- 检查卷是否存在
这些命令全面涵盖了 Podman 的多个关键领域,包括 Pod 管理、网络配置、卷操作、镜像维护、容器控制以及系统级别的设置。通过执行这些命令,用户能够高效地管理容器化应用程序及其相关资源,从而充分发挥 Podman 的优势。此外,这些命令还凸显了 Podman 相较于 Docker 的一些独特功能和扩展性,特别是在远程虚拟机和镜像管理方面。当需要在轻量级环境中无守护进程地管理容器时,Podman 提供了丰富而实用的工具集。然而,也需注意,Docker 和 Podman 在设计理念和目标上各有侧重,因此并非所有功能都能在两者间找到直接的对应关系。