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 | ✔ | ✘ |

浙公网安备 33010602011771号