引言:

在本文中,我们将了解 PodmanPod Manager的缩写)、它的功能和用法。

一、Podman

Podman 是一个开源的容器管理工具,用于开发、管理和运行OCI容器。让我们来看看与其他容器管理工具相比, Podman 的一些优势,

  • Podman 创建的镜像与其他容器管理工具兼容。Podman 创建的镜像遵循 OCI 标准,因此可以推送到其他容器注册中心,如 Docker Hub

  • 它可以作为普通用户运行,无需 root 权限。 当以非 root 用户身份运行时,Podman 创建一个用户命名空间,在其中获取 root 权限。这允许它挂载文件系统并设置所需的容器

  • 它提供了管理 pod 的能力。 与其他容器运行时工具不同,Podman 允许用户管理 pod(一个或多个为一组一起运行的容器)。用户可以对 Pod 执行创建、列出、检查等操作

但是,Podman 有一定的局限性:

  • 它仅在基于 Linux 的系统上运行。 目前,Podman 仅在基于 Linux 的操作系统上运行,并且没有针对 Windows 和 macOS 的包装器。

  • 没有 Docker Compose 的替代品。 Podman 不支持在本地管理多个容器,类似于 Docker Compose 所做的。作为 podman-compose 项目的一部分,正在开发使用 Podman 后端的 Docker Compose 实现,但这仍在进行中。

二、与docker的比较

现在我们已经了解了 Podman 是什么,以及它的优点和局限性,让我们将它与使用最广泛的容器管理工具之一的 Docker 进行比较。

2.1 命令行界面 (CLI)

Podman 提供了 Docker 客户端公开的相同命令集。换句话说,这两个实用程序的命令之间存在一对一的映射。

但是,像podman pspodman images这样的命令不会显示使用 Docker 创建的容器或镜像。这是因为 Podman 的本地存储库是/var/lib/containers,而不是 Docker 维护的/var/lib/docker

2.2. 容器模型

Docker 对容器使用客户端-服务器架构,而 Podman 使用 Linux 进程中常见的传统 fork-exec 模型。使用 Podman 创建的容器是父 Podman 进程的子进程。这就是为什么当同时为 Docker 和 Podman 运行 version 命令时,Docker 列出了客户端和服务器的版本,而 Podman 只列出了它的版本。

docker version 的示例输出:

[root@docker ~]# docker version
Client: Docker Engine - CommunityVersion:           20.10.17API version:       1.41Go version:        go1.17.11Git commit:        100c701Built:             Mon Jun  6 23:05:12 2022OS/Arch:           linux/amd64Context:           defaultExperimental:      trueServer: Docker Engine - CommunityEngine:Version:          20.10.17API version:      1.41 (minimum version 1.12)Go version:       go1.17.11Git commit:       a89b842Built:            Mon Jun  6 23:03:33 2022OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.6.8GitCommit:        9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6runc:Version:          1.1.4GitCommit:        v1.1.4-0-g5fd4c4ddocker-init:Version:          0.19.0GitCommit:        de40ad0

podman version 的示例输出:

[root@podman ~]# podman version
Version:            1.6.4
RemoteAPI Version:  1
Go Version:         go1.12.12
OS/Arch:            linux/amd64

由于 Podman 本身作为进程运行,因此它不需要任何后台守护进程。与 Podman 不同,Docker 需要一个守护进程 Docker daemon 来协调客户端和服务器之间的 API 请求

2.3. 无需 Root

如前所述,Podman 不需要 root 访问权限来运行其命令。另一方面,Docker 依赖于守护进程,需要 root 权限或要求用户成为docker 的一部分才能在没有 root 权限的情况下运行 Docker 命令。

$ sudo usermod -aG docker $USER

三、安装与使用

让我们从安装 Podman开始。

安装:

[root@podman ~]# yum install -y podman

podman info命令显示 Podman 系统信息并帮助检查安装状态。

