podman基础
1.什么是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,6. 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作为镜像仓库,这也是兼容性最关键的部分。
centos8 安装部署podman
1. 下载podman
[root@localhost yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2495 100 2495 0 0 13708 0 --:--:-- --:--:-- --:--:-- 13633
[root@localhost yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@localhost yum.repos.d]# cd
[root@localhost ~]# yum -y install podman
2.配置加速器
[root@localhost ~]# vim /etc/containers/registries.conf
unqualified-search-registries = ["docker.io"] //这里只需要docker.io
[[registry]]
location= "k9su2aqs.mirror.aliyuncs.com" //前面的httpd://删掉
3.常用基础命令
podman安装完之后不需要启动命令就可以直接使用
容器
podman run 创建并启动容器
[root@localhost ~]# podman run -dit --name bbb docker.io/library/busybox
33319a0de2f5216183241e06c691e6c2512e33f77b3f145dc5d3a3bcfa90b889
podman ps 查看容器
[root@localhost ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
33319a0de2f5 docker.io/library/busybox:latest sh 3 seconds ago Up 3 seconds ago bbb
podman restart 重启容器
[root@localhost ~]# podman restart 87
870a4ff5ba62cb01ad5f9bffd7f3f57e0f60c52459a5ccd092040a50145952f4
podman export 导出容器
[root@localhost ~]# podman export -o c.tar c1
[root@localhost ~]# ls
anaconda-ks.cfg c.tar passwd
podman import 导入容器快照
[root@localhost ~]# podman import c.tar
Getting image source signatures
Copying blob afd04d4c44ac [----------------------------------] 0.0b / 0.0b
Copying config 4795b60330 done
Writing manifest to image destination
Storing signatures
sha256:4795b603305e8039e21fa6a9c8d036e5581d333c021d8e8663e73cef4d0afca6
podman rm 删除容器
[root@localhost ~]# podman rm -f bbb
55e7b50f5f0a1dab74f04b8b85d198cfcf62054c97cfee0b55c68b5e909cbc91
podman logs 查看日志
[root@localhost ~]# podman logs bbb
/ # ls
bin dev etc home proc root run sys tmp usr var
/ # wxit
sh: wxit: not found
/ # exit
镜像
podman search 检索镜像
[root@localhost ~]# podman search busybox
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/library/busybox Busybox base image. 2711 [OK]
docker.io docker.io/rancher/busybox 0
docker.io docker.io/ibmcom/busybox 0
podman pull 获取镜像
[root@localhost ~]# podman run -dit --name b1 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
870a4ff5ba62cb01ad5f9bffd7f3f57e0f60c52459a5ccd092040a50145952f4
podman images 列出镜像
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest 7a80323521cc 2 weeks ago 1.47 MB
podman rmi 删除镜像
[root@localhost ~]# podman rmi busybox
Untagged: docker.io/library/busybox:latest
Deleted: 7a80323521ccd4c2b4b423fa6e38e5cea156600f40cd855e464cc52a321a24dd
podman save 导出镜像
[root@localhost ~]# podman save > c1.tar centos
[root@localhost ~]# ls
anaconda-ks.cfg c1.tar c.tar passwd
podman load 导入镜像
[root@localhost ~]# podman load < c1.tar
Getting image source signatures
Copying blob 2653d992f4ef [----------------------------------] 0.0b / 0.0b
Copying config 300e315adb done
Writing manifest to image destination
Storing signatures
Loaded image(s): quay.io/centos/centos:latest
拉取推送镜像
[root@localhost ~]# podman tag quay.io/centos/centos:latest quay.io/renweiwei/test:centos
[root@localhost ~]# podman login
Username: renweiwei
Password:
Login Succeeded!
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 4795b603305e 52 minutes ago 217 MB
docker.io/library/busybox latest 7a80323521cc 2 weeks ago 1.47 MB
quay.io/renweiwei/test centos 300e315adb2f 20 months ago 217 MB
[root@localhost ~]# podman push docker.io/library/busybox:latest
Getting image source signatures
Copying blob 084326605ab6 [--------------------------------------] 8.0b / 1.4MiB
Error: writing blob: initiating layer upload to /v2/library/busybox/blobs/uploads/ in registry-1.docker.io: errors:
denied: requested access to the resource is denied
unauthorized: authentication required
[root@localhost ~]# podman pull docker.io/library/busybox:latest
Trying to pull docker.io/library/busybox:latest...
Getting image source signatures
Copying blob 50783e0dfb64 [--------------------------------------] 0.0b / 0.0b
Copying config 7a80323521 done
Writing manifest to image destination
Storing signatures
7a80323521ccd4c2b4b423fa6e38e5cea156600f40cd855e464cc52a321a24dd