Podman 是一款容器管理工具,与 Docker 类似,可以创建、运行和管理容器化的应用程序。Podman 的全称是 “Pod Manager”,设计目标是成为一种无守护进程的容器引擎,提供与 Docker 类似的 CLI 接口,并且兼容大多数 Docker 命令。
1. Podman 的主要特点和优点
无守护进程架构
Podman 与 Docker 的一个关键区别是它没有像 Docker 那样依赖于一个守护进程(dockerd
)。Podman 不需要运行一个长期运行的后台服务来管理容器,这意味着每个容器进程可以直接在用户环境下运行,而不是通过 root 权限运行的后台守护进程。这使得 Podman 的安全性更强,因为它可以以非 root 用户身份运行容器。
Docker 兼容性
Podman 在很大程度上兼容 Docker 的命令行工具和镜像格式,可以使用 podman pull
、podman run
等命令,它们的使用方式与 Docker 基本一致。
Pod 概念
Podman 引入了 "Pod" 的概念,与 Kubernetes 的 Pod 概念一致。一个 Pod 是一组共享相同网络命名空间的容器,这使得 Podman 非常适合与 Kubernetes 集成,每个 Pod 可以包含多个容器,这些容器共享 IP 地址和网络栈。
Rootless 容器
Podman 提供了强大的“rootless”模式,允许用户以非 root 权限运行容器,这增强了系统的安全性。传统的 Docker 需要 root 权限来运行,这可能带来安全隐患,而 Podman 解决了这一问题。
兼容 OCI 标准
Podman 完全兼容 OCI(Open Container Initiative) 标准,可以使用符合 OCI 标准的容器镜像和运行时,增加了灵活性和可移植性。
无缝切换到 Kubernetes
Podman 允许将容器或 Pod 直接导出为 Kubernetes 的 YAML 配置文件,非常适合开发人员将容器应用程序迁移到 Kubernetes 生产环境。
2. 常用 Podman 命令
镜像相关命令
-
podman pull [镜像名]:
从远程容器镜像仓库拉取镜像 -
podman images:
列出本地所有容器镜像 -
podman rmi [镜像ID]:
删除本地的镜像 -
podman inspect [镜像名或ID]:
查看指定镜像的详细信息 -
podman tag [源镜像名] [目标镜像名]:
为镜像打标签 -
podman push [镜像名] [目标仓库]:
将本地镜像推送到远程镜像仓库
容器相关命令
-
podman run [选项] [镜像名] [命令]:
基于镜像创建并运行一个容器-
常用选项:
-d
:后台运行容器-p [主机端口]:[容器端口]
:映射端口-v [主机路径]:[容器路径]
:挂载卷
-
-
podman ps:
列出正在运行的容器(类似于docker ps
) -
podman ps -a:
列出所有容器,包括停止的 -
podman stop [容器ID或名称]:
停止一个正在运行的容器 -
podman start [容器ID或名称]:
启动一个已经停止的容器 -
podman restart [容器ID或名称]:
重启容器 -
podman rm [容器ID或名称]:
删除一个停止的容器 -
podman exec -it [容器ID或名称] [命令]:
在正在运行的容器中执行命令 -
podman logs [容器ID或名称]:
查看容器的日志 -
podman inspect [容器ID或名称]:
查看容器的详细信息(如网络、挂载卷等) -
podman top [容器ID或名称]:
显示容器中的运行进程 -
podman commit [容器ID或名称] [新镜像名]:
将容器的更改保存为一个新的镜像
Pod 相关命令
-
podman pod create [选项]:
创建一个 Pod,可以将多个容器放入同一个 Pod 中,共享网络和存储 -
podman pod ps:
列出正在运行的 Pod -
podman pod stop [PodID或名称]:
停止 Pod 中的所有容器 -
podman pod rm [PodID或名称]:
删除一个 Pod 及其所有容器
其他常用命令
-
podman stats:
实时查看容器的资源使用情况(类似于 Docker 的docker stats
) -
podman version:
查看 Podman 的版本信息 -
podman info:
查看 Podman 的系统级别信息,如存储驱动、网络配置等 -
podman system prune:
清理未使用的镜像、容器、网络等