podman 使用初
引言:
在本文中,我们将了解 Podman
(Pod 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 ps
和podman 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
命令创建一个 pod
。create
命令支持不同的选项。
$ 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 使用初相关推荐
- 选择 podman 的理由, 以及它和 Kubernetes , Docker 的区别
一.podman 是什么 官方网站: podman.io 官方自己的介绍: https://podman.io/whatis.html 名称 podman ,官方说明是 Pod Manager , 所 ...
- python教学反思_Python第3课if教学反思:准备充分承上启下,优化内容模式初显
5月6日,大陈完成了和初中生一起学Python第3课的5个班教学,本节课教学设计请见我之前发布的:初中生学Python第3课,学习条件控制if语句,这样设计靠谱吗? 本节课在设计之初就吸取了第2课教学 ...
- 苹果电脑安装python3密码_mac系统安装Python3初体验
前沿 对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7. 1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 ...
- MapReduce编程初体验
需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...
- 《父亲家书》选:给初为人师的儿子
文飞: 离家已二十九天了,可能是年纪大了的缘故,不要说你妈妈,就连我也想念你了!为不影响你工作,我坚持不够一个月"决"不给你去信.这不到期了,就按时给你去信. 你上次来 ...
- 小程序 缩放_缩放流星应用程序的初体验
小程序 缩放 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor Ap ...
- wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验
wxWidgets刚開始学习的人导引全文件夹 PDF版及附件下载 1 前言 2 下载.安装wxWidgets 3 wxWidgets应用程序初体验 4 wxWidgets学习资料及利用方法指导 5 ...
- 专访思必驰初敏:离开微软、放弃阿里,一个语音交互的“实用主义者”
栏目简介:激荡六十年,人工智能已经起航.然而在未来面前,我们都还是孩子.究竟是"奇点临近"?还是泡沫行将破灭?为了解惑,<AI名人堂>将汇聚领航者智慧,和你一起探索前行 ...
- 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源 | https://my.oschina.net/u ...
最新文章
- jsp简介mysql_个人知识管理系统的设计与实现(JSP,MySQL)(含录像)
- kangle php集成环境包,PHP探针-UPUPW环境集成包KANGLE专用版 | bftxjc.com contacts
- 【Qt】通过QtCreator源码学习Qt(六):命令行参数解析实现
- 目标检测新技能!引入知识图谱:Reasoning-RCNN
- 浅谈Struts2和Sturts1的区别
- Error:NgdBuild:604解决方法(添加NGC文件方法)
- 袁隆平等专家联袂直播 启动农民丰收节交易会消费季活动
- java自定义jsp标签_深入浅出javaWeb实战第17讲自定义JSP标签(上)
- linux中256错误,YUM安装遭遇: [Errno 256] No more mirrors to try
- 开发提交审核流程_小程序如何提交审核,多久能通过?
- arm-linux-gcc:Command not found的问题
- php7数据库备份还原,基于thinkphp的数据库在线备份还原
- frc机器人比赛主题_RCC机器人比赛
- 如何才能轻松地分析日志?
- 2345电脑管家_PS教程第一节:如何正确安装PScc?安装前做好这一步电脑才不会卡顿....
- python 和scikit安装
- esxi命令关机虚拟机_虚拟机镜像使用说明
- 图纸管理软件_企业图纸文档的安全管理与使用,是否遇到这些图纸管理问题?...
- Java 重载和重写
- 读 python 机器学习实践指南
热门文章
- 人生最应该坚持的5件事
- java8u221_jdk8u221下载|jdk-8u221-windows-x64 官方免费版 下载_当下软件园_软件下载
- 怎么迁移电脑上的数据文件到另一台电脑?
- 智慧职教云答案在哪里找_智慧职教云答案在哪里找到,职教云答案软件,职教云题库答案哪里能搜到答案的软件...
- 服务器显示正在重新连接,远程连接提示正在重新连接服务器
- 基于JavaWeb的在线外卖系统平台设计
- 面试经历---广东耶萨智能科技股份有限公司(2016年01月11日上午面试)
- 这几种[儿童益智玩具] 永远不过时!
- 国产紫光FPGA实现DDS信号发生器
- elasticsearch 关键词查询-实现like查询