podman的部署与应用

podman的部署及应用

1.什么是podman

Podman是一种无守护程序、开源的 Linux 原生工具,旨在使用 Open Containers Initiative(OCI)容器和容器映像轻松查找、运行、构建、共享和部署应用程序。Podman 提供了任何使用过 Docker容器引擎的人都熟悉的命令行界面 (CLI) 。大多数用户可以简单地将 Docker 别名为 Podman(docker=podman而不会出现任何问题。与其他常见的容器引擎(Docker、CRI-O、containerd)类似,Podman 依赖于符合 OCI 的容器运行时(runc、crun、runv 等)与操作系统交互并创建正在运行的容器。这使得 Podman 创建的正在运行的容器与任何其他常见容器引擎创建的容器几乎没有区别。

Podman 控制下的容器可以由 root 或非特权用户运行。Podman使用libpod库管理整个容器生态系统,包括 pod、容器、容器映像和容器卷。Podman 专注于帮助您维护和修改 OCI 容器镜像的所有命令和功能,例如拉取和标记。它允许您在生产环境中创建、运行和维护这些容器和容器映像。

podman官方提供了帮助文档:podman官网

2.podman的安装

centos8自带的源就可以直接安装podman,也可以是使用国内源,例如阿里,清华,163等

//安装podman
[root@localhost ~]# dnf -y install podman-docker
[root@localhost ~]# dnf list installed | grep podman
Failed to set locale, defaulting to C.UTF-8
podman.x86_64 3.3.1-9.module_el8.5.0+988+b1f0b741 @AppStream
podman-catatonit.x86_64 3.3.1-9.module_el8.5.0+988+b1f0b741 @AppStream
podman-docker.noarch 3.3.1-9.module_el8.5.0+988+b1f0b741 @AppStream
//查看podman版本号
[root@localhost ~]# podman -v
podman version 3.3.1
[root@localhost ~]# 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
//编辑/etc/containers/registries.conf文件
[root@localhost ~]# vim /etc/containers/registries.conf
//修改下列内容
unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "docker.io"] ——> unqualified-search-registries = ["docker.io"]
//添加如下内容,配置加速器
[[registry]]
prefix = "docker.io"
location = "docker.mirrors.ustc.edu.cn"

3.podman的常用命令

info

查看podman的详细信息

[root@localhost ~]# podman info
host:
arch: amd64
buildahVersion: 1.22.3
cgroupControllers:
………………
Version: 3.3.1

login

镜像仓库登入

[root@localhost ~]# podman login
Username: ziczhou
Password:
Login Succeeded!

logout

镜像仓库登出

[root@localhost ~]# podman logout
Removed login credentials for docker.io

build

基于dockerfile构建镜像

search

搜索镜像

//搜索httpd镜像
[root@localhost ~]# 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]
docker.io docker.io/centos/httpd-24-centos8 1
docker.io docker.io/dockerpinata/httpd 1
docker.io docker.io/19022021/httpd-connection_test This httpd image will test the connectivity ... 0
docker.io docker.io/publici/httpd httpd:latest 1 [OK]
docker.io docker.io/paketobuildpacks/httpd 0
docker.io docker.io/manasip/httpd 0
docker.io docker.io/httpdocker/kubia 0
docker.io docker.io/centos/httpd 35 [OK]
docker.io docker.io/e2eteam/httpd 0
docker.io docker.io/solsson/httpd-openidc mod_auth_openidc on official httpd image, ve... 2 [OK]
docker.io docker.io/patrickha/httpd-err 0
docker.io docker.io/hypoport/httpd-cgi httpd-cgi 2 [OK]
docker.io docker.io/manageiq/httpd_configmap_generator Httpd Configmap Generator 0 [OK]
docker.io docker.io/dariko/httpd-rproxy-ldap Apache httpd reverse proxy with LDAP authent... 1 [OK]
docker.io docker.io/amd64/httpd The Apache HTTP Server Project 0
docker.io docker.io/httpdss/archerysec ArcherySec repository 0 [OK]
docker.io docker.io/inanimate/httpd-ssl A play container with httpd, ssl enabled, an... 1 [OK]
docker.io docker.io/lead4good/httpd-fpm httpd server which connects via fcgi proxy h... 1 [OK]
docker.io docker.io/jonathanheilmann/httpd-alpine-rewrite httpd:alpine with enabled mod_rewrite 1 [OK]
docker.io docker.io/sandeep1988/httpd-new httpd-new 0
docker.io docker.io/nnasaki/httpd-ssi SSI enabled Apache 2.4 on Alpine Linux 1