[root@podman ~]# podman version
Version:            1.6.4
RemoteAPI Version:  1
Go Version:         go1.12.12
OS/Arch:            linux/amd64
[root@podman ~]# podman info
host:BuildahVersion: 1.11.7CgroupVersion: v1Conmon:package: conmon-2.0.8-1.el7.x86_64path: /usr/bin/conmonversion: 'conmon version 2.0.8, commit: f85c8b1ce77b73bcd48b2d802396321217008762'Distribution:distribution: '"centos"'version: "7"MemFree: 2882011136MemTotal: 3954184192OCIRuntime:name: runcpackage: runc-1.0.0-69.rc10.el7_9.x86_64path: /usr/bin/runcversion: 'runc version spec: 1.0.1-dev'SwapFree: 0SwapTotal: 0arch: amd64cpus: 4eventlogger: journaldhostname: podmankernel: 3.10.0-957.el7.x86_64os: linuxrootless: falseuptime: 35h 12m 54.44s (Approximately 1.46 days)
registries:blocked: nullinsecure: nullsearch:- registry.access.redhat.com- registry.redhat.io- docker.io
store:ConfigFile: /etc/containers/storage.confContainerStore:number: 0GraphDriverName: overlayGraphOptions: {}GraphRoot: /var/lib/containers/storageGraphStatus:Backing Filesystem: xfsNative Overlay Diff: "true"Supports d_type: "true"Using metacopy: "false"ImageStore:number: 0RunRoot: /var/run/containers/storageVolumePath: /var/lib/containers/storage/volumes

让我们看一下一些基本的 Podman 命令。

3.1. 创建镜像

首先,我们将看看使用 Podman 创建镜像。让我们首先创建一个包含以下内容的 Dockerfile

FROM centos:latest
RUN yum -y install httpd
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
EXPOSE 80

现在让我们使用 build 命令创建镜像:

$ podman build .

在这里,我们首先拉取 CentOS 的基本镜像,在其上安装 Apache,然后将其作为前台进程运行,并暴露端口 80。我们可以通过运行这个镜像并将暴露的端口映射到主机端口来访问 Apache 服务器。

build 命令递归地传递上下文目录中可用的所有文件夹。当没有指定目录时,当前工作目录默认成为构建上下文。因此,建议不要在上下文目录中包含创建镜像不需要的文件和文件夹

3.2. 列出可用镜像

podman images命令列出所有可用的镜像。它还支持过滤镜像的各种选项

$ podman images

此命令列出本地存储库中可用的所有镜像。它包含有关从哪个存储库中提取镜像、标签、其镜像 ID、创建时间和大小的信息。

REPOSITORY                 TAG      IMAGE ID         CREATED         SIZE
docker.io/library/centos   latest  0f3e07c0138f    2 months ago      227MB
<none>                     <none   49030e844ce7   27 seconds ago     277MB

3.3. 运行镜像

podman run 命令创建指定镜像的容器,然后运行它。让我们运行上面创建的 CentOS 镜像

$ podman run  -p 80:80 -dit centos

此命令首先检查是否有可用于 CentOS 的本地镜像。如果镜像不在本地,它会尝试从配置的注册表中拉取镜像。如果镜像不存在于注册表中,则会显示有关无法找到镜像的错误。

上面的 run 命令指定将容器暴露的 80 端口映射到主机的 80 端口,-dit 标志指定以分离和交互模式运行容器。创建的容器的 id 将作为输出。

3.4. 删除镜像

podman rmi 命令删除本地存储库中存在的镜像。可以通过在输入中提供以空格分隔的 ID 来删除多个镜像。指定 -a 标志会删除所有镜像

$ podman rmi 785188cd988c

3.5. 列出容器

可以使用 podman ps -a 命令列出所有可用容器,包括未运行的容器。与 podman images 命令类似,它也可以与各种选项一起使用。

$ podman ps -a

上述命令的输出列出了所有容器的信息,例如创建它的镜像、启动命令、状态、正在运行的端口以及名称。

CONTAINER ID   IMAGE    COMMAND     CREATED AT                      STATUS              PORTS                                    NAMES
eed30719cd37   centos   /bin/bash   2019-12-09 02:57:37 +0000 UTC   Up 14 minutes ago   0.0.0.0:80->80/udp, 0.0.0.0:80->80/tcp   reverent_liskov

3.6. 删除容器

podman rm 命令删除容器。此命令不会删除处于运行或暂停状态的容器。需要先停止,然后再移除。

$ podman stop eed30719cd37$ podman rm eed30719cd37

3.7. 创建 Pod

podman pod create 命令创建一个 podcreate 命令支持不同的选项。

$ podman pod create

pod create 命令默认创建一个带有 infra 容器的 pod,除非明确将 infra 标志设置为 false。

$ podman pod create --infra = false

Infra container 允许 Podman 连接 pod 中的各种容器。

3.8. 列出 Pod

podman pod list 命令显示所有可用的 pod

$ podman pod list

此命令的输出会显示 pod id、名称、关联容器的数量、infra 容器的 id 等信息:

