+
80
-

Podman与Docker哪个更好用?

Podman与Docker哪个更好用?


网友回复

+
0
-

什么是Docker

与传统的虚拟机不同,Docker共享主机的内核,利用linux的namespace进行资源隔离,cgroups进行资源控制,使得应用程序像在一个个的集装箱中运行,而承载集装箱的就是docker守护进程。从图中我们可以看出容器和传统的虚拟机的对比,容器比虚拟机更轻量。 Docker Client是Docker的客户端程序,用于将用户请求发送给Dockerd。Dockerd实际调用的是containerd的API接口,containerd是Dockerd和runc之间的一个中间交流组件,主要负责容器运行、镜像管理等。containerd向上为Dockerd提供了gRPC接口,使得Dockerd屏蔽下面的结构变化,确保原有接口向下兼容;向下,通过containerd-shim与runc结合创建及运行容器。值得一提的是,守护进程使用REST API,利用HTTP的客户端就能访问Docker的守护进程。 什么是Podman

Podman是一个由 RedHat 公司推出的无守护程序的容器引擎,用于在Linux系统上开发,管理和运行OCI容器。容器可以以root用户或无root权限模式运行。无root权限运行容器,能够使得容器更加安全。 如图1所示,和Docker不一样的是,Podman分散了容器管理所需的所有组件,并将它们个性化为较小的组件,仅在必要时使用。 Podman使用buildah管理镜像,通过skopeo来和镜像仓库进行交互,使用容器运行时Runc来直接运行容器。所以Podman启动容器的速度相对快一些,不需要一个庞大臃肿的守护进程就能运行容器。并且使用起来和Docker没有太大的区别,甚至可以alias docker=podman,Podman几乎复制了Docker的所有命令,所以你可以很轻松的从Docker转移到Podman。 Podman、 Buildah 和 Skopeo都是OCI容器生态计划中的一部分,相关的生态软件都能https://github.com/containers中找到。并且这些工具都是符合CRI标准的,基于 unix 传统的 fork-exec 模型,解决了由于 Docker 守护程序导致的启动和安全问题,提高了容器的性能和安全。 从RHEL8开始,已经移除了docker,并且使用Podman代替,虽然你依然可以从别处安装Docker,但是不是RHEL官方所推荐的。当然,Podman还可以管理pod,从其名就能看出。

docker的不足

1. Docker在单个进程上运行,可能会导致单点故障。 2. 所有子进程均归此守护进程所有。 3. 在任何时候,如果Docker守护程序失败,所有子进程都会失去其跟踪,并进入孤立状态。 6. 安全漏洞。 7. 对于Docker操作,所有步骤都需要由root执行。

Podman的优势

1、Podman可以运行Rootless容器 由于Podman的模块化体系结构,因此不必以root用户身份运行容器。这是一个很大的优势,因为你可以与具有不同特权的其他用户一起运行容器,而不必冒有人可以访问容器服务并以root用户身份运行容器的风险,并且不会对服务器造成破坏。 Podman以非root用户身份运行时所执行的操作是在用户的主目录中创建一个目录,并将该用户拥有的图像和容器的所有信息存储在那里。因此,例如,如果你与非root用户一起制作Podman映像,它将仅显示该用户创建或下载的映像。 2、Podman的另一个优点是它能够使用使用命名空间的UID分隔,这在运行容器时提供了额外的隔离层。在安全性方面,Docker服务泄漏比获得root(sudo)特权更加危险。 当你获得管理员许可权(sudo)并在系统上执行某项操作时,它总是在系统审核日志中注册,因此总会有一条跟踪记录。但是,如果你访问Docker服务并从具有特权的容器中进行操作并摆脱该容器,那么几乎不可能知道你做了什么。它不会保存在任何日志中,也不会保存你的操作记录。这表明Podman是一种更安全的工具。

3、Podman 不需要启动或管理像 Docker daemon 那样的守护进程。

4、适用于 Docker 的命令在 Podman 中也是同样可用的。您可以指定命令别名:alias docker=podman

5、Podman 和 Docker 的镜像具有兼容性。

+
0
-

我知道答案,我要回答