docker daemon 存在问题:
-
单点故障问题 docker daemon一旦死亡 所有容器都将死亡
- docker daemon 拥有运行中的容器的所有子进程
- 所有docker操作都需由具有跟root相同权限的用户执行
- 构建容器时 可能会导致安全漏洞
podman:
通过直接与image registry, image, container 进行互动,而不是通过守护进程来解决以上问题
而且podman还可以允许用户在没有完全root权限的情况下可以运行容器。而且还可以和docker兼容
docker是标准的容器管理技术
podman 是一种开源的Linux原生工具 根据开放容器
倡议 标准开发管理运行容器和pod。
podman是一个友好的容器调度器
是redhat 和centos8中默认的容器引擎
集合了命令集的工具 为了处理容器化进程的不同任务 可以作为一个模块化框架工作,
podman 工具集包括:
podman: pod和容器镜像管理器
buildah:容器镜像生成器
skopeo:容器镜像检查管理器
runc:容器运行器和特性构建器 并传递podman和buildah
crun:可选运行时,为rootless容器提供更大的灵活性 安全性 控制性
k8s 和podman在某些方面也是相似的
podman 可以创建pod一起工作的
k8s ,pod在一个共同的空间里作为一个单元来管理容器
主要好处:开发人员可以共享资源 在一个pod中为同一个应用程序使用不同的容器 一个容器用于前端一个容器可以用于后端 还有一个数据库
pod的配置可以导入k8s兼容的YAML文件 ,可以应用到k8s集群中,从而允许容器更快地进入生产。
podman 是没有守护进程的守护进程是在后台运行的程序 他处理服务进程和请求 没有用户界面 ,podman是一种独特的容器引擎 实际上并不依赖守护进程 而是作为子进程启动容器和pod
podman支持与docker兼容的CLI接口
podman VS docker 有许多共同的特性
podman与Linux内核交互 通过runc容器运行进程而不是daemon来管理容器
buildah实用程序用于替代docker
build作为容器镜像构建工具
docker push被skopeo替代用于在注册表和容器引擎之间移动容器镜像
架构:
docker 使用守护进程 一个正在后台运行的程序 来创建镜像和运行容器
podman 无守护进程的架构这意味着它可以在启动容器的用户下运行容器
root特权:
podman没有守护进程来管理活动 也无需为其分配root权限 docker在其守护进程配置中添加了rootless模式 但 podman首先使用里这种方法 并将其本特性进行了推广 原因:
安全:
podman允许容器使用rootless权限 rootless容器被认为比root特权的容器更安全 在docker中守护进程拥有root权限 这使得它们更易成为攻击者的首选入侵点,podman可以同时运行root容器和rootless容器
systemd:
如果没有守护进程 podman需要另一个工具来管理服务并支持 后台运行的容器systemd为现有容器创建控制单元或者用来生成新的容器 systemd还可以与podman集成 允许它在默认情况下运行启用了systemd的容器 从而无需进行任何修改
构建镜像:
docker可以自己构建容器镜像 ,podman则需要另一种名为buildah的工具的辅助 该工具充分体现了他的特殊性 他是为构建镜像而设计的 而不是为构建容器而生
docker swarm podman不支持docker swarm
podman增加了对docker compose 的支持 使其对swarm兼容 从而克服了这个限制,docker因为原生性与swarm融合的也很好。
docker是一个独立的强大的工具在整个循环中处理所有的容器化任务,有优点也会有缺点
podman采取模块化依靠专门的工具 来完成特定的任务