本文主要介绍了docker之后podman云原生容器技术的兴起。有需要的朋友可以参考。我希望它能有所帮助。祝你进步很多
1、 podman和OCI是什么
Podman是一个无守护进程、开源的原生容器工具,其目的是使Open Containers Initiative(OCI)的组织和规范轻松查找、运行、构建、共享和部署应用程序。

说到Podman,就得谈谈OCI。这个组织有点有趣。Docker容器技术的出现和迅速风靡世界,给传统的持续集成、连续发布领域带来革命性的变革。此时,大人物(谷歌、RedHat、Microsoft、IBM、Intel、Cisco)有点焦躁不安。大家一起喝茶聊天后,他们决定成立一个新的组织:OCI。这个组织的目的显然是为了防止容器技术被Docker垄断。虽然Docker不怎么愿意,但没有好的办法。他也加入了该组织。毕竟,他的胳膊不能扭动大腿。另还有以下原因

Docker的容器概念和设计新颖,但底层实现不是一种复杂的技术,易于模仿。
Docker希望有大老们支持的情况下推广和使用。
Docker本身有好几处硬伤,真的很容易超越和追赶。
有朋友说,Podman是docker运行、构建、共享的辅助工具,这是不对的,podman本身的发展是一种独立的容器技术,其运行时环境不依赖于docker。

2、 docker的硬伤是什么?
硬伤1:docker有一个名为dockerd的进程,它将占用更多的CPU资源。同时,dockerd守护进程也可能导致单个故障点。如果守护进程挂起,容器将无法正常提供服务。

硬伤2:docker守护进程只能root身份运行,这给操作系统和容器的安全带来了巨大挑战。

但是,podman不需要root用户运行的守护进程。podman容器的运行权限与启动它们的Linux用户的权限相同,这解决了一个主要的安全问题。Podman是一个没有守护进程的容器引擎,Podman不需要守护进程来启动和管理容器。这是两个开源项目之间最重要的区别之一。这也是作者对Podman未来将取代docker作为主流容器技术持乐观态度的核心原因。

3、 从docker到podman的过渡非常容易
如果您使用了docker的CLI命令行,那么podman和docker之间几乎没有区别。你只需要用podman代替docker。参数的顺序和意义是相同的。例如:

docker pull nginx
转变为
podman pull nginx
那就行了
如果不想将docker命令更改为podman,则需要修改以前的脚本。它还可以通过映射命令alias docker=podman实现,这样docker就可以无缝地迁移到podman环境中使用。

此外,容器镜像格式在docker和podman之间完全兼容。因此,现有的镜像,无论是官方docker镜像还是我们过去构建的docker镜像,都可以在podman环境中使用。

4、 上手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用户
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 # 执行拉取镜像
如果你有如下的报错信息

su – podman # 切换用户为podman
podman pull docker.io/library/nginx # 执行拉取镜像
或者如下报错信息

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命令运行方式是一模一样的,参数顺序、名称也是一摸一样的。

总结
在单机环境下docker可以无缝的切换到podman环境,对docker-swarm或dcoker-compose支持需要验证,但笔者几乎从来不用这两个东西,所以暂时没有验证的动力。至于与k8s的兼容性,我想这是一定的,而且会越来越好,因为OCI组织的首席大佬就是谷歌,不可能不支持自己的产品之间的兼容性。

如果你使用root用户操作podman容器,与docker几乎是一模一样的,甚至连命令行都不需要改。但是我们用podman代替docker的主要原因我想就是使用非root用户,来提升容器安全性。所以不同的操作系统及版本需要针对非root用户的权限做一些额外配置,从而来满足使用要求。

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!