当前位置: 首页 > news >正文

什么是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 单元文件管理。

http://www.dtcms.com/a/274072.html

相关文章:

  • dockerfile 笔记
  • STM32-DAC数模转换
  • 将英语转化为语音 英文转音频 英语转语音朗读
  • 嵌入式八股文之 GPIO
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (三)RISC-V架构深度解剖(下)
  • FPGA实现SDI转LVDS视频发送,基于GTX+OSERDES2原语架构,提供2套工程源码和技术支持
  • Spring注解IoC与JUnit整合实战
  • MyBatis-Plus通用中等、大量数据分批查询和处理
  • 蔚来测开一面:HashMap从1.7开始到1.8的过程,既然都解决不了并发安全问题,为什么还要进一步解决环形链表的问题?
  • XPath 语法【Web 自动化-定位方法】
  • [java][springboot]@PostConstruct的介绍和用法
  • 机器学习基础知识【 激活函数、损失函数、优化器、 正则化、调度器、指标函数】
  • AI加持的开源知识库新秀:PandaWiki,如何用它打造智能化文档系统?
  • 「日拱一码」024 机器学习——防止过拟合
  • 【yolo】模型训练参数解读
  • 哪个ai写论文比较好?实测推荐这6大AI论文写作神器
  • CCF-GESP 等级考试 2025年6月认证C++五级真题解析
  • 2025年值得推荐的5款 AI赋能企业级项目管理软件工具大盘点!
  • Linux:多线程---同步生产者消费者模型
  • 【尝试】基于YoloV8做安全帽识别
  • 12. 说一下 https 的加密过程
  • 2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛-B题 疾病的预测与大数据分析
  • CCN-508 规范
  • Web 网站性能优化之 Nginx 优化指南
  • 提示工程:突破Transformer极限的计算科学
  • S7-1200 系列 PLC 中 SCL 语言的 PEEK 和 POKE 指令使用详解
  • IDE 关联 Git 操作
  • Java使用OSHI获取服务器信息
  • 如何在报表开发工具FastReport .NET 中构建和连接 Firebird 插件?
  • SpringBoot JWT