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

每日一讲——Podman

一、概念

1、定义与定位

Podman(Pod Manager)是符合OCI标准的容器引擎,用于管理容器、镜像及Pod(多容器组)。它无需守护进程(Daemonless),直接通过Linux内核功能(如命名空间、cgroups)运行容器,是更轻量安全的Docker替代方案。

镜像:Image,是容器的“模板”,本质上是只读的静态文件包(包含运行应用所需的所有依赖,如代码、环境、库、配置等)和分层存储结构(由多个只读层叠加而成,每一层代表一次修改)。

容器:Container,本质是镜像的动态表现形式(即基于镜像创建的可读写进程环境)。

  • 镜像相当于“安装程序”,容器是“安装后运行的程序”。

  • 类比:

    • 镜像 = 虚拟机.iso文件

    • 容器 = 从该ISO启动的虚拟机实例

核心区别总结

维度镜像(Image)容器(Container)
状态静态(只读)动态(可读写)
存储分层文件(存储在/var/lib/containers运行时产生的可写层
生命周期长期存在,可版本管理临时运行,停止后可销毁
创建方式podman build 构建podman run 从镜像启动
数量关系1个镜像 → 可启动N个容器1个容器 → 基于1个镜像

解释:

OCI标准:OCI是由Linux基金会主导的开放容器计划,旨在制定容器镜像与运行时的统一标准

无需守护进程:

  • Docker的守护进程(dockerd)问题

    • root权限运行,一旦被入侵则整个主机面临风险。

    • 单点故障:守护进程崩溃会导致所有容器不可用。

  • Podman的无守护进程架构
    • 直接通过fork/exec模式调用OCI运行时(如runc),容器进程成为Podman的直接子进程。

    • 权限隔离:容器以当前用户权限运行(非Root模式),通过Linux用户命名空间映射容器内root为宿主普通用户。

    • 优势:安全性提升、资源消耗更低、更符合Unix单一职责原则

2、关键特性

无守护进程设计:

        直接调用runc管理容器,避免单点故障和权限滥用风险。

Podman直接通过 fork/exec 调用 runc
Docker通过 containerd 间接调用 runc

啥是runc?

runc 是容器技术的核心引擎,是真正在操作系统层面创建和运行容器的底层工具。

无根模式(Rootless):

        podman可以让普通用户直接运行容器,利用用户命名空间隔离权限。即使容器内进程以root运行,在宿主机仍映射为普通用户。

兼容Docker生态:

        支持Docker镜像(如docker.io/library/nginx)及相同CLI命令(run、build等)。


二、命令

1、安装podman

dnf install podman -y

2、镜像管理

(1)搜索镜像

搜索nginx的镜像

podman search nginx   # 搜索公共仓库中的镜像

(2)查看正在运行的镜像

podman ps

(3)查看本地镜像

podman images

(4)删除镜像 

podman rmi nginx:alpine        # 删除指定镜像

(5)登录仓库

podman login utility.lab.example.com(你要登录的仓库)

(6)运行镜像

podman run -dit --name web -p 8080:80 nginx:alpine

命令分解:

  1. podman run

    • 创建并启动新容器

  2. -d

    • 守护进程模式(detached mode):容器在后台运行

  3. --name web

    • 为容器指定名称 web(便于后续管理)

  4. -it:交互式终端(常与 /bin/bash 联用)

  5. -p 8080:80:宿主机端口绑定容器端口

  6. nginx:alpine:指定的仓库和标签

(7)有容器时的操作

1)容器状态操作
podman start web        # 启动已停止的容器
podman stop web         # 停止运行中的容器
podman restart web      # 重启容器
podman kill web         # 强制终止容器
 2)查看容器信息
podman ps               # 查看运行中的容器
podman ps -a            # 查看所有容器(含停止状态)
podman inspect web      # 查看容器详细配置(IP、挂载点等)
3)删除容器
podman rm web           # 删除停止的容器
podman rm -f web        # 强制删除运行中的容器

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

相关文章:

  • 分布式事务-MQ事务消息学习与落地方案
  • 前端面试专栏-前沿技术:32.AI辅助开发工具应用
  • 0-1BFS(双端队列,洛谷P4667 [BalticOI 2011] Switch the Lamp On 电路维修 (Day1)题解)
  • 用 Flask 打造宠物店线上平台:从 0 到 1 的全栈开发实践
  • 电商项目_核心业务_数据归档
  • esp32-使用虚拟机开发-部署esp32的linux的环境
  • 如何关闭浏览器的迅雷图标 - 去掉浏览器左下角的迅雷图标 - chrome - 关闭迅雷检测
  • C/C++核心知识点详解
  • 剑指offer——搜索算法:数字序列中某一位的数字
  • Python操作Excel文件完整指南
  • 深度强化学习走向多智能体:从AlphaGo到智能车队
  • AtCoder Beginner Contest 416(A~D)
  • Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation
  • 由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程
  • Java异常处理
  • 使用Python,OpenCV计算跑图的图像彩色度
  • 移植pbrt中的并行化到ray trace in weeks中
  • JVM内存结构
  • 零基础学习性能测试第五章:JVM性能分析与调优-JVM运行时内存区域介绍
  • 企业级数据架构构建之道
  • Unity FXAA
  • SQL注入SQLi-LABS 靶场less21-25详细通关攻略
  • Ubuntu普通用户环境异常问题
  • Linux->自定义shell
  • Acrobat 文件夹级脚本扩展表单功能
  • 【奔跑吧!Linux 内核(第二版)】第4章:内核编译和调试
  • 物联网安装调试-物联网网关
  • Python数据分析基础(二)
  • 两个函数的卷积
  • Kafka——消费者组消费进度监控都怎么实现?