podman
Posted 卑微小胡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了podman相关的知识,希望对你有一定的参考价值。
podman
Podman简介
Podman
是一个开源的容器运行时项目,可在大多数 Linux
平台上使用。Podman
提供与 Docker
非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root
权限的情况下运行。
Podman
可以管理和运行任何符合 OCI
(Open Container Initiative)规范的容器和容器镜像。Podman
提供了一个与 Docker
兼容的命令行前端来管理 Docker
镜像。
- Podman 官网地址:https://podman.io/
- Podman 项目地址:https://github.com/containers/libpod
Podman工作机制
Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker CLI 的时候,Docker CLI 会通过 gRPC API 去跟 Docker Engine 说「我要启动一个容器」,然后 Docker Engine 才会通过 OCI Container runtime(默认是 runc)来启动一个容器。这就意味着容器的进程不可能是 Docker CLI 的子进程,而是 Docker Engine 的子进程。
Podman 比较简单粗暴,它不使用 Daemon,而是直接通过 OCI runtime(默认也是 runc)来启动容器,所以容器的进程是 podman 的子进程。这比较像 Linux 的 fork/exec 模型,而 Docker 采用的是 C/S(客户端/服务器)模型。与 C/S 模型相比,fork/exec 模型有很多优势,比如:
- 系统管理员可以知道某个容器进程到底是谁启动的。
- 如果利用 cgroup 对 podman 做一些限制,那么所有创建的容器都会被限制。
- SD_NOTIFY : 如果将 podman 命令放入 systemd 单元文件中,容器进程可以通过 podman 返回通知,表明服务已准备好接收任务。
- socket 激活 : 可以将连接的 socket 从 systemd 传递到 podman,并传递到容器进程以便使用它们。
podman与docker的区别
- docker
- 需要在系统上运行一个守护进程(docker daemon)
- docker cli 命令通过API跟 Docker Engine(引擎)交互告诉它我想创建一个container,然后docker Engine才会调用OCI container runtime(runc)来启动一个container。这代表container的process(进程)不会是Docker CLI的child process(子进程),而是Docker Engine的child process
- 需要使用root用户来创建容器
- 因为docker有docker daemon,所以docker启动容器支持–restart策略
- podman
- 不需要启动任何服务,即不需要在系统上运行守护进程
- Podman是直接给OCI containner runtime(runc)进行交互来创建container的,所以container process直接是podman的child process
- 可以不同root用户来创建容器
- 因为podman没有在系统上运行守护进程,所以不支持–restart的策略,但是在k8s中可以设置pod的重启策略,在系统总编写systemd来完成restart的策略
部署Podman
Centos 8的源里自带,所以直接yum装就行了
[root@localhost ~]# yum -y install podman
#仓库配置
[root@localhost ~]# vim /etc/containers/registries.conf
[registries.search]
registries = ['registry.access.redhat.com', 'registry.redhat.io', 'docker.io'] #这个是查找从这三个地方查找,如果只留一个,则只在一个源里查找
unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "docker.io"] #这里也要改为一个
[registries.insecure]
registries = [10.0.0.1] ##这里写那些http的仓库,比如harbor
#配置加速器
[registries.search]
registries = ['https://kmny1apu.mirror.aliyuncs.com','docker.io']
以上是关于podman的主要内容,如果未能解决你的问题,请参考以下文章