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安装
apt install -y podman
2)ubuntu18.04和20.04,需要添加源
. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key" | sudo apt-key add -
apt install -y podman
2. centos
1)cent8可以直接yum安装docker,默认装的是podman
yum install -y docker
2)cent7,可以安装epel-release, 然后yum安装podman
yum install -y epel-release
yum install -y podman
如果非root用户来使用podman,可能会遇到namespace没权限的问题:
user namespaces are not enabled in /proc/sys/user/max_user_namespaces
此功能是Centos3.8添加进去的,默认关闭,需要打开。
[root@node2 ~]# cat /proc/sys/user/max_user_namespaces
0
# 临时打开
[root@node2 ~]# echo 200 > /proc/sys/user/max_user_namespaces
# kernel 设置
[root@node2 ~]# grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
# 写入配置文件
[root@node2 ~]# echo "user.max_user_namespaces=200" >> /etc/sysctl.conf
# 生效
[root@node2 ~]# sysctl -p
# 关闭namespace
[root@node2 ~]# grubby --remove-args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
别名
当然,如果你敲docker上瘾,也可以使用alias修改别名。
echo "alias docker=podman" >> ~/.bashrc
source ~/.bashrc
仓库源
如果podman使用默认的仓库源,可能会pull不下来,所以需要修改仓库源。
由于podman不需要root权限,任何人都可以使用,所以每个人可以设置自己的源,就像环境变量一样,每人一个。
全局配置: /etc/containers/registries.conf
个人配置: ~/.config/containers/registries.conf
配置方法:
unqualified-search-registries = ["docker.io", "registry.access.redhat.com"]
[[registry]]
prefix = "docker.io"
location = "docker.io"
[[registry.mirror]]
location = "docker.mirrors.ustc.edu.cn"
[[registry.mirror]]
location = "registry.docker-cn.com"
使用
podman pull的时候,比docker多了一个镜像选择的过程
young@home:/opt$ podman pull nginx
docker.io/library/nginx:latest
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob 589b7251471a done
Copying blob 186b1aaa4aa6 done
Copying blob a0bcbecc962e done
Copying blob b4df32aa5a72 done
Copying blob a9edb18cadd1 done
Copying blob a2abf6c4d29d done
Copying config 605c77e624 done
Writing manifest to image destination
Storing signatures
605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
young@home:/opt$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/nginx latest 605c77e624dd 6 months ago 146 MB
young@home:/opt$ podman run -d -p 8000:80 docker.io/library/nginx
6e898573edec454699c760b9d5f23091cb22143563e038e8d2cdf0d5277c03dc
young@home:/opt$
young@home:/opt$ docker container ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e898573edec docker.io/library/nginx:latest nginx -g daemon o... 4 seconds ago Up 5 seconds ago 0.0.0.0:8000->80/tcp hopeful_brattain
然后访问ip:8000, 发现run起来了。

docker的平替--podman的更多相关文章
- k8s+crio+podman搭建集群
前言 在传统的k8s集群中,我们都是使用docker engine做为底层的容器管理软件的,而docker engine因为不是k8s亲生的解决方案,所以实际使用中会有更多的分层.之前我们也讲过,k8 ...
- Docker Vs Podman
翻译自 Chetansingh 2020年4月24日的博文<Docker Vs Podman> [1] 容器化的一场全新革命是从 Docker 开始的,Docker 的守护进程管理着所有的 ...
- Podman and Buildah for Docker users
转自:https://developers.redhat.com/blog/2019/02/21/podman-and-buildah-for-docker-users/ I was asked re ...
- podman初试-和docker对比
podman初试-和docker对比 1,什么是docker? Docker 是一个开源的应用容器引擎,属于 Linux 容器的一种封装,Docker 提供简单易用的容器使用接口,让开发者可以打包他们 ...
- Podman 使用指南
原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod.Podman 的使用体验和 Docker 类似,不同的是 Podman 没 ...
- 下一代容器架构已出,Docker何去何处?看看这里的6问6答!!
我猜很多人一看这个标题已经感觉很懵逼了,什么?下一代容器都出来了,我还没学Docker呢!!! 咳咳~~在这里我给大家做一个保证,下一代容器目前也只是各个公司在测试阶段,Github上面也有很多Iss ...
- 向Docker告别的时候到了
在容器的远古时期(大约4年前),Docker是容器游戏中仅有的参与者.但是现在情况不一样了,Docker不再是唯一的一个了,只是另一个容器引擎而已.Docker允许我们构建,运行,拉取,上传,查看容器 ...
- 求求你了,用Docker吧
这是一个开始使用 Docker 的 Tutorial 大无语事件发生!大数据课实验课要用到Hadoop,实验指导是在一个Ubuntu虚机上通过安装包安装Hadoop并运行一个词频统计程序,整个实验就是 ...
- 十、RHEL Podman命令
Podman介绍 Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用.Podman 提供与 Docker 非常相似的功能.正如前面提到的那样,它不需要在你的系统上运行任何守护 ...
随机推荐
- C/C++指针、函数、结构体、共用体
指针 变量与地址 变量给谁用的? 变量是对某一块空间的抽象命名. 变量名就是你抽象出来的某块空间的别名. 指针就是地址.指向某个地址. 指针与指针变量 指针是指向某块地址.指针(地址)是常量. 指针变 ...
- 【MyBatis】多关键字的模糊查询
目录 情景分析 题目 要求 相关代码 Mapper.java Impl.java mapper.xml test.java 思路分析 1.最开始,参数没有使用List,引起的问题 2.Mybatis的 ...
- [AcWing 788] 逆序对的数量
点击查看代码 #include<iostream> using namespace std; typedef long long ll; const int N = 1e5 + 10; i ...
- [AcWing 768] 忽略大小写比较字符串大小
点击查看代码 #include<iostream> using namespace std; string a, b; int main() { getline(cin, a); getl ...
- Linux命令篇 - sed 命令
sed sed - stream editor for filtering and transforming text: sed:利用脚本来处理.编辑文本文件: 格式:sed [OPTION]... ...
- 修复Arch Linux和Manjaro Linux无法显示emoji的问题
安装好Arch Linux或Manjaro Linux系统后默认没办法正常显示emoji,通常会变成方框或者带有unicode码的方块: 这是因为缺失字体以及相关的字体配置导致的. 当然也有一小部分应 ...
- sqlx操作MySQL实战及其ORM原理
sqlx是Golang中的一个知名三方库,其为Go标准库database/sql提供了一组扩展支持.使用它可以方便的在数据行与Golang的结构体.映射和切片之间进行转换,从这个角度可以说它是一个OR ...
- 关于控制台报错“Cannot use import statement outside a module”问题的解决
问题还原: 1.首先在main.js里 使用ES6语法import引入另外一个js模块. 2.此时将main.js在index.html中通过script标签引入,如下 3.右键通过vscode提供的 ...
- 一个程序的自我修养「GitHub 热点速览 v.22.19」
一个程序要诞生涉及前后端技术,比如,你可以用可视化网页搭建工具 tmagic-editor 完成前端部分,而后端部分的数据库以及数据处理可能就要用到 jsonhero-web 和 directus.知 ...
- scrapy框架第二天
1.scrapy数据分析 2.scrapy持久化存储 3.全站数据爬取 4.请求传参 + 五大核心组件 - 创建scrapy工程 scrapy startproject ProName - 切换 ...