Podman
Manage containers, pods, and images with Podman. Seamlessly work with containers and Kubernetes from your local environment.
什么是Podman
Podman(POD Manager)开源的 无守护进程(daemonless)容器引擎,用于管理容器、容器镜像、容器卷和网络。
兼容 OCI 标准,可以运行 Docker 镜像,并且设计上与 Docker CLI 命令高度兼容。 https://podman.io/docs/installation
Daemonless进程,更轻
Podman 使用 RunC(或其他符合 OCI 的运行时)来创建和运行容器。每个容器都是当前用户的一个子进程。
基于 Daemonless 能够提供更安全(减少攻击面)、更稳定(守护进程崩溃不影响现有容器)、资源消耗更低、更符合 Linux 进程模型。
Rootless容器,更安全
普通用户无需 sudo 或 root 权限即可直接启动和管理容器。
极大提升安全性(容器进程以用户权限运行,即使容器被攻破,影响范围也限于该用户)、满足更严格的安全合规要求、允许多用户在同一系统上安全地管理各自的容器。
基于标准设计,兼容好
Podman 支持 OCI 标准,且与 Docker 兼容,大部分命令与 Docker 命令相同。Docker 用户迁移成本小 现有脚本通常只需替换命令即可工作。
Kubernetes Pod 原生支持:
Podman 对 Kubernetes 的 Pod 概念有原生支持。轻松创建和管理包含多个共享命名空间(网络、IPC、UTS)容器的 Pod
创建、启动、检查和管理Pod
直接使用Podman操作Kubernetes YAML,从Pod生成Kubernetes YAML,并部署到现有的Kubernetes环境中。
Podman 安装
在 Window和 MacOS 上安装 Podman
容器是基于 Linux 内核 在 Window 和 MacOS 上运行容器时需要用到虚拟机 Podman Machine 虚拟机
MacOS 上安装 Podman
brew install podman
podman info
podman machine init
podman machine start
podman machine ls
podman run hello-worldWindows 每台 Podman 机器都由一个虚拟化的Windows Subsystem for Linux(WSLv2)发行版提供支持
Windows PowerShell(或CMD)提示符运行podman命令,该命令会与在WSL环境中运行的podman服务进行远程通信。
也可以直接从WSL实例访问Podman
Podman Desktop 作为图形界面工具,
在 Linux 上安装 Podman
Linux 上安装 Podman 的最简单方法是使用包管理器。
# Arch Linux & Manjaro Linux
sudo pacman -S podman
# Alpine Linux
sudo apk add podman
# CentOS Stream/Fedora
sudo dnf -y install podman
# Debian/Ubuntu
sudo apt-get -y install podman
# Gentoo
sudo emerge app-containers/podman
# openSUSE
sudo zypper install podmanPodman 使用
podman 命令和 docker 命令基本一样,设置一个简单的别名 alias docker=podman 就能无缝切换。
查找镜像
Podman会在不同的镜像仓库中搜索。
podman search httpd --filter=is-official拉取镜像
建议使用完整的镜像名称(如http://docker.io/library/httpd,而不是httpd),以确保您使用的是正确的镜像。
podman pull docker.io/library/httpd运行一个容器
示例容器将运行一个基础的httpd服务器
podman run -dt -p 8080:80/tcp docker.io/library/httpd容器是在分离模式-d下运行的,Podman将在执行命令后打印出容器ID。
-t 选项还会添加一个伪终端,以便在交互式shell中运行任意命令。
-p 添加一个端口映射,将 httpd 的 80 端口映射到主机的8080端口。
查看容器状态
podman ps命令用于列出已创建和正在运行的容器。
podman ps-a 参数,Podman 将显示所有容器,包括已创建、已退出、正在运行等。
测试httpd服务
通过端口映射,httpd 服务的 80 端口映射到宿主机的 8080 端口。
curl http://localhost:8080其他命令
其他如 podman logs 、podman inspect、 podman stop、podman rm 、podman images 和 docker 的命令一致,可以查看详细的 podman 或 docker 的命令行文档。
Podman和Docker生态对比
对比项目 | Docker | Podman |
Daemonless | dockerd | 无 |
Rootless | 需要特殊配置 | 默认rootless |
Machine | Docker Machine | Podman Machine |
Compose | Docker Compose | Podman Compose |
Desktop | Docker Desktop | Podman Desktop |
Dockerfile | Dockerfile | Containerfile |
Podman 和 Docker 该如何选?
对安全是否有更高的要求,推荐 Podman
Podman 是开源的,由CNCF社区托管。避免了单一厂商的锁定。
Podman 默认是 Rootless。业务逻辑运行在容器内,避免了越权问题。
Podman 默认不运行后台进程。减少容器运行时消耗的资源,以及安全攻击面。
如果对产品成熟度和生态完善性有更高的要求,推荐 Docker
当前很多DevOps工具默认集成了 Docker。如 Jenkines、ArgoCD等
Podman 还处于 CNCF 的沙盒阶段,距离孵化和毕业还需要很长一段时间。
Podman 功能上大部分兼容 Docker,但任然有一些功能还未完全兼容,如不支持 Docker 的
--restart=always(依赖守护进程实现容器自启),Podman 需通过 Systemd 单元文件管理。