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 @ 2022-08-15 12:13  Zic师傅  阅读(530)  评论(0编辑  收藏  举报