了解杜老师的小伙伴都知道,杜老师非常喜欢用 Docker 来部署相关服务。但可能有些小伙伴不太清楚,容器除了 Docker 还有 Podman,今天杜老师为大家简单介绍下 Podman。
什么是 Podman
Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台使用。Podman 提供与 Docker 非常相似的功能。它不需要在系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
Podman 可管理和运行任何符合 OCI 规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。
主要区别
Docker 在实现 OCI 的时候,需要一个守护进程,其次需要以 root 运行,因此也带来了安全隐患;
Podman 不需要守护程序,不需要 root 用户运行,从逻辑架构上,比 Docker 更加合理;
在 Docker 的运行体系中,需要多个 daemon 才能调用到 OCI 的实现;
在容器管理链路中,Docker Engine 实现就是 dockerd;
dockerd 调用 containerd,containerd 调用 containerd-shim。顾名思义 shim 起的作用也就是避免父进程退出影响容器的运行;
Podman 直接调用 OCI,通过 common 作为容器进程的管理工具,但不需要 dockerd 这种以 root 身份运行的守护进程;
Podman 体系中,有个称为 common 的守护进程,运行路径通常是 /usr/libexec/Podman/conmon,它是各个容器进程的父进程,每个容器各有一个,common 的父进程通常是 1 号进程。Podman 中的 common 其实相当于 Docker 体系的 containerd-shim;
图片Podman 不需要守护进程,而 Docker 需要守护进程。
使用区别
Podman 的定位也是与 Docker 兼容,因此在使用上面尽量靠近 Docker。使用方面,可以分成两个方面来说,一是系统构建者的角度,二是使用者的角度;
在系统构建者方面,Podman 的默认软件,与 Docker 区别不大,只在进程模型、进程关系方面有所区别。如果习惯 Docker 几个关联进程的调试方法,在 Podman 中则需要适应。总体来看,Podman 比 Docker 要简单。由于 Podman 比 Docker 少了一层 daemon,因此重启的机制也就不同了;
在使用者方面,Podman 与 Docker 的命令基本兼容,都包括容器运行时、本地镜像、镜像仓库几个方面。因此 Podman 命令行工具与 Docker 类似,比如构建镜像、启停容器;
Docker/Podman 可进行替换。因此,即便使用了 Podman,仍然可使用 Docker 作为镜像仓库,这也是兼容性最关键的部分。
常用命令
容器相关命令如下:
命令 | 作用 |
---|---|
podman run | 创建启动容器 |
podman start | 启动容器 |
podman ps | 查看容器 |
podman stop | 终止容器 |
podman restart | 重启容器 |
podman exec | 进入容器 |
podman export | 导出容器 |
podman import | 导入容器快照 |
podman rm | 删除容器 |
podman logs | 查看日志 |
镜像相关命令如下:
命令 | 作用 |
---|---|
podman search | 检索镜像 |
podman pull | 获取镜像 |
podman images | 列出镜像 |
podman rmi | 删除镜像 |
podman save | 导出镜像 |
podman load | 导入镜像 |
条评论