Docker VS Podman
  k51y0b4s5YeA 2023年11月02日 41 0

湖蓝几何球体LinkedIn Banner.png 转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


1. docker

Docker的出现与广泛应用,是容器化的一次革命史。

Docker是个容器化工具,我们在容器里面运行程序、配置必要的环境变量等。Docker容器在某种程度上像虚拟机,但与虚拟机又不完全相同。

1.1 Docker的工作流程:

image.png

Docker的两个主要模块是:Docker daemon和Docker CLI Docker daemon: docker守护进程,是帮助管理/创建Docker镜像、容器、网络和存储卷的恒定后台进程。 Docker Engine REST API: 一个用来与Docker daemon进行交互的API应用程序;可以通过HTTP客户端访问,在执行docker version时,可以查看此API版本信息。 Docker CLI:一个Docker命令行客户端,用于与Docker守护进程交互。也就是Docker命令。

1.2 Docker的缺陷

Docker虽然用起来方便,解决了许多的环境问题,但是Docker也存在其自身的不足: 1)单点故障:Docker运行在单个进程上,一旦Docker服务守护进程挂了,所有的容器就都挂了,存在单点故障风险; 2)存在一些安全漏洞的风险; 3)对于Docker操作,所有步骤默认都需要由root执行;

2. podman

Podman是一个无守护进程的容器引擎,用于在Linux系统上开发、管理和运行OCI容器。容器既可以用root运行,也可以非root运行。

2.1 podman工作流程

image.png

如图,podman是直接与Image registry, containers , image storage进行交互。 另外,Docker是建立在runC运行时容器之上并使用守护进程的。而Podman不同于Docker,它不使用守护进程,而是直接使用runC运行时容器。

2.3 Podman相比Docker,两者有以下区别:

2.3.1 运行模式:

Docker:部署后需要启动服务,有Docker daemon这样的守护进程。 Podman:不需要启动服务,没有守护进程。

2.3.2 架构、依赖性和风险:

Docker:Docker使用client/server架构模式,其中包括Docker daemon和Docker CLI。它依赖于一个后台运行的Docker守护进程来管理容器的生命周期,具有单点风险。 Podman:Podman使用的传统fork/exec架构模式,它是以无守护进程的方式工作的,每个容器都是在独立的进程中运行,不依赖于后台守护进程,基本不具有单点风险。

2.3.3 管理和部署:

Docker:Docker提供了一系列强大的管理和编排工具,如Docker Compose和Docker Swarm,用于管理容器集群和多个容器应用的部署。 Podman:Podman本身更关注于单个容器的管理,而对于容器编排和集群管理,Podman可以与其他工具(如Kubernetes)结合使用。

2.3.4 镜像和兼容性:

Docker:Docker是一个广泛使用的容器生态系统,拥有大量的Docker镜像和工具。它有一个官方镜像仓库(Docker Hub),可以方便地获取和共享Docker镜像。 Podman:Podman可以使用Docker镜像,但它也支持其他镜像格式,如OCI(Open Container Initiative)格式。Podman可以无缝与Docker生态系统集成,并提供与Docker命令行接口(CLI)兼容的命令。

2.3.5 安全性和权限:

Docker:Docker默认需要root或sudo访问权限才能运行,普通用户使用docker命令需用root用户对其进行特别授权,这可能会增加潜在的安全风险。另外,Docker默认使用Docker守护进程与容器进行交互,这可以使容器对主机操作系统产生更高的权限要求。 Podman:Podman在运行容器时不需要root或sudo权限,具有更好的安全性。Podman可使用普通用户权限运行容器,并使用Linux命名空间和Cgroups来实现容器隔离。

2.3.6 重启模式:

Docker:Docker可以通过--restart参数设置容器的重启模式。 Podman:podman则不支持直接通过--restart参数设置容器的重启。

3. podman实践

podman安装:

# yum -y install podman

安装后,podman默认的配置文件位置在/etc/containers目录;默认存储位置在/var/lib/containers目录。

如果一台服务器上同时安装了docker和podman,则: 1)docker拥有的image和container,使用podman命令都看不到,docker和podman存储image和container的目录不一样;

2)docker build命令构建的image,并且通过docker save命令保存为tar包的文件,可以通过podman load<xxx.tar命令导出到服务器,二者兼容;

3)docker与podman可共用Dockerfile文件,即同一个Dockerfile既可以用docker build也可以用podman build来构建镜像;

podman的命令大抵和docker一样,基本docker能用的命令,podman都能用。例如:


##podman拉取镜像
# podman pull nginx

##podman查看镜像
# podman images

##podman查看启动的容器
# podman ps -a

##podman启动镜像
# podman run -d -p 8080:80 --name nginx docker.io/library/nginx:latest

##podman 构建镜像
# podman  build . -t www.myharbor.com/library/minio:latest

podman其余命令可参考官网:https://docs.podman.io/en/latest/Commands.html

参考资料: https://medium.com/beacloudcaptain/docker-vs-podman-c03359fabf77

https://opensource.com/article/18/10/podman-more-secure-way-run-containers

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  wwLZeziuqjLR   2023年12月11日   29   0   0 Dockercentos
  MCWYWqSAMsot   2023年12月11日   30   0   0 Docker
  DnoStTHsc0vp   2023年12月11日   22   0   0 Docker
  wwLZeziuqjLR   2023年12月08日   94   0   0 Dockercentosbash
  wwLZeziuqjLR   2023年12月07日   30   0   0 Dockercentos