POD ID         NAME             STATUS      CREATED       # OF CONTAINERS   INFRA ID
7e0a68528aed   gallant_raman    Running    5 seconds ago        1           c6d06673c667

所有 Podman 命令及其用法可以在官方文档中找到。

四、 总结

在本文中,我们了解了 Podman 的基础知识及其功能、与 Docker 的比较以及一些可用的命令。

podman 使用初相关推荐

  1. 选择 podman 的理由, 以及它和 Kubernetes , Docker 的区别

    一.podman 是什么 官方网站: podman.io 官方自己的介绍: https://podman.io/whatis.html 名称 podman ,官方说明是 Pod Manager , 所 ...

  2. python教学反思_Python第3课if教学反思:准备充分承上启下,优化内容模式初显

    5月6日,大陈完成了和初中生一起学Python第3课的5个班教学,本节课教学设计请见我之前发布的:初中生学Python第3课,学习条件控制if语句,这样设计靠谱吗? 本节课在设计之初就吸取了第2课教学 ...

  3. 苹果电脑安装python3密码_mac系统安装Python3初体验

    前沿 对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7. 1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 ...

  4. MapReduce编程初体验

    需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...

  5. 《父亲家书》选:给初为人师的儿子

    文飞:    离家已二十九天了,可能是年纪大了的缘故,不要说你妈妈,就连我也想念你了!为不影响你工作,我坚持不够一个月"决"不给你去信.这不到期了,就按时给你去信.    你上次来 ...

  6. 小程序 缩放_缩放流星应用程序的初体验

    小程序 缩放 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor Ap ...

  7. wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验

    wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言 2 下载.安装wxWidgets 3 wxWidgets应用程序初体验 4 wxWidgets学习资料及利用方法指导 5 ...

  8. 专访思必驰初敏:离开微软、放弃阿里,一个语音交互的“实用主义者”

    栏目简介:激荡六十年,人工智能已经起航.然而在未来面前,我们都还是孩子.究竟是"奇点临近"?还是泡沫行将破灭?为了解惑,<AI名人堂>将汇聚领航者智慧,和你一起探索前行 ...

  9. 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源 | https://my.oschina.net/u ...

最新文章

  1. jsp简介mysql_个人知识管理系统的设计与实现(JSP,MySQL)(含录像)
  2. kangle php集成环境包,PHP探针-UPUPW环境集成包KANGLE专用版 | bftxjc.com contacts
  3. 【Qt】通过QtCreator源码学习Qt(六):命令行参数解析实现
  4. 目标检测新技能!引入知识图谱:Reasoning-RCNN
  5. 浅谈Struts2和Sturts1的区别
  6. Error:NgdBuild:604解决方法(添加NGC文件方法)
  7. 袁隆平等专家联袂直播 启动农民丰收节交易会消费季活动
  8. java自定义jsp标签_深入浅出javaWeb实战第17讲自定义JSP标签(上)
  9. linux中256错误,YUM安装遭遇: [Errno 256] No more mirrors to try
  10. 开发提交审核流程_小程序如何提交审核,多久能通过?
  11. arm-linux-gcc:Command not found的问题
  12. php7数据库备份还原,基于thinkphp的数据库在线备份还原
  13. frc机器人比赛主题_RCC机器人比赛
  14. 如何才能轻松地分析日志?
  15. 2345电脑管家_PS教程第一节:如何正确安装PScc?安装前做好这一步电脑才不会卡顿....
  16. python 和scikit安装
  17. esxi命令关机虚拟机_虚拟机镜像使用说明
  18. 图纸管理软件_企业图纸文档的安全管理与使用,是否遇到这些图纸管理问题?...
  19. Java 重载和重写
  20. 读 python 机器学习实践指南

热门文章

  1. 人生最应该坚持的5件事
  2. java8u221_jdk8u221下载|jdk-8u221-windows-x64 官方免费版 下载_当下软件园_软件下载
  3. 怎么迁移电脑上的数据文件到另一台电脑?
  4. 智慧职教云答案在哪里找_智慧职教云答案在哪里找到,职教云答案软件,职教云题库答案哪里能搜到答案的软件...
  5. 服务器显示正在重新连接,远程连接提示正在重新连接服务器
  6. 基于JavaWeb的在线外卖系统平台设计
  7. 面试经历---广东耶萨智能科技股份有限公司(2016年01月11日上午面试)
  8. 这几种[儿童益智玩具] 永远不过时!
  9. 国产紫光FPGA实现DDS信号发生器
  10. elasticsearch 关键词查询-实现like查询