容器之podman基础

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

1. 什么是Podman

podman红帽(Redhat) 所研发的一款用于管理 OCI容器和Pod(类似k8s pod 非 k8s pod)的工具,RedHat 8Centos 8 默认容器引擎 且 无守护进程的引擎,兼容docker,熟悉dokcer很容易上手podman

2. podman 和 docker 的区别

2.1 podman 和 docker 架构

podman

docker

2.2 podman 和 docker 区别

2.2.1 守护进程

docker 采用守护进程模式来运行容器的

抽象出来即

管理镜像/创建容器 均有docker server管理,典型的客户端/服务器架构

当我们启动 docker后,使用 ps aux | grep docker-container即可以看到该 守护进程

docker查看版本的时候,会呈现客户端和服务器的版本

podman 采用无守护进程架构

相比之下,podman闲置资源要低得多,即 若没有容器运行,则podman不会运行,而docker即使没有容器运行,也会启动一个守护进程(docker Server)

2.2.2 安全

上节所述,docker使用守护进程模式,而 podman则使用的是无守护进程架构,那么2者到底有什么关系呢?

最主要的区别是: docker必须使用root权限 或者 在 docker群组中,才能使用 docker, 而 podman则无此限制。

我们模拟一下

docker

我们尝试新建用户,然后去使用docker操作新建镜像输出hello world

可见,报错了,报错原因是 权限不足,我们查看unix套接字的权限。

所以,需要root/sudo权限才行。

我们赋予dockerTest1 sudo 权限,再次尝试下。

podman

我们使用普通用户登入测试podman机器,顺利启动容器,并且输出 'hello world'

在别的用户下,使用podman是看不到这个容器的,podman能够做到容器隔离。


总结

若作为多用户而言,podman启动的容器是独立的,互不干扰,且不需要添加任何特权的情况下,均可运行,而docker启动的容器却是在一起的,只要有docker server权限,那么就可以操作所有容器,这是不安全的。

2.2.3 镜像构建

docker 可以使用 docker build/docker commit 构建镜像,而 podman 则不行,它是为运行容器而编写的,而非创建镜像,创建镜像则需要交给其他工具: Buildah , 此外它还有一个兄弟: Skopeo ,后续再讲。

podman工具列举一下

Buildah: 用于构建、推送和签名容器镜像;

Skopeo:用于复制、检查、删除和签名镜像;

可见,podman是分模块处理的,而docker则是以一个整体来处理。

3. 如何快速入门使用podman

前文提到过,podman兼容docker,那么到底有多兼容呢,你甚至可以为 podman建立别名

因此,你可以在开发中使用docker, 而线上环境中可以使用podman,因为它足够安全。

我们尝试下使用podman启动一个nginx服务器

命令参考

$ podman pull nginx
$ podman run -d --name nginx -p 8080:80 nginx
$ podman ps
$ curl 127.0.0.1:8080

4.思考

为什么要使用podman,经过上面的对比,podmandocker的差别不言而喻,而podman作为红帽的产品,有独特的优势,且是docker目前最好的替代品。

为什么podman能够运行docker镜像,或者说是能够'代替'docker

因为dockerpodman都符合OCI,所以得以兼容,就像上述所讲,你甚至可以在开发环境中使用docker管理容器,而在生产环境中使用podman, 因为它相比于docker,更加安全。

posted @ 2022-04-01 10:30  pdudos  阅读(0)  评论(0)    收藏  举报  来源