Podman与Docker对比:深入解析Podman无守护进程架构
立即解锁
发布时间: 2025-08-14 00:33:06 阅读量: 11 订阅数: 14 


Podman for DevOps: 使用容器化技术革新
### Podman与Docker对比:无守护进程架构解析
#### 1. Podman简介
Podman(POD MANager的缩写)是一个无守护进程的容器引擎,允许用户管理容器、镜像及其相关资源,如存储卷或网络资源。安装完成后,无需启动任何服务,因为运行容器时不需要后台守护进程。安装后,Podman二进制文件既充当命令行界面(CLI),又作为编排容器运行时执行的容器引擎。
#### 2. Podman命令和REST API
Podman CLI提供了一系列不断增加的命令,常用命令子集如下:
- `build`:从Containerfile或Dockerfile构建镜像
- `cp`:在容器和本地文件系统之间复制文件/文件夹
- `exec`:在运行的容器中运行命令
- `events`:显示Podman事件
- `generate`:生成结构化数据,如Kubernetes YAML或systemd单元
- `images`:列出本地缓存的镜像
- `inspect`:返回容器或镜像的底层信息
- `kill`:终止一个或多个运行的容器
- `load`:从容器TAR存档或标准输入加载镜像
- `login`:登录到容器注册表
- `logs`:获取容器的日志
- `pod`:管理Pod
- `ps`:列出运行的容器
- `pull`:从注册表拉取镜像或存储库
- `push`:将镜像或存储库推送到注册表
- `restart`:重启一个或多个容器
- `rm`:移除一个或多个容器
- `rmi`:移除一个或多个镜像
- `run`:在新容器中运行命令
- `save`:将一个或多个镜像保存到TAR存档(默认流式传输到标准输出)
- `start`:启动一个或多个停止的容器
- `stop`:停止一个或多个运行的容器
- `system`:管理Podman(磁盘使用、容器迁移、REST API服务、存储管理和清理)
- `tag`:创建一个引用SOURCE_IMAGE的TARGET_IMAGE标签
- `unshare`:在修改的用户命名空间中运行命令
- `volume`:管理容器卷(列表、清理、创建、检查)
对于熟悉Docker的用户来说,Podman CLI命令与Docker兼容,便于在两者之间平滑过渡。与Docker不同的是,Podman执行上述命令时不需要运行在Unix套接字上监听的Docker守护进程。不过,用户仍可选择运行Podman服务并使其监听Unix套接字以暴露原生REST API。
运行以下命令,Podman将在指定路径创建一个套接字端点并监听API调用:
```bash
$ podman system service --time 0 unix://tmp/podman.sock
```
若未提供路径,有根服务的默认套接字端点是`unix://run/podman/podman.sock`,无根容器的默认套接字端点是`unix://run/user/<UID>/podman/podman.sock`。
用户可对套接字端点进行REST API调用,例如查询Podman可用的本地镜像:
```bash
curl --unix-socket /tmp/podman.sock \ http://d/v3.0.0/libpod/images/json | jq .
```
Podman项目在[此处](https://docs.podman.io/en/latest/_static/api.html)维护了符合OpenAPI的可用REST API调用文档。
#### 3. Podman构建模块
Podman尽可能遵循开放标准,其主要构建模块如下:
| 模块 | 描述 | 链接 |
| ---- | ---- | ---- |
| libpod库 | 管理容器生命周期 | [https://github.com/containers/podman/tree/main/libpod](https://github.com/containers/podman/tree/main/libpod) |
| 容器运行时 | 基于OCI规范,如crun和runc | - |
| 镜像管理 | 实现containers/image库 | [https://github.com/containers/image](https://github.com/containers/image) |
| 容器和镜像存储 | 采用containers/storage库 | [https://github.com/containers/storage](https://github.com/containers/storage) |
| 镜像构建 | 使用Buildah | [https://github.com/containers/buildah](https://github.com/containers/buildah) |
| 容器运行时监控和通信 | 使用Conmon | [https://github.com/containers/conmon](https://github.com/containers/conmon) |
| 容器网络支持 | 通过Kubernetes Container Network Interface (CNI) 规范实现 | [https://github.com/containernetworking/plugins](https://github.com/containernetworking/plugins) |
#### 4. libpod库
Podman的核心基础是libpod库,其他开源项目如CRI - O也采用了该库。该库包含编排容器生命周期所需的所有逻辑,其开发是Podm
0
0
复制全文
相关推荐










