Podman介绍

Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。

  1. Podman 官网地址:https://podman.io/
  2. Podman 项目地址:https://github.com/containers/libpod

Podman 和docker不同之处?

  1. docker 需要在我们的系统上运行一个守护进程(docker daemon),而podman 不需要
  2. 启动容器的方式不同:
    docker cli 命令通过API跟 Docker Engine(引擎)交互告诉它我想创建一个container,然后docker Engine才会调用OCI container runtime(runc)来启动一个container。这代表container的process(进程)不会是Docker CLIchild process(子进程),而是Docker Enginechild process
    Podman是直接给OCI containner runtime(runc)进行交互来创建container的,所以container process直接是podmanchild process
  3. 因为docke有docker daemon,所以docker启动的容器支持--restart策略,但是podman不支持,如果在k8s中就不存在这个问题,我们可以设置pod的重启策略,在系统中我们可以采用编写systemd服务来完成自启动
  4. docker需要使用root用户来创建容器,但是podman不需要

Podman安装

# yum -y install podman

Podman命令

镜像管理命令

镜像搜索 podman search

[root@node4 ~]# podman search centos
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
Podman.io Podman.io/blacklabelops/centos CentOS Base Image! Built and Updates Daily! 1 [OK] INDEX
NAME 镜像名字
DESCRIPTION 描述
SATRS 星级 数字越大代表使用人数越多
OFFICIAL 是否为官方镜像
AUTOMATED 拓展知识:
根据本地的/etc/containers/registries.conf文件中定义的去搜索
#默认情况下,使用podman搜索从容器仓库中搜索镜像时,基于registries.conf文件,podman按顺序在registry.redhat.io、registry.access.redhat.com、quay.io和docker.io中查找请求的镜像。
[registries.search]
registries = ['registry.redhat.io', 'registry.access.redhat.com', 'quay.io', 'docker.io'] #要添加对不需要身份验证的容器仓库(不安全容器仓库)的访问,必须在[registries.Unsecure]部分下添加该容器仓库的名称。
[registries.insecure]
registries = [] #要禁止从本地系统访问的任何容器仓库都需要添加到[registries.block]部分下。
[registries.block]
registries = [] 关于配置容器容器仓库,您还应该了解以下几点:
1、确保每个容器仓库都用单引号括起来。
2、如果为registries=值设置了多个仓库,则必须用逗号分隔这些仓库。
3、仓库可以通过IP地址或主机名来标识。
4、如果仓库使用非标准端口(即,安全端口不是TCP端口443,不安全端口不是80),则应使用仓库名输入该端口号。例如:host.example.com:9999
5、按照Registries.conf文件每个部分的显示顺序搜索仓库。
6、如果您是运行podman和相关工具的普通用户(无根),则可以创建自己的registries.conf文件来覆盖默认设置。

本地镜像查看 podman images

