什么是Podman?能否替代Docker?Podman快速入门

什么是Podman

Podman(POD Manager)是一个开源的无守护进程(daemonless)容器引擎,用于管理容器、容器镜像、容器卷和网络。

它兼容 OCI 标准,可以运行 Docker 镜像,并且设计上与 Docker CLI 命令高度兼容。

podman logo

Podman 的特点与优势

  • Daemonless进程,更轻

Podman 直接使用 RunC(或其他符合 OCI 的运行时)来创建和运行容器。每个容器都是当前用户的一个子进程。

基于 Daemonless 能够提供更安全(减少攻击面)、更稳定(守护进程崩溃不影响现有容器)、资源消耗更低、更符合 Linux 进程模型。

对比 Docker,依赖于一个长期运行的后台进程 (dockerd) 来管理容器。

  • Rootless容器,更安全

普通用户无需 sudo 或 root 权限即可直接启动和管理容器。

极大提升安全性(容器进程以用户权限运行,即使容器被攻破,影响范围也限于该用户)、满足更严格的安全合规要求、允许多用户在同一系统上安全地管理各自的容器。

对比 Docker,目前也支持 Rootless 容器,但需要进行特殊配置,且默认任然需要 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 内核的,因此和 Docker 一样,在 Window 和 MacOS 上运行容器时需要用到虚拟机。

和 Docker Machine 一样,Podman 也有 Podman Machine 虚拟机。

如在 MacOS 上安装 Podman

brew install podman
podman info
podman machine init
podman machine start
podman machine ls
podman run hello-world

在 Windows上,每台 Podman 机器都由一个虚拟化的Windows Subsystem for Linux(WSLv2)发行版提供支持。

安装后,可以直接从 Windows PowerShell(或CMD)提示符运行podman命令,该命令会与在WSL环境中运行的podman服务进行远程通信。

或者,如果您更喜欢Linux提示符和Linux工具,也可以直接从WSL实例访问Podman。

除了直接使用 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 podman

Podman 使用

podman 命令和 docker 命令基本一样,设置一个简单的别名 alias docker=podman 就能无缝切换。

  • 查找镜像

Podman会在不同的镜像仓库中搜索。

podman search httpd --filter=is-official
  • 拉取镜像

建议使用完整的镜像名称(如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 stoppodman rm 、podman images 和 docker 的命令一致,可以查看详细的 podman 或 docker 的命令行文档。

Podman和Docker生态对比

对比项目DockerPodman
Daemonlessdockerd
Rootless需要特殊配置默认rootless
MachineDocker MachinePodman Machine
ComposeDocker ComposePodman Compose
DesktopDocker DesktopPodman Desktop
DockerfileDockerfileContainerfile

Podman 和 Docker 该如何选?

如果对安全是否有更高的要求,推荐 Podman

  • Podman 是开源的,由CNCF社区托管。避免了单一厂商的锁定。
  • Podman 默认是 Rootless。业务逻辑运行在容器内,避免了越权问题。
  • Podman 默认不运行后台进程。减少容器运行时消耗的资源,以及安全攻击面。

如果对产品成熟度和生态完善性有更高的要求,推荐 Docker

  • 当前很多DevOps工具默认集成了 Docker。如 Jenkines、ArgoCD等
  • Podman 还处于 CNCF 的沙盒阶段,距离孵化和毕业还需要很长一段时间。
  • Podman 功能上大部分兼容 Docker,但任然有一些功能还未完全兼容,如不支持 Docker 的 --restart=always(依赖守护进程实现容器自启),Podman 需通过 Systemd 单元文件管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值