pull

镜像的拉取

//拉取httpd镜像
[root@localhost ~]# 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 dcc4698797c8 done
Copying blob a2abf6c4d29d done
Copying blob d982c879c57e done
Copying blob 67283bbdd4a0 done
Copying blob 41c22baa66ec done
Copying config dabbfbe0c5 done
Writing manifest to image destination
Storing signatures
dabbfbe0c57b6e5cd4bc089818d3f664acfad496dc741c9a501e72d15e803b34

images或image list

列出本地所有镜像

[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/httpd latest dabbfbe0c57b 7 months ago 148 MB

inspect

查看镜像或容器的详细信息

//查看httpd镜像的详细信息
[root@localhost ~]# podman inspect httpd

diff

检查容器或镜像文件系统上的更改

[root@localhost ~]# podman diff httpd
C /usr
C /usr/local
C /usr/local/bin
A /usr/local/bin/httpd-foreground

tag

修改镜像名和标签

[root@localhost ~]# podman tag docker.io/library/httpd:latest docker.io/ziczhou/httpd:v1.2
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/httpd latest dabbfbe0c57b 7 months ago 148 MB
docker.io/ziczhou/httpd v1.2 dabbfbe0c57b 7 months ago 148 MB

push

将本地容器推送到镜像仓库

//先登录到docker.io镜像仓库
[root@localhost ~]# podman login
Username: ziczhou //使用自己的账号
Password:
Login Succeeded!
//将docker.io/ziczhou/httpd:v1.2推送到镜像仓库
[root@localhost ~]# podman push docker.io/ziczhou/httpd:v1.2
Getting image source signatures
Copying blob 15e4bf5d0804 done
Copying blob 1da636a1aa95 done
Copying blob deefaa620a71 done
Copying blob 2edcec3590a4 done
Copying blob 9cff3206f9a6 done
Copying config dabbfbe0c5 done
Writing manifest to image destination
Storing signatures

rmi或image rm

删除镜像

//删除docker.io/ziczhou/httpd:v1.2镜像
[root@localhost ~]# podman rmi docker.io/ziczhou/httpd:v1.2
Untagged: docker.io/ziczhou/httpd:v1.2
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/httpd latest dabbfbe0c57b 7 months ago 148 MB

history

显示指定镜像的历史记录

[root@localhost ~]# podman history docker.io/library/httpd:latest
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
<missing> 7 months ago /bin/sh -c set -eux; savedAptMark="$(apt... 61.1 MB
<missing> 7 months ago /bin/sh -c #(nop) ENV HTTPD_PATCHES= 0 B
<missing> 7 months ago /bin/sh -c #(nop) ENV HTTPD_SHA256=0127f7... 0 B
<missing> 7 months ago /bin/sh -c #(nop) ENV HTTPD_VERSION=2.4.52 0 B
<missing> 7 months ago /bin/sh -c set -eux; apt-get update; apt... 2.72 MB
<missing> 7 months ago /bin/sh -c #(nop) WORKDIR /usr/local/apache2 0 B
<missing> 7 months ago /bin/sh -c mkdir -p "$HTTPD_PREFIX" && ch... 3.07 kB
<missing> 7 months ago /bin/sh -c #(nop) ENV PATH=/usr/local/apa... 0 B
<missing> 7 months ago /bin/sh -c #(nop) ENV HTTPD_PREFIX=/usr/l... 0 B
<missing> 7 months ago /bin/sh -c #(nop) CMD ["bash"] 0 B
<missing> 7 months ago /bin/sh -c #(nop) ADD file:09675d11695f65c... 83.9 MB

save

将镜像保存在本地

[root@localhost ~]# podman image save docker.io/library/httpd:latest > ~/httpd.tar
[root@localhost ~]# ls
anaconda-ks.cfg httpd.tar

load

从tar包加载镜像

//先删除httpd镜像
[root@localhost ~]# podman rmi docker.io/library/httpd:latest
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
//导入镜像
[root@localhost ~]# podman image load < ~/httpd.tar
Getting image source signatures
Copying blob 2edcec3590a4 done
Copying blob 1da636a1aa95 done
Copying blob 15e4bf5d0804 done
Copying blob 9cff3206f9a6 done
Copying blob deefaa620a71 done
Copying config dabbfbe0c5 done
Writing manifest to image destination
Storing signatures
Loaded image(s): docker.io/library/httpd:latest
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/httpd latest dabbfbe0c57b 7 months ago 148 MB

create

创建但不启动容器

[root@localhost ~]# podman create --name web1 docker.io/library/httpd:latest
1769afb4963c65f82e48663a8859217b99c8ba3d735094b7f5a84a1a658ba20c

container ls或ps

查看正在运行的容器,加上参数-a是显示所有容器

[root@localhost ~]# podman container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# podman container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1769afb4963c docker.io/library/httpd:latest httpd-foreground About a minute ago Created web1

start

启动一个或多个容器

//启动web1容器
[root@localhost ~]# podman start web1
web1
[root@localhost ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1769afb4963c docker.io/library/httpd:latest httpd-foreground 2 minutes ago Up 8 seconds ago web1

stop

停止一个或多个容器

[root@localhost ~]# podman stop web1
web1
[root@localhost ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1769afb4963c docker.io/library/httpd:latest httpd-foreground 4 minutes ago Exited (0) 32 seconds ago web1

restart

重启容器

[root@localhost ~]# podman restart web1

kill

用特定的信号杀死一个或多个正在运行的容器

//先启动web1容器
[root@localhost ~]# podman start web1
web1
//杀死web1容器
[root@localhost ~]# podman kill web1
web1
[root@localhost ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1769afb4963c docker.io/library/httpd:latest httpd-foreground 5 minutes ago Exited (137) 4 seconds ago web1

attach

附加到一个正在运行的容器

[root@localhost ~]# podman start web1
web1
[root@localhost ~]# podman attach web1
^C[Mon Aug 15 03:27:54.485757 2022] [mpm_event:notice] [pid 1:tid 139653943622976] AH00491: caught SIGTERM, shutting down
//Ctrl+c停止,发现容器也停止了
[root@localhost ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1769afb4963c docker.io/library/httpd:latest httpd-foreground 9 minutes ago Exited (0) About a minute ago web1

run

创建并运行容器

//利用镜像docker.io/library/httpd:latest创建web2容器并运行在后台(-d)
[root@localhost ~]# podman run -itd --name web2 docker.io/library/httpd:latest
5134e5e6b87b102946a5ac0e5e98be1b0b74ef4720dfbe96d4b0a83e958d808d
[root@localhost ~]# docker ps
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5134e5e6b87b docker.io/library/httpd:latest httpd-foreground 3 seconds ago Up 3 seconds ago web2

exec

进入到一个正在运行的容器

[root@localhost ~]# podman exec -it web2 /bin/bash
root@5134e5e6b87b:/usr/local/apache2# ls
bin build cgi-bin conf error htdocs icons include logs modules
root@5134e5e6b87b:/usr/local/apache2# exit
exit
[root@localhost ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1769afb4963c docker.io/library/httpd:latest httpd-foreground 12 minutes ago Exited (0) 4 minutes ago web1
5134e5e6b87b docker.io/library/httpd:latest httpd-foreground 2 minutes ago Up 2 minutes ago web2
//exec不会随着退出而停止容器

cp

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

//利用busybox镜像创建一个容器
[root@localhost ~]# podman run -itd docker.io/library/busybox:latest
10a19ed4cfddf9f6c4e0989cf90769ce51f14bb3f8a49c5229d93dd4c1f01a08
[root@localhost ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5134e5e6b87b docker.io/library/httpd:latest httpd-foreground 9 minutes ago Up 9 minutes ago web2
10a19ed4cfdd docker.io/library/busybox:latest sh 7 seconds ago Up 7 seconds ago lucid_hamilton
//将本地/root/anaconda-ks.cfg 文件复制到容器10a19ed4cfdd中的/下
[root@localhost ~]# podman cp /root/anaconda-ks.cfg 10a19ed4cfdd:/
//进行验证
[root@localhost ~]# podman exec -it 10a19ed4cfdd /bin/sh
/ # ls
anaconda-ks.cfg dev home root sys usr
bin etc proc run tmp var
//将容器10a19ed4cfdd的/下的anaconda-ks.cfg文件复制到本地/opt目录下
[root@localhost ~]# podman cp 10a19ed4cfdd:/anaconda-ks.cfg /opt/
[root@localhost ~]# ls /opt/
anaconda-ks.cfg

rename

重命名容器

[root@localhost ~]# podman rename web2 web3
[root@localhost ~]# docker ps
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
489acb07b0d2 docker.io/library/httpd:latest httpd-foreground 25 seconds ago Up 25 seconds ago web3

top

显示容器的进程

[root@localhost ~]# podman top web3
USER PID PPID %CPU ELAPSED TTY TIME COMMAND
root 1 0 0.000 1m20.424981024s pts/0 0s httpd -DFOREGROUND
www-data 7 1 0.000 1m20.425123232s pts/0 0s httpd -DFOREGROUND
www-data 8 1 0.000 1m20.42523535s pts/0 0s httpd -DFOREGROUND
www-data 9 1 0.000 1m20.425280786s pts/0 0s httpd -DFOREGROUND

logs

查看容器的日志

[root@localhost ~]# podman logs web3
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.0.9. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.88.0.9. Set the 'ServerName' directive globally to suppress this message
[Mon Aug 15 04:01:55.402143 2022] [mpm_event:notice] [pid 1:tid 140523647929664] AH00489: Apache/2.4.52 (Unix) configured -- resuming normal operations
[Mon Aug 15 04:01:55.402536 2022] [core:notice] [pid 1:tid 140523647929664] AH00094: Command line: 'httpd -D FOREGROUND'

port

查看指定容器和本机映射的端口

[root@localhost ~]# podman run -itd --name web4 -p 8080:80 docker.io/library/httpd:latest
25637370711e9bf3c4a55132761eb1036b52c11e3e26d6ec2d009b8f32d0d551
[root@localhost ~]# podman port web4
80/tcp -> 0.0.0.0:8080

unmount与mount

卸载或挂载一个工作中的容器的根文件系统

//将web3容器的跟文件系统卸载
[root@localhost ~]# podman unmount web3
web3
//进入web3容器,会发现无法进入,因为跟文件系统被卸载了
[root@localhost ~]# podman exec -it web3 /bin/bash
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
//将web3容器的跟文件系统重新挂载
[root@localhost ~]# podman mount web3
/var/lib/containers/storage/overlay/c45f2b22d70e7dd2050c9e17e198c268a8d757a9ab3923d3dc403c158dad01d9/merged
//可以进入容器
[root@localhost ~]# podman exec -it web3 /bin/bash
root@cdda44cc1cf4:/usr/local/apache2# exit
exit

generate
利用容器生成service文件,达到容器开机自启的目的

//新建一个容器
[root@localhost ~]# podman run -itd --name web -p 80:80 httpd
74ce1919ba758317df647a6f9698903242625fa6d89ffc2c735816fad3697adc
//生成service文件,--new是每次重启都会重新创建一个容器,每次停止都会删除容器
[root@localhost ~]# podman generate systemd --name web --files --new
/root/container-web.service
//将service文件移动到/usr/lib/systemd/system目录下
[root@localhost ~]# cp container-web.service /usr/lib/systemd/system/
[root@localhost ~]# systemctl daemon-reload
//删除web5容器
[root@localhost ~]# podman rm -f web
74ce1919ba758317df647a6f9698903242625fa6d89ffc2c735816fad3697adc
//设置web5容器开机自启
[root@localhost ~]# systemctl enable --now container-web.service
Created symlink /etc/systemd/system/multi-user.target.wants/container-web.service → /usr/lib/systemd/system/container-web.service.
Created symlink /etc/systemd/system/default.target.wants/container-web.service → /usr/lib/systemd/system/container-web.service.
//查看正在运行容器
[root@localhost ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55360a692590 docker.io/library/httpd:latest httpd-foreground 30 seconds ago Up 30 seconds ago 0.0.0.0:80->80/tcp web
posted @   Zic师傅  阅读(620)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示