一、概念
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
命令分解:
podman run
创建并启动新容器
-d
守护进程模式(detached mode):容器在后台运行
--name web
为容器指定名称
web
(便于后续管理)
-it
:交互式终端(常与/bin/bash
联用)
-p 8080:80
:宿主机端口绑定容器端口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 # 强制删除运行中的容器