文章目录
podman简介
容器编排工具作为当今最重要的Web开发技术之一,众多强者都在尝试争夺这一行业的主导地位。
Podman是一个开源项目,可在大多数Linux平台上使用并开源在GitHub上。Podman是一个无守护进程的容器引擎,用于在Linux系统上开发,管理和运行Open Container Initiative(OCI)容器和容器镜像。
Podman作为RedHat的一款产品,旨在使用类似于Kubernetes的方法来构建、管理和运行容器,作为一款主流容器的可靠替代产品,它吸引了开发人员的关注。自RHEL 8起,Red Hat用CRI-O/Podman取代了Docker Daemon。
为什么Red Hat想要摆脱Docker Daemon?这是因为使用Docker Daemon运行Docker有以下这些问题:
①单点故障问题,Docker Daemon一旦死亡,所有容器都将死亡
②Docker Daemon拥有运行中的容器的所有子进程
③所有Docker操作都必须由具有跟root相同权限的用户执行
④构建容器时可能会导致安全漏洞
Podman通过直接与Image Registry、Image和Container进行互动,而不是通过守护进程来解决以上问题。
Podman控制下的容器可以由root用户运行,也可以由非特权用户运行。Podman管理整个容器的生态系统,其包括pod,容器,容器镜像,和使用libpod library的容器卷。Podman专注于帮助你维护和修改OCI容器镜像的所有命令和功能,例如拉取和标记。它允许我们在生产环境中创建,运行和维护从这些映像创建的容器。
更棒的是,它还提供了与Docker兼容的指令,使用户可以很轻易的从原本的Docker指令切换到Podman。简单地说你可以直接添加别名:alias docker = podman来使用podman。
官网:https://podman.io/
安装文档:https://github.com/containers/libpod/blob/master/install.md
配置参考:https://github.com/containers/image/blob/master/docs/containers-registries.conf.5.md
podman与docker的区别
架构
Docker使用守护进程,一个正在后台运行的程序,来创建镜像和运行容器。Podman是无守护进程的架构,这意味着它可以在启动容器的用户下运行容器。Docker有一个由守护进程引导的客户端——服务器逻辑架构;但Podman不需要此类守护进程。
Root特权
由于Podman没有守护进程来管理其活动,也无需为其容器分配Root特权。Docker最近在其守护进程配置中添加了Rootless模式,但Podman首先使用了这种方法,并将其作为基本特性进行了推广。原因如下。
Podman比Docker更安全
Podman允许容器使用Rootless特权。Rootless容器被认为比Root特权的容器更安全。在Docker中,守护进程拥有Root权限,这使得它们易成为攻击者的首选入侵点。
Podman中的容器默认情况下不具有Root访问权限,这在Root级别和Rootless级别之间添加了一个自然屏障,提高了安全性。不过,Podman可以同时运行Root容器和Rootless容器。
Systemd的支持
如果没有守护进程,Podman需要另一个工具来管理服务并支持后台运行的容器。Systemd为现有容器创建控制单元或用来生成新容器。Systemd还可以与Podman集成,允许它在默认情况下运行启用了Systemd的容器,从而无需进行任何修改。
通过使用Systemd,供应商可以将他们的应用程序封装为容器用来安装、运行和管理,因为现在大多数应用程序都是通过这种方式打包和交付的。
构建镜像
作为一款自给自足的工具,Docker可以自己构建容器镜像。Podman则需要另一种名为Buildah的工具的辅助,该工具充分体现了它的特殊性:它是为构建镜像而设计的,而不是为构建容器而生。
Docker Swarm
Podman不支持Docker Swarm,这可能会在某些项目中被刨除在外,因为使用Docker Swarm命令会产生一个错误。然而,Podman最近增加了对Docker Compose的支持,使其与Swarm兼容,从而克服了这个限制。当然,Docker由于其原生的特性,与Swarm当然融合得很好。
All in one vs 模块化
也许这就是这两种技术的关键区别:Docker是一个独立的、强大的工具,在整个循环中处理所有的容器化任务,有优点也有缺点。Podman采用模块化的方法,依靠专门的工具来完成特定的任务。
podman与docker的关系
Podman会完全替代docker吗?
不会。如果你要从头开始一个项目,Podman可以是一个首要的容器化技术选项。如果项目正在进行,并且已经在使用Docker,这还需要具体情况具体分析,实际情况并不一定值得去改。而且作为一款Linux原生的应用,它要求相关开发人员具备Linux的相关技能。
开发人员可以在开发阶段依赖Docker,然后在运行时环境中将项目推向Podman,从而结合使用这两种工具,并受益于Podman所提供的更安全性。由于它们都是OCI兼容的,因此,兼容性不是个问题。
Docker和Podman能共存吗?
可以,而且会很好。许多开发人员一直在合用Docker和Podman来创建更安全、更高效、更敏捷的框架。它们有很多共同之处,无论是从Docker到Podman的转变,亦或是二者合并使用,都可以做到无缝衔接。
podman的安装与使用
安装
- centos8, 国内阿里源
# dnf -y install podman
# podman version
Version: 3.3.1
API Version: 3.3.1
Go Version: go1.16.7
Built: Wed Nov 10 05:23:56 2021
OS/Arch: linux/amd64
配置加速器
#这里使用阿里云镜像加速器
# vim /etc/containers/registries.conf
#unqualified-search-registries = ["registry.fedoraproject.org", "registry.acce