podman安装及使用命令

什么是Podman?

在这里插入图片描述
Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。

Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。

Podman 官网地址:https://podman.io/

Podman和Docker的主要区别是什么?

dockers在实现CRI的时候,它需要一个守护进程,其次需要以root运行,因此这也带来了安全隐患。
podman不需要守护程序,也不需要root用户运行,从逻辑架构上,比docker更加合理。
在docker的运行体系中,需要多个daemon才能调用到OCI的实现RunC。
在容器管理的链路中,Docker Engine的实现就是dockerd
daemon,它在linux中需要以root运行,dockerd调用containerd,containerd调用containerd-shim,然后才能调用runC。顾名思义shim起的作用也就是“垫片”,避免父进程退出影响容器的运训
podman直接调用OCI,runtime(runC),通过common作为容器进程的管理工具,但不需要dockerd这种以root身份运行的守护进程。
在podman体系中,有个称之为common的守护进程,其运行路径通常是/usr/libexec/podman/conmon,它是各个容器进程的父进程,每个容器各有一个,common的父则通常是1号进程。podman中的common其实相当于docker体系中的containerd-shim。
在这里插入图片描述

Podman的使用与docker有什么区别?

podman的定位也是与docker兼容,因此在使用上面尽量靠近docker。在使用方面,可以分成两个方面来说,一是系统构建者的角度,二是使用者的角度。

在系统构建者方面,用podman的默认软件,与docker的区别不大,只是在进程模型、进程关系方面有所区别。如果习惯了docker几个关联进程的调试方法,在podman中则需要适应。可以通过pstree命令查看进程的树状结构。总体来看,podman比docker要简单。由于podman比docker少了一层daemon,因此重启的机制也就不同了。

在使用者方面,podman与docker的命令基本兼容,都包括容器运行时(run/start/kill/ps/inspect),本地镜像(images/rmi/build)、镜像仓库(login/pull/push)等几个方面。因此podman的命令行工具与docker类似,比如构建镜像、启停容器等。甚至可以通过alias

docker=podman可以进行替换。因此,即便使用了podman,仍然可以使用http://docker.io作为镜像仓库,这也是兼容性最关键的部分。

podman安装和基础命令

安装podman

可以不用安装yum源,因为当前yum源版本有podman,但是我这边安装的镜像是不一样的所以还得弄几个命令修改一下才能使用

[root@192 ~]# ls /etc/yum.repos.d/
CentOS-Linux-AppStream.repo          CentOS-Linux-FastTrack.repo
CentOS-Linux-BaseOS.repo             CentOS-Linux-HighAvailability.repo
CentOS-Linux-ContinuousRelease.repo  CentOS-Linux-Media.repo
CentOS-Linux-Debuginfo.repo          CentOS-Linux-Plus.repo
CentOS-Linux-Devel.repo              CentOS-Linux-PowerTools.repo
CentOS-Linux-Extras.repo             CentOS-Linux-Sources.repo

修改 centos 文件内容

[root@192 ~]# dnf list all |grep podman
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
[root@192 ~]# sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
[root@192 ~]# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

生成缓存更新(第一次更新,速度稍微有点慢,耐心等待两分钟左右)

[root@192 ~]# yum makecache
CentOS Linux 8 - AppStream              3.0 MB/s | 8.4 MB     00:02    
CentOS Linux 8 - BaseOS                 2.2 MB/s | 4.6 MB     00:02    
CentOS Linux 8 - Extras                  16 kB/s |  10 kB     00:00    
Metadata cache created.

运行 yum update 升级

[root@192 ~]# yum update -y

安装podman

[root@192 ~]# dnf -y install podman-docker

查看有没有包,并看看能不能使用

[root@192 ~]# which podman
/usr/bin/podman
[root@192 ~]# which docker
/usr/bin/docker
[root@192 ~]# rpm -qa |grep docker
podman-docker-3.3.1-9.module_el8.5.0+988+b1f0b741.noarch
[root@192 ~]# podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE

配置一个加速器,这边用的是阿里云的

[root@192 ~]# cd /etc/containers/
[root@192 containers]# ls
certs.d  policy.json      registries.conf.d  storage.conf
oci      registries.conf  registries.d
[root@192 containers]# vim registries.conf

