podman部署与应用
What is Podman?
Podman 是一个无守护程序、开源的 Linux 原生工具,旨在使用开放容器计划 (OCI) 容器和容器映像轻松查找、运行、构建、共享和部署应用程序。Podman 提供了一个命令行界面 (CLI),任何使用过 Docker 容器引擎的人都熟悉。大多数用户可以简单地将Docker别名为Podman(别名docker=podman),而不会出现任何问题。与其他常见的容器引擎(Docker,CRI-O,containerd)类似,Podman依靠符合OCI的容器运行时(runc,crun,runv等)与操作系统接口并创建正在运行的容器。这使得Podman创建的正在运行的容器与任何其他常见容器引擎创建的容器几乎没有区别。
Podman 控制下的容器可以由 root 用户或非特权用户运行。Podman 使用 libpod 库管理整个容器生态系统,其中包括 Pod、容器、容器映像和容器卷。Podman 专门研究所有帮助您维护和修改 OCI 容器映像(如拉取和标记)的命令和函数。它允许您在生产环境中创建、运行和维护这些容器和容器映像。
有一个 RESTFul API 来管理容器。我们还有一个远程Podman客户端,可以与RESTFul服务进行交互。我们目前支持 Linux、Mac 和 Windows 上的客户端。RESTFul 服务仅在 Linux 上受支持。
部署podman
//安装podman
[root@loaclhost ~]# yum -y install podman
[root@loaclhost containers]# yum -y install podman-docker
//修改配置文件
[root@loaclhost ~]# cd /etc/containers/
[root@loaclhost containers]# ls
certs.d policy.json registries.conf.d storage.conf
oci registries.conf registries.d
[root@loaclhost containers]# vim registries.conf
unqualified-search-registries = ["docker.io"] //拉取镜像从docker官网拉取
[[registry]]
prefix = "docker.io"
location = "gxroeyl8.mirror.aliyuncs.com" //配置加速器
podman基础命令应用
[root@loaclhost containers]# podman pull httpd
Resolving "httpd" using unqualified-search registries (/etc/containers/registries.conf)
Trying to pull docker.io/library/httpd:latest...
Getting image source signatures
Copying blob a2abf6c4d29d done
Copying blob dcc4698797c8 done
Copying blob d982c879c57e done
Copying blob 41c22baa66ec done
Copying blob 67283bbdd4a0 done
Copying config dabbfbe0c5 done
Writing manifest to image destination
Storing signatures
dabbfbe0c57b6e5cd4bc089818d3f664acfad496dc741c9a501e72d15e803b34
[root@loaclhost containers]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/httpd latest dabbfbe0c57b 7 months ago 148 MB
//创建并运行一个容器
[root@loaclhost ~]# podman run -it 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 5cc84ad355aa done
Copying config beae173cca done
Writing manifest to image destination
Storing signatures
/ #
//创建容器但不运行
[root@loaclhost ~]# podman create busybox
8161b8a3d2031c87d19e7447ef0ed4dff5fda9f25c81f3a53db88b214d2f6267
[root@loaclhost ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8161b8a3d203 docker.io/library/busybox:latest sh 20 seconds ago Created busy_bhabha
//在容器和本地之间复制文件或文件夹
[root@loaclhost ~]# podman run -it --name web busybox /bin/sh
/ # ls
bin dev etc home proc root run sys tmp usr var
/ # exit
[root@loaclhost ~]# podman cp anaconda-ks.cfg web:/
[root@loaclhost ~]# podman exec -it web /bin/sh
/ # ls
anaconda-ks.cfg etc root tmp
bin home run usr
dev proc sys var
//显示指定的历史记录
[root@loaclhost ~]# podman history busybox
ID CREATED CREATED BY SIZE COMMENT
beae173ccac6 7 months ago /bin/sh -c #(nop) CMD ["sh"] 0 B
<missing> 7 months ago /bin/sh -c #(nop) ADD file:6db446a57cbd2b7... 1.46 MB
//列出镜像
[root@loaclhost ~]# podman images
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
//显示容器或映像的配置
[root@loaclhost ~]# podman inspect busybox
//登录到容器注册表
[root@loaclhost ~]# podman login
Username: zjunwhite
Password:
Login Succeeded!
//退出容器注册表
[root@loaclhost ~]# podman logout
Removed login credentials for docker.io
//获取容器的日志
[root@loaclhost ~]# podman logs web
/ # ls
bin dev etc home proc root run sys tmp usr var
/ # exit
//列出网络
[root@loaclhost ~]# podman network ls
NETWORK ID NAME VERSION PLUGINS
2f259bab93aa podman 0.4.0 bridge,portmap,firewall,tuning
//暂停容器中的进程
[root@loaclhost ~]# podman ps -a
87921717ed14 docker.io/library/busybox:latest /bin/sh 13 minutes ago Up 6 minutes ago web
[root@loaclhost ~]# podman stop web
web
[root@loaclhost ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87921717ed14 docker.io/library/busybox:latest /bin/sh 14 minutes ago Exited (137) 8 seconds ago web
//启动容器
[root@loaclhost ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@loaclhost ~]# podman start web
web
[root@loaclhost ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87921717ed14 docker.io/library/busybox:latest /bin/sh 16 minutes ago Up 6 seconds ago web
S NAMES
87921717ed14 docker.io/library/busybox:latest /bin/sh 16 minutes ago Up 6 seconds ago web
//修改容器名字
[root@loaclhost ~]# podman container rename web web1
[root@loaclhost ~]# podman ps -a
87921717ed14 docker.io/library/busybox:latest /bin/sh 10 hours ago Created web1
//删除容器
[root@loaclhost ~]# podman rm web1
87921717ed14c4c23cc1862bfde3eb942e434427cf54ef85095907f29bb8feae
[root@loaclhost ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
//删除镜像
[root@loaclhost ~]# podman rmi busybox
Untagged: docker.io/library/busybox:latest
Deleted: beae173ccac6ad749f76713cf4440fe3d21d1043fe616dfbe30775815d1d0f6a
//查找容器中的镜像
[root@loaclhost ~]# podman search httpd
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/library/httpd The Apache HTTP Server Project 4116 [OK]
docker.io docker.io/clearlinux/httpd httpd HyperText Transfer Protocol (HTTP) ser... 2
docker.io docker.io/centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or bui... 44
docker.io docker.io/manageiq/httpd Container with httpd, built on CentOS for Ma... 1 [OK]
//查看容器的资源使用率
[root@loaclhost ~]# podman stats web
ID NAME CPU % MEM USAGE / LIMIT MEM % NET IO BLOCK IO PIDS CPU TIME AVG CPU %
c0362a971144 web -- 237.6kB / 1.877GB 0.01% 768B / 1.304kB -- / -- 1 28.782487ms 6.19%
//修改镜像版本号
[root@loaclhost ~]# podman images
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
[root@loaclhost ~]# podman tag beae173ccac6 docker.io/library/busybox:v0.1
[root@loaclhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox v0.1 beae173ccac6 7 months ago 1.46 MB
docker.io/library/httpd latest dabbfbe0c57b 7 months ago 148 MB
//显示容器的运行进程
[root@loaclhost ~]# podman top web
USER PID PPID %CPU ELAPSED TTY TIME COMMAND
root 1 0 0.000 17m45.380848872s pts/0 0s /bin/sh
//显示容器磁盘使用状态
[root@loaclhost ~]# podman system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 1 149.1MB 147.7MB (0%)
Containers 1 1 17B 0B (0%)
Local Volumes 0 0 0B 0B (0%)
//卸载工作容器的根文件系统
[root@loaclhost ~]# podman unmount web
web
[root@loaclhost ~]# podman exec -it web /bin/sh
Error: exec failed: container_linux.go:380: starting container process caused: process_linux.go:99: starting setns process caused: fork/exec /proc/self/exe: no such file or directory: OCI runtime attempted to invoke a command that was not found
//再挂载上去
[root@loaclhost ~]# podman mount web
/var/lib/containers/storage/overlay/156e5b274d19ba81593dd7aa4dbaeb1430f6f5a58414c1582ccd08f8ceb2dec6/merged
//在运行的容器中运行进程
[root@loaclhost ~]# podman exec -it web /bin/sh
/ # exit
//显示Podman版本信息
[root@loaclhost ~]# 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@loaclhost ~]# podman volume exists
Error: accepts 1 arg(s), received 0