前言

我们都知道,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的更多相关文章

  1. k8s+crio+podman搭建集群

    前言 在传统的k8s集群中,我们都是使用docker engine做为底层的容器管理软件的,而docker engine因为不是k8s亲生的解决方案,所以实际使用中会有更多的分层.之前我们也讲过,k8 ...

  2. Docker Vs Podman

    翻译自 Chetansingh 2020年4月24日的博文<Docker Vs Podman> [1] 容器化的一场全新革命是从 Docker 开始的,Docker 的守护进程管理着所有的 ...

  3. Podman and Buildah for Docker users

    转自:https://developers.redhat.com/blog/2019/02/21/podman-and-buildah-for-docker-users/ I was asked re ...

  4. podman初试-和docker对比

    podman初试-和docker对比 1,什么是docker? Docker 是一个开源的应用容器引擎,属于 Linux 容器的一种封装,Docker 提供简单易用的容器使用接口,让开发者可以打包他们 ...

  5. Podman 使用指南

    原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod.Podman 的使用体验和 Docker 类似,不同的是 Podman 没 ...

  6. 下一代容器架构已出,Docker何去何处?看看这里的6问6答!!

    我猜很多人一看这个标题已经感觉很懵逼了,什么?下一代容器都出来了,我还没学Docker呢!!! 咳咳~~在这里我给大家做一个保证,下一代容器目前也只是各个公司在测试阶段,Github上面也有很多Iss ...

  7. 向Docker告别的时候到了

    在容器的远古时期(大约4年前),Docker是容器游戏中仅有的参与者.但是现在情况不一样了,Docker不再是唯一的一个了,只是另一个容器引擎而已.Docker允许我们构建,运行,拉取,上传,查看容器 ...

  8. 求求你了,用Docker吧

    这是一个开始使用 Docker 的 Tutorial 大无语事件发生!大数据课实验课要用到Hadoop,实验指导是在一个Ubuntu虚机上通过安装包安装Hadoop并运行一个词频统计程序,整个实验就是 ...

  9. 十、RHEL Podman命令

    Podman介绍 Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用.Podman 提供与 Docker 非常相似的功能.正如前面提到的那样,它不需要在你的系统上运行任何守护 ...

随机推荐

  1. Java的源码执行(建议结合Javase语法学习来加深印象)

    一.源码执行时的先后顺序: 父类的静态属性和静态块(按照声明顺序) 本类的静态属性和静态块(按照声明顺序) main方法 父类的成员属性和成员块(按照声明顺序) 父类构造器 本类成员属性和块(按照声明 ...

  2. 手撸一个虚拟DOM,不错

    大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...

  3. Hyperledger Fabric 通道配置文件和容器环境变量详解

    摘要 Fabric 网络启动的过程中需要进行大量配置,新学时对各个配置的作用一无所知,这导致我曾在网络出问题时先对配置文件的内容进行排列组合后再祈祷它能在某个时刻顺利运行,因此掌握 fabric 各个 ...

  4. Python小游戏——猜数字

    1 print("--------------我爱鱼-----------") 2 temp = input("不妨猜一下甲鱼现在心里想的是哪个数字:") 3 ...

  5. PostgreSQL与PostGIS安装使用时需要注意的坑

    最近些许繁忙,没有时间系统整理PostgreSQL和PostGIS的安装和使用方法.所以就简单记录一下遇到的坑. 1.找不到 libintl-9.dll 我安装的PostgreSQL版本是11.7,P ...

  6. 【MQ】java 从零开始实现消息队列 mq-02-如何实现生产者调用消费者?

    前景回顾 上一节我们学习了如何实现基于 netty 客服端和服务端的启动. [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]java 从零开始实现消息队列 mq-02-如何实现生产者调用 ...

  7. properties、yml配置文件映射对象

    1.properties文件内容映射到类对象(属性),如Resource目录下的1.properties文件已配置前缀为com.imooc.people相关的信息,然后: pom添加依赖:spring ...

  8. .NET桌面程序应用WebView2组件集成网页开发3 WebView2的进程模型

    系列目录     [已更新最新开发文章,点击查看详细] WebView2 运行时使用与 Microsoft Edge 浏览器相同的进程模型. WebView2 运行时中的进程 WebView2 进程组 ...

  9. ansible的介绍与安装

    ansible是在远程主机上批量执行命令或者脚本的一个工具 epel源:一个第三方的yum源(阿里巴巴开源镜像站:https://opsx.alibaba.com/mirror?lang=zh-CN) ...

  10. 无线:WPA

    WPA全名为Wi-Fi Protected Access,有WPA和WPA2两个标准,是一种保护无线电脑网络(Wi-Fi)安全的系统,它是应研究者在前一代的系统有线等效加密(WEP)中找到的几个严重的 ...