百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

再见dcoker,CentOS8默认支持的容器podman

off999 2025-03-25 16:17 27 浏览 0 评论

再见dcoker,CentOS8默认支持的容器podman

一、什么是podman与OCI

Podman是一个无守护进程、开源的原生容器工具,旨在基于 Open Containers Initiative ( OCI )组织及规范,让镜像容器能够轻松查找、运行、构建、共享和部署应用程序。

提到podman就不能不说说OCI,这个组织有点意思。Docker容器技术出现并且迅速风靡全球,为传统的持续集成与持续发布领域带来了革命性的变化。 这个时候各个大佬们(谷歌,Redhat、微软、IBM、Intel、思科)就有点坐不住了,大家一起喝喝茶聊聊天就决定要成立一个新的组织:OCI。这个组织成立的目的很明显,就是要防止容器技术被docker一家垄断。docker方面虽然心不甘、情不愿,但是也没有什么太好的办法,也加入了该组织,毕竟胳膊拧不过大腿。另外还有以下几个原因

  • docker的容器概念和设计很新颖,但是底层实现并不是什么高精尖的技术,很容易被模仿。
  • docker方面希望被推广使用,离不开大佬们的支持。
  • docker本身还存在几个硬伤,确实容易被超越和追赶。

有的朋友说podman是docker运行、构建、共享的辅助工具,这么说并不正确哈,podman目前的发展其本身就是一种独立的容器技术,其运行时环境不依赖于docker。

二、docker有什么硬伤?

  • 硬伤一:docker存在一个名为dockerd 的进程,会占用比较多的CPU资源。同时一个dockerd守护进程还可能导致单点故障的问题,该守护进程挂掉了,容器也就无法正常提供服务。
  • 硬伤二:docker守护进程以root用户运行,这给操作系统的安全性和容器安全性带来了非常大的挑战。

然而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环境下使用。

四、上手podman

4.1.安装

下面我们就来简单的搞一搞,在CentOS操作系统可以直接使用yum命令安装podman。事先说明的是我这个是一台新的最小化安装的CentOS7虚拟机,并不包含docker,也不曾安装。

yum -y install podman    # root用户安装

查看版本

# podman version
Version:            1.6.4
RemoteAPI Version:  1
Go Version:         go1.12.12
OS/Arch:            linux/amd64

新建podman用户,后续使用该用户运行的容器。

adduser podman   # root用户新建podman用户

4.2.CentOS7环境下需要做的特殊处理

出于上文中所说的安全性考虑,我们不使用root用户操作镜像及容器。所以需要做如下的一些配置。
如果你使用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镜像拉取

su - podman                               # 切换用户为podman
podman pull docker.io/library/nginx   # 执行拉取镜像

如果你有如下的报错信息

ERRO[0000] cannot find mappings for user podman: No subuid ranges found for user "podman" in /etc/subuid

或者如下报错信息

 Error processing tar file(exit status 1): there might not be enough IDs available in the namespace

请退出podman用户切换回到root用户(exit命令),执行下列命令,podman为运行容器的一个非root用户

echo "podman:100000:65536" >> /etc/subuid
echo "podman:100000:65536" >> /etc/subgid

这段配置的作用就是设置一个容器内的操作系统与宿主机操作系统用户的uid、gid之间的映射关系。如上所示 100000 - 165535(100000 + 65535) 在宿主机的id就映射到容器内的 0-65535的用户。配置完之后执行如下命令

podman system migrate

官方解释上面的命令可以让配置生效,但是不知道什么原因,笔者执行该命令时配置并未生效,而是重启了一下操作系统才生效。

五、在非root用户下容器镜像的使用

同样的先把root切换到宿主机的podman用户

su - podman

拉取镜像命令

$ podman pull docker.io/library/nginx

Trying to pull docker.io/library/nginx...
Getting image source signatures
Copying blob 1ae07ab881bd done  
Copying blob 091c283c6a66 done  
Copying blob 78091884b7be done  
Copying blob 5eb5b503b376 done  
Copying blob b559bad762be done  
Copying blob 55de5851019b done  
Copying config c316d5a335 done  
Writing manifest to image destination
Storing signatures
c316d5a335a5cf324b0dc83b3da82d7608724769f6454f6d9a621f3ec2534a5a

查看镜像列表(在x用户下拉取的镜像,在y用户下是查看不到的)

$ podman images
REPOSITORY                TAG      IMAGE ID       CREATED       SIZE
docker.io/library/nginx   latest   c316d5a335a5   2 weeks ago   146 MB

运行容器镜像

podman run -p 8080:80 -d docker.io/library/nginx

其他的命令就不一一的列举了,和docker命令运行方式是一模一样的,参数顺序、名称也是一模一样的。

总结

  1. 在单机环境下docker可以无缝地切换到podman环境,对docker-swarm或dcoker-compose支持需要验证,但笔者几乎从来不用这两个东西,所以暂时没有验证的动力。至于与k8s的兼容性,我想这是一定的,而且会越来越好,因为OCI组织的首席大佬就是谷歌,不可能不支持自己的产品之间的兼容性。
  2. 如果你使用root用户操作podman容器,与docker几乎是一模一样的,甚至连命令行都不需要改。但是我们用podman代替docker的主要原因我想就是使用非root用户,来提升容器安全性。所以不同的操作系统及版本需要针对非root用户的权限做一些额外配置,从而来满足使用要求。

