docker的平替--podman
前言
我们都知道,docker这个东西,是CaaS(Container as a Service,容器即服务)的通常解法。我们使用docker来管理容器的生命周期,比如镜像的生成、容器的管理和定制(Dockerfile)、仓库的上传和下载等。
但是docker存在很多不方便使用的地方,所以我们可以使用podman来做平替。
podman介绍
Podman(Pod Manager), 是由RedHat公司推出的容器管理工具。它可以做为docker的平替,使用上也非常相似。但其实二者之间也存在非常显著的差别,相比起来podman会比docker更加完善一些。
podman与docker的差异
1. 底层CRI
docker:使用的是docker-shim, 这个CRI(Container Runtime Interface, 容器运行接口)并不是docker实现的,而是kubernetes帮它实现的。由于早期没有docker平替工具,故kubernetes开发了一个api调用docker管理下的容器资源。后来由于有了其他的平替工具,所以kubernetes在1.20版本正式停止维护docker-shim这个CRI,使用其余CRI(可以由其他容器管理工具实现,例如CRI-O等)。这也就是当时讲的“kubernetes停止对docker维护”的意思。
podman:使用的是CRI-O,该接口来自于开放容器计划(OCI), 可以让kubelet来调用下层的容器资源,而不需要人为管理,如图所示。
其余比较知名的CRI还有containerd、lxd等。
2. 守护进程
docker:后台有docker-daemon,需要root权限
podman:没有daemon,不需要root权限
3. 安全性
docker:如果你在容器外有一些文件无法访问,在启动镜像映射文件的时候,你将此文件映射到容器中时,使用docker exec进入容器后,就可以编辑了。
podman:即使你将容器外无法访问的文件映射到容器中时,也无法编辑此文件。
因此,podman比docker安全性更好。
podman安装
1. ubuntu
1) ubuntu22.04,可直接apt安装
1 | apt install -y podman |
2)ubuntu18.04和20.04,需要添加源
1 | . /etc/os-release |
2. centos
1)cent8可以直接yum安装docker,默认装的是podman
1 | yum install -y docker |
2)cent7,可以安装epel-release, 然后yum安装podman
1 | yum install -y epel-release |
如果非root用户来使用podman,可能会遇到namespace没权限的问题:
1 | user namespaces are not enabled in /proc/sys/user/max_user_namespaces |
此功能是Centos3.8添加进去的,默认关闭,需要打开。
1 | [root@node2 ~]# cat /proc/sys/user/max_user_namespaces |
别名
当然,如果你敲docker上瘾,也可以使用alias修改别名。
1 | echo "alias docker=podman" >> ~/.bashrc |
仓库源
如果podman使用默认的仓库源,可能会pull不下来,所以需要修改仓库源。
由于podman不需要root权限,任何人都可以使用,所以每个人可以设置自己的源,就像环境变量一样,每人一个。
全局配置: /etc/containers/registries.conf
个人配置: ~/.config/containers/registries.conf
配置方法:
1 | unqualified-search-registries = ["docker.io", "registry.access.redhat.com"] |
使用
podman pull的时候,比docker多了一个镜像选择的过程
1 | young@home:/opt$ podman pull nginx |
然后访问ip:8000, 发现run起来了。