[root@node4 ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
Podman.io/blacklabelops/centos latest 73f5fb57a402 13 months ago 391 MB

从仓库镜像拉取 podman pull [imange_name]

[root@node4 ~]# podman pull Podman.io/blacklabelops/centos
Trying to pull Podman.io/blacklabelops/centos...Getting image source signatures
Copying blob 18b8eb7e7f01: 69.75 MiB / 69.96 MiB [=============================]
Copying blob 18b8eb7e7f01: 69.96 MiB / 69.96 MiB [=========================] 33s
Copying blob 18b8eb7e7f01: 69.96 MiB / 69.96 MiB [=========================] 33s
Copying blob 9d438d3ad7e8: 61.22 MiB / 61.22 MiB [=========================] 33s
Copying config 73f5fb57a402: 3.98 KiB / 3.98 KiB [==========================] 0s
Writing manifest to image destination
Storing signatures
73f5fb57a402c17df1a74ddb154c4d2e2cd30c366e224d9cb6087ab9c6339d58

本地镜像删除 podman rmi [IMAGE_ID|REPOSITORY]

方法一: podman rmi IMAGE_ID
[root@node4 ~]# podman rmi 73f5fb57a402
73f5fb57a402c17df1a74ddb154c4d2e2cd30c366e224d9cb6087ab9c6339d58
方法二: podman rmi REPOSITORY
[root@node4 ~]# podman rmi Podman.io/blacklabelops/centos
73f5fb57a402c17df1a74ddb154c4d2e2cd30c366e224d9cb6087ab9c6339d58

镜像上传到仓库 podman push

镜像管理综合命令 podman image

[root@node4 ~]# podman image
NAME:
podman image - Manage images USAGE:
podman image command [command options] [arguments...] COMMANDS:
build Build an image using instructions from Podmanfiles
#根据Podmanfiles创建image
history Show history of a specified image
#显示指定镜像的历史信息
import Import a tarball to create a filesystem image
#导入一个文件系统压缩包
exists Check if an image exists in local storage
#检查本地是否存在某个镜像
inspect Displays the configuration of a container or image
#显示容器或镜像的详细信息
load Load an image from Podman archive
#将镜像文件导入到镜像仓库
list, ls list images in local storage
#列出本地存储中的镜像
prune Remove unused images
#移除未使用的镜像
pull Pull an image from a registry
#下载一个镜像到本地
push Push an image to a specified destination
#上传一个镜像到仓库
rm removes one or more images from local storage
#删除一个或多个本地镜像
save Save image to an archive
#将一个镜像保存为一个镜像文件
tag Add an additional name to a local image
#添加一个额外的名称给本地镜像
trust Manage container image trust policy
#信任容器镜像
sign Sign an image
#生成镜像签名,可以根据签名验证镜像的完整性 OPTIONS:
--help, -h show help 镜像历史信息
[root@node4 ~]# podman image history 73f5fb57a402
ID CREATED CREATED BY SIZE COMMENT
73f5fb57a402 13 months ago /bin/sh -c #(nop) LABEL maintainer=Steffen... 0B
<missing> 13 months ago |1 BUILD_DATE=06/10/2018-01:06+0200 /bin/s... 64.2MB
<missing> 13 months ago /bin/sh -c #(nop) ARG BUILD_DATE=undefined 64.2MB
<missing> 15 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 64.2MB
<missing> 15 months ago /bin/sh -c #(nop) LABEL name=CentOS Base I... 64.2MB
<missing> 15 months ago /bin/sh -c #(nop) ADD file:d6a1da927f0b7a7... 73.36MB 镜像导入来自系统压缩包 导入时文件越大越慢
[root@node4 ~]# podman image import centos8.tar
Getting image source signatures
Copying blob 84d82847ae58: 1.29 GiB / 1.31 GiB [===============================]
Copying blob 84d82847ae58: 1.31 GiB / 1.31 GiB [===========================] 14s
Copying config 2d42f6c756bc: 419 B / 419 B [================================] 0s
Writing manifest to image destination
Storing signatures
2d42f6c756bc02640bbb77319b5f1b3a2c51f70fd64d4919d8eb5c0d078c87a7 监测本地镜像是否存在,结合$?
[root@node4 ~]# podman image exists 2d42f6c756bc;echo $?
0
[root@node4 ~]# podman image exists 2d42f6c756bcxxxx;echo $?
1 镜像下载
[root@node4 ~]# podman image pull Podman.io/blacklabelops/centos
Trying to pull Podman.io/blacklabelops/centos...Getting image source signatures
Copying blob 18b8eb7e7f01: 69.92 MiB / 69.96 MiB [=============================]
Copying blob 18b8eb7e7f01: 69.96 MiB / 69.96 MiB [=========================] 23s
Copying blob 18b8eb7e7f01: 69.96 MiB / 69.96 MiB [=========================] 24s
Copying blob 9d438d3ad7e8: 61.22 MiB / 61.22 MiB [=========================] 24s
Copying config 73f5fb57a402: 3.98 KiB / 3.98 KiB [==========================] 0s
Writing manifest to image destination
Storing signatures
73f5fb57a402c17df1a74ddb154c4d2e2cd30c366e224d9cb6087ab9c6339d58 镜像查看 list
[root@node4 ~]# podman image list
REPOSITORY TAG IMAGE ID CREATED SIZE
Podman.io/blacklabelops/centos latest 73f5fb57a402 13 months ago 391 MB 镜像查看 ls
[root@node4 ~]# podman image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
Podman.io/blacklabelops/centos latest 73f5fb57a402 13 months ago 391 MB 镜像删除
[root@node4 ~]# podman image rm 73f5fb57a402
73f5fb57a402c17df1a74ddb154c4d2e2cd30c366e224d9cb6087ab9c6339d58 [root@node4 ~]# podman image tag 2d42f6c756bc tyschool_centos8_1905
[root@node4 ~]# podman image list
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/tyschool_centos8_1905 latest 2d42f6c756bc 5 hours ago 1.4 GB 导出一个镜像到文件 -o output
[root@node4 ~]# podman image save -o centos_7_base Podman.io/blacklabelops/centos
Getting image source signatures
Copying blob 129b697f70e9: 194.43 MiB / 195.64 MiB [===========================]
Copying blob 129b697f70e9: 195.64 MiB / 195.64 MiB [========================] 6s
Copying blob 129b697f70e9: 195.64 MiB / 195.64 MiB [========================] 6s
Copying blob a39553b46393: 177.41 MiB / 177.41 MiB [========================] 6s
Copying config 73f5fb57a402: 3.98 KiB / 3.98 KiB [==========================] 0s
Writing manifest to image destination
Storing signatures 导入一个镜像文件到本地仓库 -i input
[root@node4 ~]# podman image load -i centos_7_base
Getting image source signatures
Copying blob 129b697f70e9: 183.88 MiB / 195.64 MiB [=========================>-]
Copying blob a39553b46393: 171.16 MiB / 177.41 MiB [===========================]
Copying blob 129b697f70e9: 195.64 MiB / 195.64 MiB [========================] 4s
Copying blob a39553b46393: 177.41 MiB / 177.41 MiB [========================] 4s
Copying config 73f5fb57a402: 3.98 KiB / 3.98 KiB [==========================] 0s
Writing manifest to image destination
Storing signatures
Loaded image(s): docker.io/blacklabelops/centos:latest 删除未使用的镜像
[root@node4 ~]# podman image prune --all
2d42f6c756bc02640bbb77319b5f1b3a2c51f70fd64d4919d8eb5c0d078c87a7
b9e394903cd716d89ca1fb6758bfa08dd6ec6a5966fa925c9cf58738062eba05
73f5fb57a402c17df1a74ddb154c4d2e2cd30c366e224d9cb6087ab9c6339d58

容器管理命令

容器查看 ps

#显示开机容器
[root@node4 ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES #显示所有容器,包括没开机的
[root@node4 ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
344ce4a0a6b4 localhost/tyschool_centos8_1905:latest /bin/bash 54 seconds ago Exited (0) 50 seconds ago ty2
78c97bb19bec docker.io/mcnaughton/centos-base:latest /bin/bash 3 minutes ago Exited (0) About a minute ago ty1

容器创建 run

方法一:根据本地镜像创建容器

[root@node4 ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/tyschool_centos8_1905 latest 2d42f6c756bc 7 hours ago 1.4 GB
docker.io/blacklabelops/centos latest 73f5fb57a402 13 months ago 391 MB
[root@node4 ~]# podman run -it -name ty2 localhost/tyschool_centos8_1905 /bin/bash -i 开启容器交互
-t 分配一个TTY终端[假的] 拓展
--privileged 扩展容器权限

方法二: 容器创建的时候,优先从本地仓库找镜像,本地没有就回去远程仓库拉取到本地

本地仓库没有镜像
[root@node4 ~]# podman run --name ty1 -it docker.io/mcnaughton/centos-base /bin/bash
Trying to pull docker.io/mcnaughton/centos-base...Getting image source signatures
Copying blob a02a4930cb5d: 0 B / 71.68 MiB [-----------------------------------]
Copying blob a02a4930cb5d: 30.30 MiB / 71.68 MiB [============>----------------]
Copying blob a02a4930cb5d: 71.27 MiB / 71.68 MiB [=============================]
Copying blob a02a4930cb5d: 71.68 MiB / 71.68 MiB [=========================] 34s
Copying blob a02a4930cb5d: 71.68 MiB / 71.68 MiB [=========================] 34s
Copying blob f6168f316445: 23.45 MiB / 23.45 MiB [=========================] 34s
Copying blob cf55ab518523: 99.57 MiB / 99.57 MiB [=========================] 34s
Copying blob 68b1bf62d7e6: 1.19 KiB / 1.19 KiB [===========================] 34s
Copying config b9e394903cd7: 4.99 KiB / 4.99 KiB [==========================] 0s
Writing manifest to image destination
Storing signatures

容器启动、关闭、重启、暂停、恢复

#启动容器  start
[root@node4 ~]# podman start ty1
ty1
查看容器开启了
[root@node4 ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78c97bb19bec docker.io/mcnaughton/centos-base:latest /bin/bash 4 minutes ago Up 5 seconds ago ty1 #关闭容器 stop
[root@node4 ~]# podman stop ty1
78c97bb19bec488b8bf5a6f68cdff9ecc20980b3c2c9e2d4c56a0946f539bd02
查看容器关闭了
[root@node4 ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES #重启容器 restart
[root@node4 ~]# podman restart ty1
78c97bb19bec488b8bf5a6f68cdff9ecc20980b3c2c9e2d4c56a0946f539bd02
[root@node4 ~]#
[root@node4 ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78c97bb19bec docker.io/mcnaughton/centos-base:latest /bin/bash 6 minutes ago Up 2 seconds ago ty1 #暂停容器 pause
[root@node4 ~]# podman pause ty1
78c97bb19bec488b8bf5a6f68cdff9ecc20980b3c2c9e2d4c56a0946f539bd02
查看状态
[root@node4 ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
344ce4a0a6b4 localhost/tyschool_centos8_1905:latest /bin/bash 4 minutes ago Exited (0) 4 minutes ago ty2
78c97bb19bec docker.io/mcnaughton/centos-base:latest /bin/bash 6 minutes ago Paused ty1 #恢复暂停容器 unpause
[root@node4 ~]# podman unpause ty1
78c97bb19bec488b8bf5a6f68cdff9ecc20980b3c2c9e2d4c56a0946f539bd02
查看状态
[root@node4 ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78c97bb19bec docker.io/mcnaughton/centos-base:latest /bin/bash 6 minutes ago Up 25 seconds ago ty1

容器性能查看 top

podman top 容器名称
[root@node4 ~]# podman top ty1
USER PID PPID %CPU ELAPSED TTY TIME COMMAND
root 1 0 0.000 6m9.377354027s pts/0 0s /bin/bash

容器连接 exec

连接一个运行容器,执行/bin/bash命令
[root@node4 ~]# podman exec -it ty1 /bin/bash
[root@78c97bb19bec /]#

容器连接 attach

将一个运行容器的标准输出、标准错误输出、标准输入调到前台
[root@node4 ~]# podman attach ty1
[root@78c97bb19bec /]#

根据容器生成镜像 export

[root@node4 ~]# podman export -o ty1.tar ty1
[root@node4 ~]# podman import ty1.tar baism:ty1
Getting image source signatures
Copying blob 854836d1c5c3: 491.28 MiB / 505.18 MiB [===========================]
Copying blob 854836d1c5c3: 505.18 MiB / 505.18 MiB [========================] 5s
Copying config 25581780c97b: 419 B / 419 B [================================] 0s
Writing manifest to image destination
Storing signatures
25581780c97b41ed62e0d6a9e41f8725cfaa93653e32adbb65369d3e527d235c

podman import ty1.tar baism:ty1

baism:ty1 自定义仓库的名称:标签

打包更改过的容器为镜像 commit

[root@node4 ~]# podman commit ty1 baism:latest
Getting image source signatures
Skipping blob 071d8bd76517 (already present): 200.44 MiB / 200.44 MiB [=====] 0s
Skipping blob 3c8ab5053a82 (already present): 57.01 MiB / 57.01 MiB [=======] 0s
Skipping blob ba3cdff1294c (already present): 286.14 MiB / 286.14 MiB [=====] 0s
Skipping blob e25e400e5c38 (already present): 28.50 KiB / 28.50 KiB [=======] 0s
Skipping blob 071d8bd76517 (already present): 200.44 MiB / 200.44 MiB [=====] 1s
Skipping blob 071d8bd76517 (already present): 200.44 MiB / 200.44 MiB [=====] 1s
Skipping blob 3c8ab5053a82 (already present): 57.01 MiB / 57.01 MiB [=======] 1s
Skipping blob ba3cdff1294c (already present): 286.14 MiB / 286.14 MiB [=====] 1s
Skipping blob e25e400e5c38 (already present): 28.50 KiB / 28.50 KiB [=======] 1s
Copying blob 83e9209f930c: 114.44 MiB / 114.44 MiB [========================] 1s
Copying config d558217acef1: 4.08 KiB / 4.08 KiB [==========================] 0s
Writing manifest to image destination
Storing signatures
d558217acef109e465d5ce65d60de7c8619cc3c8cbbcde57e418555516ba3ec0

十、RHEL Podman命令的更多相关文章

  1. 十年linux命令总结

    十年linux命令总结 本文链接: http://codingstandards.iteye.com/blog/786653 关于命令类型划分 本表中列出了我穷尽了我所有的记忆整理出来的Linux命令 ...

  2. Python进阶(三十五)-Fiddler命令行和HTTP断点调试

    Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令   上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的se ...

  3. Java 设计模式系列(十四)命令模式(Command)

    Java 设计模式系列(十四)命令模式(Command) 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复 ...

  4. 风炫安全web安全学习第三十节课 命令执行&代码执行基础

    风炫安全web安全学习第三十节课 命令执行&代码执行基础 代码执行&命令执行 RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. 远程系统命令执行 ...

  5. RHEL 7 命令行注册和激活订阅服务

    导读 前一阵子,红帽推出了开发者免费使用订阅功能,只要注册成为红帽开发者就可以免费使用包括  RHEL7  在内的开发套件. 今天我们就来看一看怎么使用命令行来快速注册和激活订阅服务,以后就可以方便地 ...

  6. Git详解之十 Git常用命令

    下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一. ...

  7. 设计模式C#实现(十五)——命令模式

    意图 0 适用性 1 结构 2 实现 3 效果 4 参考 5 意图 将请求封装成一个对象,客户接受请求参数:可以对请求排队或者记录请求日志,以及可以支持撤销操作 适用性 抽象出待执行的动作以参数化某对 ...

  8. 攻城狮在路上(叁)Linux(十六)--- 命令与文件的查找

    一.脚本文件的查询: 1.命令格式:which [-a] command; <==通过PATH来查找. -a:列出所有的,而不是仅列出第一个. 示例: which ifconfig; 注意:由于 ...

  9. 十五、命令(Command)模式--行为型模式(Behavioral Pattern)

    命令模式又称为行动(Action)模 式或交易(Transaction)模式.命令模式把一个请求或者操作封装到一个对象中. 命令模式是对命令的封装.命令模式把发出命令的责任和执行命令的责任分割开,委派 ...

随机推荐

  1. zabbix 报表动作日志 报错”503“

  2. 全局异常处理及参数校验-SpringBoot 2.7 实战基础 (建议收藏)

    优雅哥 SpringBoot 2.7 实战基础 - 08 - 全局异常处理及参数校验 前后端分离开发非常普遍,后端处理业务,为前端提供接口.服务中总会出现很多运行时异常和业务异常,本文主要讲解在 Sp ...

  3. ENSP NE40E 报错(NE1启动操作超时,请检查与服务器链接后重试!)

    前言:某网友淘宝找我咨询NE40E启动失败的问题,事后我整理的处理过程,供各位同行参考. 系统版本:windows 10 软件版本: ENSP:V100R003C00 virtual BOX:5.2. ...

  4. kafka报错 日志压缩报错直接退出

    Resetting  first dirty ofset to log start  offset 2971862 since the checkpointed offset 12675089 is ...

  5. [CF1515F] Phoenix and Earthquake(图论推导,构造)

    题面 在紧张又忙碌地准备联合省选时,发生了大地震,把原本要参赛的 n n n 个城市之间的全部 m m m 条道路震垮了,使得原本互相都能到达的这 n n n 个城市无法交通了.现在,需要紧急恢复 n ...

  6. C++ 初识函数模板

    1. 前言 什么是函数模板? 理解什么是函数模板,须先搞清楚为什么需要函数模板. 如果现在有一个需求,要求编写一个求 2 个数字中最小数字的函数,这 2 个数字可以是 int类型,可以是 float ...

  7. KingbaseESV8R6不同隔离级下xmin的区别

    背景 sys_stat_activity视图中用两个字段表示: backend_xid表示事务开始需要申请的事务id backend_xmin表示一个事务快照,表示当前数据库中最小的正在运行的事务号, ...

  8. KingbaseES R6 集群物理copy方式手工添加新备库节点

    案例说明: 对于主库数据量比较大的环境,在添加新节点是可以采用在线clone方式创建新的备库节点,也可以在离线的状态下,直接拷贝其中一个备库的所有集群相关目录来创建新的备库节点.本案例介绍了通过离线物 ...

  9. Docker容器网络基础总结

    ifconfig 之 docker0 基于Linux的虚拟网桥(通用网络设备的抽象) 虚拟网桥特点: 1. 可以设置IP地址 2.相当于拥有一个隐藏的虚拟网卡 docker0 的地址划分 IP: 17 ...

  10. 【读书笔记】C#高级编程 第二十章 诊断

    (一)诊断概述 名称空间System.Diagnostics提供了用于跟踪.事件日志.性能测量以及代码协定的类.System.Diagnostics.Contracts名称空间中的类可以定义前提条件. ...