Podman和Docker的区别

导读:

参考:Exploring Podman: A More Secure Docker Alternative
作者:Marin Bezhanov
网址:https://betterstack.com/community/guides/scaling-docker/podman-vs-docker/
该随笔为文章部分摘要和学习笔记

1.架构区别

Docker属于CS架构(client-server),Podman利用了无守护架构(daemonless architecture)。

user

DockerClient

DockerDaemon

ContainerProcess

user

Podman

ContainerProcess

由于无守护架构的直接性,Podman有时能比Docker快50%。并且这种架构也更安全,由于CS架构将程序作为Docker守护进程的子进程,而不是用户会话,所以Linux审计系统(audit system)将通过进程追查到某个引发该恶意行为的用户。

2.容器的生命周期

Podman将容器的启动、停止、重启交给systemd服务,例如Podman不使用--restart always而使用podman-restart的systemd服务。Docker则将这些任务都交给内部守护进程。

3.容器编排

本地部署时Docker使用docker compose,Podman使用podman compose。后者比前者更像Kubernetes,在podman compose中你也可以看到Pods的概念。
Podman没有对标DockerSwarm的生产部署工具,你可以将这部份工作交给Kubernetes。

4.安全考量

容器最初就是为了资源隔离,和解决兼容问题而生的。尽管容器比原生服务更安全,但是容器穿透(container breakout)的问题任然存在,Podman的设计可以降低这种风险,Podman的rootless mode,user namespace和seccomp profiles比Docker更方便。

  • rootless mode
    Podman容器运行在独立的用户命名空间,降低了容器穿透带来的危害,Docker则默认设定以root用户运行容器,这带来了安全隐患。以及前面提到的,Podman的程序可以查询到用户ID,这让Linux审计系统可以将恶意行为关联到用户。
  • seccomp profiles
    Podman和Docker利用Linux内核能力权限(capabilities)和seccomp特性来给与进程权限,Podman运行容器时默认只需要11个内核能力权限而Docker则需要14个 内核能力权限。

总结

Podman Docker
Daemonless architecture
Systemd integration
Group containers in pods
Supports Docker Swarm
Supports Kubernetes YAML
posted @   ling_2945  阅读(583)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示