podman简介

Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。
Podman和Docker的区别
- dockers在实现CRI的时候,它需要一个守护进程,其次需要以root运行,因此这也带来了安全隐患。
- podman不需要守护程序,也不需要root用户运行,从逻辑架构上,比docker更加合理。
- 在docker的运行体系中,需要多个daemon才能调用到OCI的实现RunC。
- 在容器管理的链路中,Docker Engine的实现就是dockerd
- daemon,它在linux中需要以root运行,dockerd调用containerd,containerd调用containerd-shim,然后才能调用runC。顾名思义shim起的作用也就是“垫片”,避免父进程退出影响容器的运训
- podman直接调用OCI,runtime(runC),通过common作为容器进程的管理工具,但不需要dockerd这种以root身份运行的守护进程。
- 在podman体系中,有个称之为common的守护进程,其运行路径通常- 是/usr/libexec/podman/conmon,它是各个容器进程的父进程,每个容器各有一个,common的父则通常是1号进程。podman中的common其实相当于docker体系中的containerd-shim。

图中所体现的事情是,podman不需要守护进程,而dorker需要守护进程。在这个图的示意中,dorcker的containerd-shim与podman的common被归在Container一层。
Podman的使用与docker使用的区别
podman的定位也是与docker兼容,因此在使用上面尽量靠近docker。在使用方面,可以分成两个方面来说,一是系统构建者的角度,二是使用者的角度。
在系统构建者方面,用podman的默认软件,与docker的区别不大,只是在进程模型、进程关系方面有所区别。如果习惯了docker几个关联进程的调试方法,在podman中则需要适应。可以通过pstree命令查看进程的树状结构。总体来看,podman比docker要简单。由于podman比docker少了一层daemon,因此重启的机制也就不同了。
在使用者方面,podman与docker的命令基本兼容,都包括容器运行时(run/start/kill/ps/inspect),本地镜像(images/rmi/build)、镜像仓库(login/pull/push)等几个方面。因此podman的命令行工具与docker类似,比如构建镜像、启停容器等。甚至可以通过alias
docker=podman可以进行替换。因此,即便使用了podman,仍然可以使用http://docker.io作为镜像仓库,这也是兼容性最关键的部分。
Podman常用命令
容器
| 命令 | 用法 |
|---|---|
| podman run | 创建并启动容器 |
| podman start | 启动容器 |
| podman ps | 查看容器 |
| podman stop | 终止容器 |
| podman restart | 重启容器 |
| podman attach | 进入容器 |
| podman exec | 进入容器 |
| podman export | 导出容器 |
| podman import | 导入容器快照 |
| podman rm | 删除容器 |
| podman logs | 查看日志 |
| 镜像 | |
| podman search | 检索镜像 |
| podman pull | 获取镜像 |
| podman images | 列出镜像 |
| podman image Is | 列出镜像 |
| podman rmi | 删除镜像 |
| podman image rm | 删除镜像 |
| podman save | 导出镜像 |
| podman load | 导入镜像 |
| podmanfile | 定制镜像(三个) |
| podman build | 构建镜像 |
| podman run | 运行镜像 |
| podmanfile | 常用指令(四个) |
|---|---|
| COPY |

Podman是一个无需守护进程和root权限的容器运行时工具,与Docker高度兼容。它直接调用OCI runtime,简化了容器管理链路。Podman在系统构建者和使用者角度与Docker的主要区别在于进程模型和命令行工具的使用,命令基本兼容,可方便地替代Docker。了解Podman的基础命令,如容器管理、镜像操作和仓库交互,对于容器化的系统部署至关重要。
最低0.47元/天 解锁文章
518

被折叠的 条评论
为什么被折叠?



