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)。
由于无守护架构的直接性,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 | ✔ | ✘ |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通