什么是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.pswp.cn/diannao/91314.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开通保存图片权限

直接粘贴就可以用 上干货 可以的话希望点个start/* 小程序特有相关 */mp-weixin: {appid: VITE_WX_APPID,setting: {urlCheck: false,minified : true //是否压缩js},usingComponents: true,"lazyCodeLoading": "requiredComponents", //按需注入"pe…

【赵渝强老师】大数据交换引擎Sqoop

Sqoop是SQL To Hadoop的简称,它是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(Oracle、MySQL等)间进行数据的传递。通过使用Sqoop可以将一个关系型数据库中的数据导进到Hadoop的HDFS中&#xff0…

C++进阶-map的应用

目录 1.预备知识 2.map的补充知识 2.1map的插入方式 2.2访问键和值 2.3map::operator[]的补充 2.4另外一些map的成员函数的补充 3.map的应用实践-力扣刷题-前k个高频单词 3.1解法1 3.2解法2 3.3解法3 4.map的应用实践-力扣刷题-随机链表的复制 4.1C语言解法 4.2C解…

【三维重建工具】NeRFStudio、3D GaussianSplatting、Colmap安装与使用指南

目录 一、NeRFStudio安装1.安装(ubuntu系统)2.安装(windows系统) 二、安装tinycudann三、Colmap安装与使用1. 安装依赖2. 安装colmap3.使用colmap3.1 可视化界面使用3.2 Nerfstudio命令行调用Colmap3.3 colmap结果不准时的修复3.4…

Mybatis05-动态sql

一、应用场景MyBatis 的 动态 SQL 是指根据不同的条件动态拼接生成 SQL 语句的能力。它的最大优势是:避免写多个 XML 映射语句、避免 SQL 冗余、提升代码复用性和可维护性。示例1:用户可以通过勾选框,勾选不同的数据进行批量删除,…

VSCODE 选中多行 需要同时按住alt键才可以

在 VS Code 中,如果你发现 必须按住 Alt 键才能选中多行(即“列选择”或“块选择”模式),而直接拖动鼠标无法多选,可能是由于以下原因导致的:1. 检查是否启用了“列选择模式”VS Code 默认情况下&#xff1…

2025前端面试真题以及答案-不断整理中,问题来源于牛客真题

一、 项目内存泄露react与vue的渲染机制有哪些不同react fiber架构vue2与3,为什么用proxy代替defineproperty性能优化有哪些三栏布局实现方式重排与重绘一个对话聊天框如何减少重排(我回答的是绝对定位,将聊天框定位在下面,类似于…

雷军的 IP 革命:人格化力量如何重塑商业规则|创客匠人

小米 YU7 发布会 3 分钟售罄 20 万台的奇迹,撕开了一个时代真相:当商业竞争进入深水区,决定胜负的不再是产品参数,而是创始人 IP 的人格穿透力。雷军仅凭个人影响力撬动数十亿级交易,这绝非偶然,而是人格化…

SpringBoot3:应对C10K并发挑战的优化指南

嘿,哥们!还在为服务的并发量上不去而头疼吗?用户量一上来,CPU、内存就告急,接口响应慢得像蜗牛?别慌,今天我们就来盘一盘,怎么用最新的Spring Boot 3,把服务性能调教到极…

响应式编程入门教程第三节:ReactiveCommand 与 UI 交互

响应式编程入门教程第一节:揭秘 UniRx 核心 - ReactiveProperty - 让你的数据动起来! 响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法 响应式编程入门教程第三节&#x…

500+技术栈覆盖:Web测试平台TestComplete的对象识别技术解析

在用户界面(UI)测试领域,传统的测试工具往往依赖于XPath或CSS选择器来定位页面元素。然而,在面对动态变化的界面、多语言支持或是跨越多种技术框架的应用时,这些传统方法常导致脚本失效,增加了维护成本。 …

研究人员利用提示注入漏洞绕过Meta的Llama防火墙防护

Trendyol应用安全团队发现了一系列绕过技术,使得Meta的Llama防火墙在面对复杂的提示注入攻击时防护失效。这一发现引发了人们对现有大语言模型(LLM)安全措施准备情况的担忧,并凸显出在企业日益将大语言模型嵌入工作流程时&#xf…

Shell 脚本系统学习 · 第5篇:多命令顺序执行的三种方式详解(`;`、``、`||`)

在日常的 Linux 运维与脚本编写中,我们经常需要依次执行多条命令。本篇将带你彻底搞懂三种命令顺序执行方式:;、&& 和 ||,并通过实用示例掌握它们的区别与应用场景。一、为什么要了解多命令执行方式? 在实际运维或脚本编写…

K8s存储系统(通俗易懂版)

Kubernetes中存储中有四个重要的概念:Volume、PersistentVolume PV、PersistentVolumeClaim PVC、StorageClass一、存储系统核心概念Volume(卷)定义:Kubernetes 中最基础的存储单元,用于将外部存储挂载到 Pod 中的容器…

小白学Python,标准库篇——随机库、正则表达式库

一、随机库1.随机生成数值在random库中可以随机生成数值的方法有uniform()、random()、randint()、randrange()等。(1)uniform()方法uniform(参数1, 参数2)方法用于生成参数1到参数2之间的随机小数,其中参数的类型都为数值类型。示例代码&…

Qt窗口:菜单栏

目录 一、窗口预览 二、菜单栏 快捷键 子菜单 分割线 图标 内存泄露 一、窗口预览 在前面几篇文章中,或者说,Qt初学阶段,接触到的都是QWidget,QWidget指控件,往往作为一个窗口的一部分出现。所谓的窗口&#x…

STM32裸机开发(中断,轮询,状态机)与freeRTOS

裸机:没有操作系统,程序是单流程的(比如一个大循环里依次执行各个功能,或者用中断嵌套处理事件)。优点是资源占用极少(几乎不占 RAM/Flash)、执行流程直观;但复杂项目里,…

电脑上如何查看WiFi密码

打开控制面板>点击网络和Internet在查看网络和共享中心找到网络状态和任务点击进去点击连接的WLAN在WLAN状态中点击无线属性在无线网络属性中点击安全,点击显示字符(H)就可以显示密码了

文心一言4.5企业级部署实战:多模态能力与Docker容器化测评

随着大语言模型在企业服务中的应用日益广泛,如何选择一款既能满足多模态创作需求,又具备良好企业级适配性的AI模型成为了关键问题。文心一言4.5作为百度最新开源的大模型,不仅在传统的文本处理上表现出色,更是在多模态理解和企业级…

VUE Promise基础语法

目录 异步和同步 异步的问题 new Promise语法 promise的状态 promise.then() Promise.resolve() Promise.reject() Promise.all() Promise.race() Promise.catch() Promise.finally() 异步和同步 同步模式下,代码按顺序执行,前一条执行完毕后…