unqualified-search-registries = ["registry.fedoraproject.org", "registry
.access.redhat.com", "registry.centos.org", "docker.io"]

[[registry]]
prefix = "docker.io"
location = "6e5o0ntr.mirror.aliyuncs.com"
# # The "prefix" field is used to choose the relevant [[registry]] TOML 
table;

拉取一个镜像

[root@192 ~]# podman pull busybox
Resolved "busybox" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/busybox:latest...
Getting image source signatures
Copying blob 50783e0dfb64 done  
Copying config 7a80323521 done  
Writing manifest to image destination
Storing signatures
7a80323521ccd4c2b4b423fa6e38e5cea156600f40cd855e464cc52a321a24dd

[root@192 ~]# podman pull centos
Resolved "centos" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull quay.io/centos/centos:latest...
Getting image source signatures
Copying blob 7a0437f04f83 done  
Copying config 300e315adb done  
Writing manifest to image destination
Storing signatures
300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55
[root@192 ~]# 

明确指定在哪个网站拉取镜像
比如去官方

[root@192 ~]# podman pull docker.io/library/centos
Trying to pull docker.io/library/centos:latest...
Getting image source signatures
Copying blob a1d0c7532777 done  
Copying config 5d0da3dc97 done  
Writing manifest to image destination
Storing signatures
5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6
[root@192 ~]# 

这里可以看到用指定的跟不指定的版本都不一样

[root@192 ~]# podman images
REPOSITORY                 TAG         IMAGE ID      CREATED        SIZE
docker.io/library/busybox  latest      7a80323521cc  2 weeks ago    1.47 MB
docker.io/library/centos   latest      5d0da3dc9764  11 months ago  239 MB
quay.io/centos/centos      latest      300e315adb2f  20 months ago  217 MB
[root@192 ~]# 


podman基础命令使用

cp 在容器和本地文件系统之间复制文件/文件夹‎

[root@192 ~]# podman ps
CONTAINER ID  IMAGE                             COMMAND     CREATED             STATUS                 PORTS       NAMES
e8cc176fdcd7  docker.io/library/busybox:latest  sh          About a minute ago  Up About a minute ago              frosty_stonebraker
[root@192 ~]# podman cp anaconda-ks.cfg e8cc176fdcd7:/
[root@192 ~]# 

[root@192 ~]# podman run -it busybox
/ # ls
anaconda-ks.cfg  etc              root             tmp
bin              home             run              usr
dev              proc             sys              var
/ # 

[root@192 ~]# podman cp  e8cc176fdcd7:/anaconda-ks.cfg /opt/
[root@192 ~]# ls /opt/
anaconda-ks.cfg
[root@192 ~]# 

create 创建但不启动容器‎

[root@192 ~]# podman create --name web httpd
1d771fd1a125e70cb7c843a8086d695535598ab8c10175286ff078dd862266f1
[root@192 ~]# podman ps
CONTAINER ID  IMAGE                             COMMAND     CREATED        STATUS            PORTS       NAMES
e8cc176fdcd7  docker.io/library/busybox:latest  sh          8 minutes ago  Up 8 minutes ago              frosty_stonebraker
[root@192 ~]# 
[root@192 ~]# podman ps -a
CONTAINER ID  IMAGE                             COMMAND           CREATED         STATUS            PORTS       NAMES
e8cc176fdcd7  docker.io/library/busybox:latest  sh                9 minutes ago   Up 9 minutes ago              frosty_stonebraker
1d771fd1a125  docker.io/library/httpd:latest    httpd-foreground  28 seconds ago  Created                       web
[root@192 ~]# 

diff ‎检查容器文件系统上的更改‎

[root@192 ~]# podman diff e8cc176fdcd7
A /anaconda-ks.cfg
C /etc
C /root
A /root/.ash_history
[root@192 ~]# 

events ‎显示podman事件‎

[root@192 ~]# podman events

exec ‎在正在运行的容器中运行进程‎

[root@192 ~]# podman exec -it e8cc176fdcd7 /bin/sh
/ # exit
[root@192 ~]# 

attach ‎附加到正在运行的容器‎

//这边ls,这边会话退出
[root@192 ~]#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值