相关推荐

手机上不了wifi是什么原因(手机上不了网连不了wifi)

1.手机wifi已连接不可上网问题出现后首先检测一下是否为手机本身突发性的问题,可以进行关机重启一下再连接看是否还会出现这样的情况。或者使用其他手机或设备连接WiFi试试能否上网。2.如果不是手机的问...

桌面图标大小设置(怎么修改桌面图标大小设置)
  • 桌面图标大小设置(怎么修改桌面图标大小设置)
  • 桌面图标大小设置(怎么修改桌面图标大小设置)
  • 桌面图标大小设置(怎么修改桌面图标大小设置)
  • 桌面图标大小设置(怎么修改桌面图标大小设置)
win10有产品id没有密钥(win10 我没有产品密钥)

WIN10,在左下角输入WINDOWSPOWERSHELL,然后点击系统查询结果第一项,在弹出的窗口中输入:(Get-WmiObject-query‘select*fromSoftware...

win10截屏后找不到了(win10截屏后找不到了怎么办)

Win10系统截屏后没有更新通知并不是一个常见的问题。可能是由于系统设置或者安装的软件造成的。如果系统设置为静音或者禁用通知,那么截屏后不会有通知。另外,一些截屏软件可能会阻止系统通知,需要手动设置...

微软官网win10家庭版下载(微软官网win10家庭版下载速度慢)
  • 微软官网win10家庭版下载(微软官网win10家庭版下载速度慢)
  • 微软官网win10家庭版下载(微软官网win10家庭版下载速度慢)
  • 微软官网win10家庭版下载(微软官网win10家庭版下载速度慢)
  • 微软官网win10家庭版下载(微软官网win10家庭版下载速度慢)
运行定时关机命令(运行定时关机命令怎么设置)

1、打开电脑,按住【Win+R】组合键,弹出运行命令,在编辑框内输入如下命令:shutdown-s-t3600;电脑定时关机运行2、shutdown-s-t3600命令的含义如下:shut...

win7打印机共享设置(详细图文步骤)
  • win7打印机共享设置(详细图文步骤)
  • win7打印机共享设置(详细图文步骤)
  • win7打印机共享设置(详细图文步骤)
  • win7打印机共享设置(详细图文步骤)
键盘快捷键(键盘快捷键是哪个)

电脑键盘快捷键大全:Ctrl+1,2,3... 功能:切换到从左边数起第1,2,3...个标签Ctrl+A 功能:全部选中当前页面内容Ctrl+C 功能:复制当前选中内容Ctrl+D 功能:打开“添加...

宏基acer官网商城(宏基官方商城)

宏碁本本底部有个序列号标签,不是粉色的那个,粉色的是系统的序列号,白色的是本本的出厂序列号,上宏碁官网查查你的序列号就知道真假了。在盖子的后面就可以查询到序列号,或者是去网上查询宏碁笔记本在官网下...

网盘在哪里打开(华为网盘在哪里打开)

给你的是一个网盘地址吧,直接把这个地址放到浏览器地址栏就好了,如果有提取码,他会提示你输入提取码的。一般都是在网上找到百度云链接,然后把文件保存在自己的百度网盘文件夹里面的。打开百度网盘app,...

win10系统安全模式怎么进入(win10安全模式如何进入)
  • win10系统安全模式怎么进入(win10安全模式如何进入)
  • win10系统安全模式怎么进入(win10安全模式如何进入)
  • win10系统安全模式怎么进入(win10安全模式如何进入)
  • win10系统安全模式怎么进入(win10安全模式如何进入)
win7sp1专业版(win7专业版vl)

Win7系统SP1是系统发布后第一个SP包x64是64位操作系统。Windows7指的是微软公司的Windows7操作系统ultimate指的是旗舰版(with表示伴随,说明这是提供商所提供...

手写输入法手写板怎么设置(手写输入法手写板怎么设置 iphone)

手写输入法设置方法:1、打开手机至桌面主页,保持手机处于工作状态;  2、在手机桌面主页列表找到设置,点击打开并进入设置主界面;  3、在设置主界面找到系统设置选项,点击打开并进入系统设置主界面;  ...

推荐杀毒软件(下载杀毒软件最新版)
推荐杀毒软件(下载杀毒软件最新版)

好的杀毒软件有360杀毒,金山毒霸,AVG杀毒等等。1,360杀毒,品牌介绍:360安全卫士品牌是一款由奇虎360公司推出的功能强、效果好、受用户欢迎的安全杀毒软件。360安全卫士拥有查杀木马、清理插件、修复漏洞、电脑体检、电脑救援、保护隐...

2025-11-12 08:51 off999

百度云盘官网(百度云盘官网下载)

网盘在手机上面仅仅是一个图标,他是不占用手机硬盘的,当然,如果你从网盘上下载了文件到本地,下载的文件就会占用手机的硬盘空间。要找到这个文件,可以通过文件管理器来进行查找,也可以通过路径的方式来查找,但...

取消回复欢迎 发表评论: