Docker VS Podman

湖蓝几何球体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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值