再见docker,CentOS8默认支持的容器podman 一、什么是podman与OCIPodman是一个无守护进程、开源的原生容器工具,旨在基于 Open Containers Initiative ( OCI )组织及规范,让镜像容器能够轻松查找、运行、构建、共享和部署应用程序。 提到podman就不能不说说OCI,这个组织有点意思。Docker容器技术出现并且迅速风靡全球,为传统的持续集成与持续发布领域带来了革命性的变化。 这个时候各个大佬们(谷歌,Redhat、微软、IBM、Intel、思科)就有点坐不住了,大家一起喝喝茶聊聊天就决定要成立一个新的组织:OCI。这个组织成立的目的很明显,就是要防止容器技术被docker一家垄断。docker方面虽然心不甘、情不愿,但是也没有什么太好的办法,也加入了该组织,毕竟胳膊拧不过大腿。另外还有以下几个原因
二、docker有什么硬伤?
然而Podman 不需要以 root 身份运行的守护进程,Podman 容器的运行权限与启动它们的linux用户相同,这解决了一个重大的安全问题。Podman 是一个无守护进程的容器引擎,并且Podman 不需要守护进程来启动和管理容器。这是两个开源项目之间的一个最重要区别。这也是笔者看好podman未来会代替docker成为主流容器技术的核心原因。 三、从docker过度到podman非常easy如果你使用过docker的CLI命令行,podman几乎没有任何的区别,只需要把docker换成podman即可,参数顺序、含义都是一样的。如: docker pull nginx换成podman pull nginx即可 如果你不想将docker命令换成podman,因为这样需要修改以往的脚本。也可以通过映射命令alias docker=podman来实现,这样就可以无缝地将docker迁移到podman环境下使用。 另外容器镜像格式方面在 Docker 和 Podman 之间也是完全兼容的。所以现有的镜像,不论是docker官方镜像,还是我们以往自己构建的docker镜像,都可以在podman环境下使用。 四、上手podman4.1.安装下面我们就来简单的搞一搞,在CentOS操作系统可以直接使用yum命令安装podman。事先说明的是我这个是一台新的最小化安装的CentOS7虚拟机,并不包含docker,也不曾安装。
查看版本 # podman versionVersion: 1.6.4RemoteAPI Version: 1Go Version: go1.12.12OS/Arch: linux/amd64 新建podman用户,后续使用该用户运行的容器。
4.2.CentOS7环境下需要做的特殊处理出于上文中所说的安全性考虑,我们不使用root用户操作镜像及容器。所以需要做如下的一些配置。
CentOS7默认关闭用户namespace,将它打开 echo 10000 > /proc/sys/user/max_user_namespaces;grubby --args='user_namespace.enable=1' --update-kernel='$(grubby --default-kernel)';echo 'user.max_user_namespaces=10000' >> /etc/sysctl.conf; 4.3. 配置非root用户id及组id范围尝试在linux宿主机操作系统新建用户podman用户环境下执行nginx镜像拉取
如果你有如下的报错信息 ERRO[0000] cannot find mappings for user podman: No subuid ranges found for user 'podman' in /etc/subuid 或者如下报错信息
请退出podman用户切换回到root用户(exit命令),执行下列命令,podman为运行容器的一个非root用户 echo 'podman:100000:65536' >> /etc/subuidecho 'podman:100000:65536' >> /etc/subgid 这段配置的作用就是设置一个容器内的操作系统与宿主机操作系统用户的uid、gid之间的映射关系。如上所示 100000 - 165535(100000 + 65535) 在宿主机的id就映射到容器内的 0-65535的用户。配置完之后执行如下命令
官方解释上面的命令可以让配置生效,但是不知道什么原因,笔者执行该命令时配置并未生效,而是重启了一下操作系统才生效。 五、在非root用户下容器镜像的使用同样的先把root切换到宿主机的podman用户 su - podman 拉取镜像命令
查看镜像列表(在x用户下拉取的镜像,在y用户下是查看不到的) $ podman imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/library/nginx latest c316d5a335a5 2 weeks ago 146 MB 运行容器镜像
其他的命令就不一一的列举了,和docker命令运行方式是一模一样的,参数顺序、名称也是一模一样的。 总结
|
|
来自: 菌心说 > 《编程+、计算机、信息技术》