podman
文章目录
podman简述
Podman 是一个开源项目,可在大多数 Linux 平台上使用,并位于GitHub 上。Podman 是一个无守护进程的容器引擎,用于在 Linux 系统上开发、管理和运行 Open Container Initiative (OCI) 容器和容器映像。Podman 提供了一个与 Docker 兼容的命令行前端,它可以简单地为 Docker cli ,alias docker=podman。Podman 还提供了一个套接字激活的 REST API 服务,以允许远程应用程序启动按需容器。此 REST API 还支持 Docker API,允许 docker-py 和 docker-compose 的用户与 Podman 作为服务进行交互。
Podman 控制下的容器可以由 root 或非特权用户运行。Podman 使用libpod库管理整个容器生态系统,包括 pod、容器、容器映像和容器卷。Podman 专注于帮助您维护和修改 OCI 容器镜像的所有命令和功能,例如拉取和标记。它允许您在生产环境中创建、运行和维护从这些映像创建的容器。
Podman 服务仅在 Linux 平台上运行,但 podman 远程 REST API 客户端存在于 Mac 和 Windows 平台上,并且可以通过 ssh 与运行在 Linux 机器或 VM 上的 Podman 服务进行通信。Mac 客户端。
podman安装
Podman 在 CentOS 7 的默认 Extras 存储库和 CentOS 8 和 Stream 的 AppStream 存储库中可用;可直接进行yum安装。
[root@weijunhao ~]# dnf -y install podman --allowerasing
......
Installed:
conmon-2:2.0.29-1.module_el8.5.0+890+6b136101.x86_64
containernetworking-plugins-1.0.0-1.module_el8.5.0+890+6b136101.x86_64
containers-common-2:1-2.module_el8.5.0+890+6b136101.noarch
criu-3.15-3.module_el8.5.0+890+6b136101.x86_64
libnet-1.1.6-15.el8.x86_64
podman-3.3.1-9.module_el8.5.0+988+b1f0b741.x86_64
podman-catatonit-3.3.1-9.module_el8.5.0+988+b1f0b741.x86_64
protobuf-c-1.3.0-6.el8.x86_64
runc-1.0.2-1.module_el8.5.0+911+f19012f9.x86_64
Removed:
containerd.io-1.6.7-3.1.el8.x86_64
docker-ce-3:20.10.17-3.el8.x86_64
docker-ce-rootless-extras-20.10.17-3.el8.x86_64
Complete!
//修改配置文件
[root@weijunhao ~]# cd /etc/containers/
[root@weijunhao containers]# ls
certs.d oci policy.json registries.conf registries.conf.d registries.d storage.conf
[root@weijunhaot containers]# vim registries.conf
unqualified-search-registries = ["docker.io"] //设置拉取镜像取docker官网拉取
[[registry]]
prefix = "docker.io"
location = "bmhtctzo.mirror.aliyuncs.com" //配置加速器
podman用法
查看版本
[root@weijunhao ~]# podman -v
podman version 3.3.1
[root@weijunhao ~]# podman version
Version: 3.3.1
API Version: 3.3.1
Go Version: go1.16.7
Built: Wed Nov 10 05:23:56 2021
OS/Arch: linux/amd64
//查看详细信息
[root@weijunhao ~]# podman info
......
version:
APIVersion: 3.3.1
Built: 1636493036
BuiltTime: Wed Nov 10 05:23:56 2021
GitCommit: ""
GoVersion: go1.16.7
OsArch: linux/amd64
Version: 3.3.1
登入和登出
[root@weijunhao ~]# podman login docker.io
Username: wjh0077
Password:
Login Succeeded!
[root@weijunhao ~]# podman logout
Removed login credentials for docker.io
image镜像管理子命令
build
基于dockerfile创建镜像
diff
检查映像文件系统的更改
示例:
[root@weijunhao containers]# cd
[root@weijunhao ~]# podman diff httpd
C /usr
C /usr/local
C /usr/local/bin
A /usr/local/bin/httpd-foreground
history
显示指定镜像的历史记录
[root@weijunhao ~]# podman image history httpd
ID CREATED CREATED BY SIZE COMMENT
dabbfbe0c57b 7 months ago /bin/sh -c #(nop) CMD ["httpd-foreground"] 0 B
<missing> 7 months ago /bin/sh -c #(nop) EXPOSE 80 0 B
<missing> 7 months ago /bin/sh -c #(nop) COPY file:c432ff61c4993e... 3.58 kB
<missing> 7 months ago /bin/sh -c #(nop) STOPSIGNAL SIGWINCH 0 B ......
inspect
显示镜像的配置
[root@weijunhao ~]# podman image inspect httpd
......
"created": "2021-12-21T01:36:12.533128291Z",
"created_by": "/bin/sh -c #(nop) EXPOSE 80",
"empty_layer": true
},
{
"created": "2021-12-21T01:36:12.729599368Z",
"created_by": "/bin/sh -c #(nop) CMD [\"httpd-foreground\"]",
"empty_layer": true
}
],
"NamesHistory": [
"docker.io/library/httpd:latest"
]
}
]
[ro
list
列出本地存储中镜像
[root@weijunhao ~]# podman image list
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest beae173ccac6 7 months ago 1.46 MB
docker.io/library/httpd latest dabbfbe0c57b 7 months ago 148 MB
rm
删除镜像
[root@weijunhao ~]# podman image rm httpd
Untagged: docker.io/library/httpd:latest
Deleted: dabbfbe0c57b6e5cd4bc089818d3f664acfad496dc741c9a501e72d15e803b34
[root@weijunhao ~]# podman image list
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest beae173ccac6 7 months ago 1.46 MB
save
将镜像保存到本地
[root@weijunhao ~]# podman image save busybox > busybox.tar
[root@weijunhao ~]# ls
anaconda-ks.cfg busybox.tar http.tar man.test.config
load
从tar存档加载镜像
[root@weijunhao ~]# podman image load < busybox.tar
Getting image source signatures
Copying blob 01fd6df81c8e skipped: already exists
Copying config beae173cca done
Writing manifest to image destination
Storing signatures
Loaded image(s): docker.io/library/busybox:latest
[root@weijunhao ~]# podman image list
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest beae173ccac6 7 months ago 1.46 MB
prune
删除未使用的镜像
[root@weijunhao ~]# podman image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
search
搜索镜像
[root@weijunhao ~]# podman image search busybox
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/library/busybox Busybox base image. 2712 [OK]
docker.io docker.io/rancher/busybox 0
docker.io docker.io/ibmcom/busybox 0
docker.io docker.io/openebs/busybox-client 0
docker.io docker.io/antrea/busybox 0
docker.io docker.io/ibmcom/busybox-amd64 0
docker.io docker.io/ibmcom/busybox-ppc64le 0
docker.io docker.io/yauritux/busybox-curl Busybox with CURL 16 ......
pull
拉取镜像
[root@weijunhao ~]# podman image pull busybox
Trying to pull docker.io/library/busybox:latest...
Getting image source signatures
Copying blob 5cc84ad355aa [------------------------------] 0.0b / 0.0b
Copying config beae173cca done
Writing manifest to image destination
Storing signatures
beae173ccac6ad749f76713cf4440fe3d21d1043fe616dfbe30775815d1d0f6a
tag
对镜像修改标签
[root@weijunhao ~]# podman tag busybox beae173ccac6/busybox:v0.1
[root@weijunhao ~]# podman image list
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest beae173ccac6 7 months ago 1.46 MB
localhost/beae173ccac6/busybox v0.1 beae173ccac6 7 months ago 1.46 MB
push
上传镜像
示例
先打标签,改名
命名规则:自己的账户名/镜像名:版本号(标签)
tree
以树格式打印镜像的图层层次结构
[root@weijunhao ~]# podman image tree busybox
Image ID: beae173ccac6
Tags: [docker.io/library/busybox:latest localhost/beae173ccac6/busybox:v0.1]
Size: 1.464MB
Image Layers
└── ID: 01fd6df81c8e Size: 1.459MB Top Layer of: [docker.io/library/busybox:latest localhost/beae173ccac6/busybox:v0.1]
container容器管理子命令
create
创建一个或多个容器
[root@weijunhao ~]# podman container create httpd
bec2016f608f810fa171fd9d29ffdda8ea4c3de738153b9fb451b146008708fb
[root@weijunhao ~]# podman container create --name alg httpd
e0caf74ef8cac36b8e7be1c4a1be593aefcb223ce0160af2b203938ac4d8dec8
start
启动一个或多个容器
[root@weijunhao ~]# podman container start e0caf74ef8ca alg
e0caf74ef8ca
ps或者list
容器列表
示例
[root@weijunhao ~]# podman container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f18617f6997 docker.io/library/httpd:latest httpd-foreground About a minute ago Up 34 seconds ago strange_dijkstra
c4eeac336637 docker.io/library/httpd:latest httpd-foreground About a minute ago Up 34 seconds ago alg
或者
[root@weijunhao ~]# podman container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f18617f6997 docker.io/library/httpd:latest httpd-foreground About a minute ago Up 45 seconds ago strange_dijkstra
c4eeac336637 docker.io/library/httpd:latest httpd-foreground About a minute ago Up 45 seconds ago alg
用法大致相同
参数
-a 或 --all //列出所有容器,包括未运行
-s 或 --size //查看本地机上所有运行实例的大小
-q 或 --quiet //查看容器id
rename
重命名现有容器
示例
[root@weijunhao ~]# podman container rename alg web
[root@weijunhao ~]# podman container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e0caf74ef8ca docker.io/library/httpd:latest httpd-foreground 6 minutes ago Up 4 minutes ago web
stop
停止一个或多个容器
[root@weijunhao ~]# podman stop e0caf74ef8ca web
web
e0caf74ef8ca
[root@weijunhao ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
restart
重新启动一个或多个容器
[root@weijunhao ~]# podman container restart web
e0caf74ef8cac36b8e7be1c4a1be593aefcb223ce0160af2b203938ac4d8dec8
[root@weijunhao ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e0caf74ef8ca docker.io/library/httpd:latest httpd-foreground 9 minutes ago Up 9 seconds ago web
run
在新容器中运行命令(可以理解为创建并启动容器)
[root@weijunhao ~]# podman container run -itd --name wjh busybox
c69516b97ffc3ff786c5cda6edc2fff8db21c0f1b99c03bfa0a1078555e88fdc
[root@weijunhao ~]# podman container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e0caf74ef8ca docker.io/library/httpd:latest httpd-foreground 12 minutes ago Up 2 minutes ago web
c69516b97ffc docker.io/library/busybox:latest sh 13 seconds ago Up 13 seconds ago wjh
参数
--name 容器名 //指定容器名
--label 标记名 //加标记方便查找
-it //让容器的输入保持打开状态,并分配终端
-c //不进行登录执行命令
-d //将容器放入后台进行执行
-v //可以创建多个数据卷
也可挂载到宿主机的目录,如果本地没有目录,则自动生成一个目录
挂载方法 //宿主机目录:docker数据卷
[root@docker ~]# docker run -d -v /var/www/:/www nginx //在本地创建一个/var/www目录 ,在容器里面创建一个/www目录;将本地目录映射到容器目录
-p //映射端口 宿主机端:容器端口
-P //发布所有公开的端口(随机映射端口号)
--volumes-from //容器和容器之间建立联系
将容器的所有目录共享给新创建的容器
[root@docker ~]# docker run --volumes-from 想要挂载的容器 --name 指定新容器名 镜像
[root@docker ~]# docker run -it --volumes-from wxh --name wwww nginx /bin/bash
----restart always //永久开启容器,服务重启后容器也会启动,不会关闭
--rm //一次性容器,退出后直接删除
attach
连接到运行的容器
[root@weijunhao ~]# podman container attach wjh
/ # ls
bin dev etc home proc root run sys tmp usr var
/ #
exec
在正在运行的容器中运行进程
示例
[root@weijunhao ~]# podman container exec -it hh /bin/sh
/ # ls
bin dev etc home proc root run sys tmp usr var
cp
在容器和本地文件之间复制文件/文件夹
示例
[root@weijunhao ~]# podman container cp a hh:/
[root@weijunhao ~]# podman container exec -it hh /bin/sh
/ # ls
a bin dev etc home proc root run sys tmp usr var
kill
使用特定信号终止一个或多个正在运行的容器
[root@weijunhao ~]# podman kill web
web
[root@weijunhao ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
port
列出端口映射或容器的特定映射
[root@weijunhao ~]# podman container run -d --name kkk -p 888:80 httpddd30bf0a6a97efb878d45f7f97037bada96c5903320700ae0618fe0981aa7f1b
[root@weijunhao ~]# podman container port kkk
80/tcp -> 0.0.0.0:888