Podman的基本设置和使用

Podman的基本设置和使用

-

目录

Podman的基本设置和使用

使用和设置

运行示例容器

检测正在运行的容器

测试 httpd 服务器

查看容器的日志

查看容器的 pid

检查点容器

恢复容器

迁移容器

停止容器

删除容器

如何使用 Podman 签署和分发容器镜像

podman基本用法

image镜像管理子命令

build

diff

history

inspect

list

rm

save

load

prune

search

pull

tag

push

tree

container容器管理子命令

create

start

ps或者list

rename

stop

restart

run

attach

exec

cp

diff

inspect

stats

top

logs

kill

port

rm

生成service文件


Podman 是作为 libpod 库的一部分提供的实用程序。它可用于创建和维护容器。以下教程将教您如何设置 Podman 并使用 Podman 执行一些基本命令。

如果您在 Mac 或 Windows PC 上运行,则应按照Mac 和 Windows 教程 设置远程 Podman 客户端。

使用和设置

运行示例容器

 [root@podman ~]# podman pull httpd
 拉取httpd镜像latest版
 Trying to pull docker.io/library/httpd:latest...
 Getting image source signatures
 Copying blob d982c879c57e skipped: already exists  
 -----------
 dabbfbe0c57b6e5cd4bc089818d3f664acfad496dc741c9a501e72d15e803b34
 [root@podman ~]# podman run -d -p 80:80 --name web httpd:latest 
 运行容器,-d 后台 -p 端口映射 --name 名字 httpd:latest镜像
 4645beec195a28d7e633d018e8fc5cfdf5d583ce71abfb5748717cb2ab9efe21
 [root@podman ~]# podman ps
 # 如果在ps命令中添加-a,Podman 将显示所有容器
 CONTAINER ID  IMAGE                           COMMAND           CREATED        STATUS            PORTS               NAMES
 4645beec195a  docker.io/library/httpd:latest  httpd-foreground  6 seconds ago  Up 6 seconds ago  0.0.0.0:80->80/tcp  web
 [root@podman ~]# 

检测正在运行的容器

 [root@podman ~]# podman inspect web |grep IPAddress\":
 “检查”正在运行的web容器以获取有关其自身的元数据和详细信息
                "IPAddress": "10.88.0.2",
                          "IPAddress": "10.88.0.2",
  -l 是最新容器的方便参数。您也可以使用容器的 -l 代替 web 。

测试 httpd 服务器

由于我们没有容器的 IP 地址,我们可以使用 curl 测试宿主操作系统和容器之间的网络通信。以下命令应该显示我们容器化 httpd 服务器的索引页面。

 [root@podman ~]# curl 127.0.0.1
 

It works!

 [root@podman ~]#

查看容器的日志

您也可以使用 Podman 查看容器的日志:

 [root@podman ~]# podman logs web
  -------
 10.88.0.1 - - [15/Aug/2022:09:40:57 +0000] "GET / HTTP/1.1" 200 45
 这里可以通过容器id或name,也可以--latest或者-l来代表最近的

查看容器的 pid

可以使用top观察容器中的 httpd pid

 [root@podman ~]# podman top web
 USER        PID         PPID        %CPU        ELAPSED          TTY         TIME        COMMAND
 root        1           0           0.000       9m12.247568916s  ?           0s          httpd -DFOREGROUND 
 www-data    8           1           0.000       9m12.2477296s    ?           0s          httpd -DFOREGROUND 
 www-data    9           1           0.000       9m12.24775234s   ?           0s          httpd -DFOREGROUND 
 www-data    10          1           0.000       9m12.247774051s  ?           0s          httpd -DFOREGROUND 
 [root@podman ~]# 

检查点容器

检查点容器会停止容器,同时将容器中所有进程的状态写入磁盘。有了这个,容器可以稍后恢复并在与检查点完全相同的时间点继续运行.

 [root@podman ~]# podman container checkpoint web 
 4645beec195a28d7e633d018e8fc5cfdf5d583ce71abfb5748717cb2ab9efe21
 [root@podman ~]# podman ps
 CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

恢复容器

仅对以前设置检查点的容器才能恢复容器。恢复的容器将继续在与检查点完全相同的时间点运行。要恢复容器,请使用:

 [root@podman ~]# podman container restore web 
 4645beec195a28d7e633d018e8fc5cfdf5d583ce71abfb5748717cb2ab9efe21
 [root@podman ~]# podman ps
 CONTAINER ID  IMAGE                           COMMAND           CREATED         STATUS             PORTS               NAMES
 4645beec195a  docker.io/library/httpd:latest  httpd-foreground  13 minutes ago  Up 13 minutes ago  0.0.0.0:80->80/tcp  web
 [root@podman ~]# 
 恢复后,容器将像检查点之前一样再次响应请求
 [root@podman ~]# curl 127.0.0.1
 

It works!

 [root@podman ~]#

迁移容器

要将容器从一台主机实时迁移到另一台主机,容器会在迁移的源系统上设置检查点,转移到目标系统,然后在目标系统上恢复。传输检查点时,可以指定输出文件。

 [root@podman ~]# podman container checkpoint web -e /root/web.tar.gz
 4645beec195a28d7e633d018e8fc5cfdf5d583ce71abfb5748717cb2ab9efe21
 [root@podman ~]# scp /root/web.tar.gz 192.168.245.131:/root/
 --------
 (yes/no/[fingerprint])? yes
 ------
 web.tar.gz                                                    100%  377KB  92.7MB/s   00:00    
 #换台主机试一下,前提是有podman
 [root@docker ~]#  podman container restore -i /root/web.tar.gz
 [root@docker ~]#  curl 127.0.0.1
 

It works!

停止容器

停止 httpd 容器:

[root@podman ~]# podman stop -l
4645beec195a28d7e633d018e8fc5cfdf5d583ce71abfb5748717cb2ab9efe21
[root@podman ~]# 

还可以使用ps子命令检查一个或多个容器的状态。在这种情况下,我们应该使用-a参数来列出所有容器。

[root@podman ~]# podman ps -a
CONTAINER ID  IMAGE                           COMMAND           CREATED         STATUS                     PORTS               NAMES
2684bce8b0b5  docker.io/library/httpd:latest  httpd-foreground  19 hours ago    Exited (0) 19 hours ago                        httpd
4645beec195a  docker.io/library/httpd:latest  httpd-foreground  27 minutes ago  Exited (0) 10 minutes ago  0.0.0.0:80->80/tcp  web

删除容器

要删除 httpd 容器:

[root@podman ~]# podman rm -l
4645beec195a28d7e633d018e8fc5cfdf5d583ce71abfb5748717cb2ab9efe21
[root@podman ~]# podman ps -a
CONTAINER ID  IMAGE                           COMMAND           CREATED       STATUS                   PORTS       NAMES
2684bce8b0b5  docker.io/library/httpd:latest  httpd-foreground  19 hours ago  Exited (0) 19 hours ago              httpd
[root@podman ~]# 

如何使用 Podman 签署和分发容器镜像

签署容器镜像的动机是只信任专门的镜像提供者以减轻中间人 (MITM) 攻击或对容器注册表的攻击。签署图像的一种方法是使用 GNU Privacy Guard ( GPG ) 密钥。这种技术通常与任何符合 OCI 的容器注册表兼容,例如Quay.io。值得一提的是,OpenShift 集成容器注册表开箱即用地支持这种签名机制,这使得单独的签名存储变得不必要。

从技术角度来看,我们可以利用 Podman 对镜像进行签名,然后再将其推送到远程注册表。之后,所有运行 Podman 的系统都必须配置为从远程服务器检索签名,远程服务器可以是任何简单的 Web 服务器。这意味着在图像拉取操作期间,每个未签名的图像都将被拒绝。

这里使用之前部署的HarborPodman的基本设置和使用_第1张图片

首先,我们必须创建一个 GPG 密钥对或选择一个已经在本地可用的密钥对。要生成新的 GPG 密钥,只需运行gpg --full-gen-key并按照交互式对话框操作。现在我们应该能够验证密钥在本地是否存在:
[root@podman ~]# gpg --full-gen-key
gpg (GnuPG) 2.2.20; Copyright (C) 2020 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
  (14) Existing key from card
Your selection? 
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: xuan
Name must be at least 5 characters long
Real name: xuan520
Email address: [email protected]
Comment: 
You selected this USER-ID:
    "xuan520 <[email protected]>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
--------------
public and secret key created and signed.

pub   rsa2048 2022-08-15 [SC]
      A0E11404EE38E3B5CE3D8035C03C52E96BA1090B
uid                      xuan520 <[email protected]>
sub   rsa2048 2022-08-15 [E]

[root@podman ~]# 4
密钥创建完成
[root@podman ~]# gpg --list-keys
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
/root/.gnupg/pubring.kbx
------------------------
pub   rsa2048 2022-08-15 [SC]
      A0E11404EE38E3B5CE3D8035C03C52E96BA1090B
uid           [ultimate] xuan520 <[email protected]>
sub   rsa2048 2022-08-15 [E]

[root@podman ~]# 

这里以httpd镜像为标准镜像

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

现在我们可以重新标记图像以将其指向搭建的Harbor仓库

[root@podman ~]# podman tag httpd:latest xuanxuan.cn/xuanxuan/httpd:v520
[root@podman ~]# podman images
REPOSITORY                  TAG         IMAGE ID      CREATED       SIZE
docker.io/library/httpd     latest      dabbfbe0c57b  7 months ago  148 MB
xuanxuan.cn/xuanxuan/httpd  v520        dabbfbe0c57b  7 months ago  148 MB
[root@podman ~]# 
#这里的xuanxuan.cn是Harbor访问域名,xuanxuan是仓库里的项目名称

Podman 现在可以通过一个命令推送图像并对其进行签名。但是要让它工作,我们必须在以下位置修改我们的系统范围的注册表配置 /etc/containers/registries.d/default.yaml

[root@podman ~]# vim /etc/containers/registries.d/default.yaml 
default-docker:
     sigstore: http://xuanxuan.cn
        sigstore-staging: file:///var/lib/containers/sigstore
我们可以看到我们配置了两个签名存储:

sigstore: 引用 Web 服务器进行签名读取
sigstore-staging: 引用文件路径进行签名写入

现在,让我们推送并签署图像:

[root@podman ~]# gpg --list-key
/root/.gnupg/pubring.kbx
------------------------
pub   rsa2048 2022-08-15 [SC]
      A0E11404EE38E3B5CE3D8035C03C52E96BA1090B
uid           [ultimate] xuan520 <[email protected]>
sub   rsa2048 2022-08-15 [E]

[root@podman ~]# podman push \
>     --tls-verify=false \
>     --sign-by [email protected] \
>    xuanxuan.cn/xuanxuan/httpd:520
Error: xuanxuan.cn/xuanxuan/httpd:520: image not known
[root@podman ~]# podman login xuanxuan.cn
Username: admin
Password: 
Login Succeeded!
[root@podman ~]# 

[root@podman ~]# podman push     --tls-verify=false     --sign-by [email protected]    xuanxuan.cn/xuanxuan/httpd:v520
#会跳出输入密码界面
Getting image source signatures
Copying blob deefaa620a71 done  
Copying blob 1da636a1aa95 done  
Copying blob 15e4bf5d0804 done  
Copying blob 9cff3206f9a6 done  
Copying blob 2edcec3590a4 done  
Copying config dabbfbe0c5 done  
Writing manifest to image destination
Signing manifest
Storing signatures
[root@podman ~]# 

Podman的基本设置和使用_第2张图片

镜像在harbor中了。

问题:

写个hosts文件登录
192.168.245.131 xuanxuan.cn
#登录除了问题可以改下配置文件,可能是harbor用的是http方式传输
[root@podman ~]# vim /etc/containers/registries.conf
[registries.search]
registries = ['docker.io']
[registries.insecure]
registries = ['xuanxuan.cn']
#[[registry]]
#prefix = "docker.io"
#location = "fi54miqv.mirror.aliyuncs.com"

现在看一下系统签名存储,我们会看到有一个新的签名可用,这是由图像推送引起的:

[root@podman ~]# ls /var/lib/containers/sigstore/
xuanxuan
[root@podman xuanxuan]# ls
'httpd@sha256=9a941947f4810138b8bb8fa08be4b040863631006ae955de03818fdf80616b81'

删除镜像:

root@podman ~]# podman images
REPOSITORY                  TAG         IMAGE ID      CREATED       SIZE
docker.io/library/httpd     latest      dabbfbe0c57b  7 months ago  148 MB
xuanxuan.cn/xuanxuan/httpd  v520        dabbfbe0c57b  7 months ago  148 MB
[root@podman ~]# podman rmi xuanxuan.cn/xuanxuan/httpd:v520 
Untagged: xuanxuan.cn/xuanxuan/httpd:v520
[root@podman ~]# podman images
REPOSITORY               TAG         IMAGE ID      CREATED       SIZE
docker.io/library/httpd  latest      dabbfbe0c57b  7 months ago  148 MB
[root@podman ~]# 

拉取镜像

[root@podman ~]# podman pull xuanxuan.cn/xuanxuan/httpd:v520
Trying to pull xuanxuan.cn/xuanxuan/httpd:v520...
Getting image source signatures
#这里发现没办法拉下来这个镜像

我们必须编写一个策略来强制签名必须是有效的。这可以通过在 中添加新规则来完成/etc/containers/policy.json。从下面的示例中,将"docker"条目复制到"transports"您的 policy.json.

{
          "default": [{ "type": "insecureAcceptAnything" }],
            "transports": {
                        "docker": {
                                      "xuanxuan.cn/xuanxuan": [
                                                      {
                                                                        "type": "signedBy",
                                                                                  "keyType": "GPGKeys",
                                                                                            "keyPath": "/tmp/key.gpg"
                                                                                                    }

          ]

              }
                      
[root@podman ~]# podman pull --tls-verify=false xuanxuan.cn/xuanxuan/httpd:v520
通过查看harbor日志发现,已经在拉取了
172.19.0.10 - - [15/Aug/2022:13:08:44 +0000] "GET /xuanxuan/httpd@sha256=9a941947f4810138b8bb8fa08be4b040863631006ae955de03818fdf80616b81/signature-23209 HTTP/1.1" 200

这里看到了拉取记录

podman基本用法

查看版本

[root@podman ~]# podman -v
podman version 3.3.1
 
[root@podman ~]# 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@podman ~]# podman info 
host:
  arch: amd64
  buildahVersion: 1.22.3
………………
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@podman ~]# podman login docker.io 
Username: 2504875997
Password: 
Login Succeeded!
 
[root@podman ~]# podman logout 
Removed login credentials for docker.io
 

image镜像管理子命令

build

基于dockerfile创建镜像

diff

检查映像文件系统的更改

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

history

显示指定镜像的历史记录

示例
[root@podman ~]# podman image history httpd
ID            CREATED      CREATED BY                                     SIZE              COMMENT
f2a976f932ec  12 days ago  /bin/sh -c #(nop)  CMD ["httpd-foreground"]    0 B               
     12 days ago  /bin/sh -c #(nop)  EXPOSE 80                   0 B               
     12 days ago  /bin/sh -c #(nop) COPY file:c432ff61c4993e...  3.58 kB           
     12 days ago  /bin/sh -c #(nop)  STOPSIGNAL SIGWINCH         0 B               
     12 days ago  /bin/sh -c set -eux;                                             savedAptMark="$(apt...  60.4 MB     
     12 days ago  /bin/sh -c #(nop)  ENV HTTPD_PATCHES=          0 B               
     12 days ago  /bin/sh -c #(nop)  ENV HTTPD_SHA256=eb397f...  0 B               
     12 days ago  /bin/sh -c #(nop)  ENV HTTPD_VERSION=2.4.54    0 B               
     12 days ago  /bin/sh -c set -eux;                           apt-get update;   apt...      5.1 MB      
     12 days ago  /bin/sh -c #(nop) WORKDIR /usr/local/apache2   0 B               
     12 days ago  /bin/sh -c mkdir -p "$HTTPD_PREFIX"            && ch...          3.07 kB     
     12 days ago  /bin/sh -c #(nop)  ENV PATH=/usr/local/apa...  0 B               
     12 days ago  /bin/sh -c #(nop)  ENV HTTPD_PREFIX=/usr/l...  0 B               
     12 days ago  /bin/sh -c #(nop)  CMD ["bash"]                0 B               
     12 days ago  /bin/sh -c #(nop) ADD file:0eae0dca665c704...  83.9 MB   

inspect

显示镜像的配置

示例
[root@podman ~]# podman image inspect httpd
[
    {
        "Id": "f2a976f932ec6fe48978c1cdde2c8217a497b1f080c80e49049e02757302cf74",
        "Digest": "sha256:343452ec820a5d59eb3ab9aaa6201d193f91c3354f8c4f29705796d9353d4cc6",
        "RepoTags": [
            "docker.io/library/httpd:latest"
        ],
…………
        ],
        "NamesHistory": [
            "docker.io/library/httpd:latest"
        ]
    }
]
 

list

列出本地存储中镜像

[root@podman ~]# podman image list 
REPOSITORY               TAG         IMAGE ID      CREATED      SIZE
docker.io/library/httpd  latest      f2a976f932ec  12 days ago  149 MB

rm

删除镜像

示例
[root@podman ~]# podman image rm httpd
Untagged: docker.io/library/httpd:latest
Deleted: f2a976f932ec6fe48978c1cdde2c8217a497b1f080c80e49049e02757302cf74
[root@podman ~]# podman image list 
REPOSITORY                 TAG         IMAGE ID      CREATED      SIZE
[root@podman ~]# 
参数
-f  //强制删除,(不论这个镜像是否被使用)

save

将镜像保存到本地

示例
[root@podman ~]# podman image save httpd > http.tar
[root@podman ~]# ls
anaconda-ks.cfg  http.tar  test.sh
 

load

从tar存档加载镜像

示例
[root@podman ~]# podman image load < httpd.tar 
Getting image source signatures
Copying blob 0c2dead5c030 done  
Copying blob eea65516ea3b done  
Copying blob 92a4e8a3140f done  
Copying blob 28a53545632f done  
Copying blob 54fa52c69e00 done  
Copying config f2a976f932 done  
Writing manifest to image destination
Storing signatures
Loaded image(s): docker.io/library/httpd:latest
[root@podman ~]# podman image list 
REPOSITORY               TAG         IMAGE ID      CREATED      SIZE
docker.io/library/httpd  latest      f2a976f932ec  12 days ago  149 MB

prune

删除未使用的镜像

[root@podman ~]# podman image prune 
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

搜索镜像

示例
[root@podman ~]# 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                      
docker.io   docker.io/radial/busyboxplus                 Full-chain, Internet enabled, busybox made f...  49                      [OK]
docker.io   docker.io/vukomir/busybox                    busybox and curl                                 1                       
docker.io   docker.io/odise/busybox-curl                                                                  4                       [OK]
………………

pull

拉取镜像

示例
[root@podman ~]# podman image pull 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
7a80323521ccd4c2b4b423fa6e38e5cea156600f40cd855e464cc52a321a24dd
[root@podman ~]# podman image list 
REPOSITORY                 TAG         IMAGE ID      CREATED      SIZE
docker.io/library/httpd    latest      f2a976f932ec  12 days ago  149 MB
docker.io/library/busybox  latest      7a80323521cc  2 weeks ago  1.47 MB

tag

对镜像修改标签

示例
[root@podman ~]# podman tag busybox 2504875997/busybox:v0.1
[root@podman ~]# podman image list 
REPOSITORY                    TAG         IMAGE ID      CREATED      SIZE
docker.io/library/busybox     latest      7a80323521cc  2 weeks ago  1.47 MB
localhost/2504875997/busybox  v0.1        7a80323521cc  2 weeks ago  1.47 MB
 

push

上传镜像

示例
先打标签,改名
命名规则:自己的账户名/镜像名:版本号(标签)
 

tree

以树格式打印镜像的图层层次结构

示例
[root@podman ~]# podman image tree busybox
Image ID: 7a80323521cc
Tags:     [docker.io/library/busybox:latest localhost/2504875997/busybox:v0.1]
Size:     1.468MB
Image Layers
└── ID: 084326605ab6 Size: 1.463MB Top Layer of: [docker.io/library/busybox:latest localhost/2504875997/busybox:v0.1]
 

container容器管理子命令

create

创建一个或多个容器

示例
[root@podman ~]# podman container create httpd
9f18617f6997e57cb7a0645477269555f22427ff26935f874796be1f906ecb28
//也可以--name指定容器名
[root@podman ~]# podman container create --name alg httpd
c4eeac3366373fa6e9b0265c2d13b9f82310d08535f74c7343b698110a3e6a91

start

启动一个或多个容器

示例
[root@podman ~]# podman container start  alg 
alg
[root@podman ~]# 

ps或者list

容器列表

示例
[root@podman ~]# podman container list 
CONTAINER ID  IMAGE                           COMMAND           CREATED             STATUS             PORTS       NAMES
c4eeac336637  docker.io/library/httpd:latest  httpd-foreground  About a minute ago  Up 34 seconds ago              alg
或者
[root@podman ~]# podman container ps 
CONTAINER ID  IMAGE                           COMMAND           CREATED             STATUS             PORTS       NAMES
c4eeac336637  docker.io/library/httpd:latest  httpd-foreground  About a minute ago  Up 45 seconds ago              alg
 

rename

重命名现有容器

示例
[root@podman ~]# podman container rename alg web
[root@podman ~]# podman container list 
CONTAINER ID  IMAGE                           COMMAND           CREATED        STATUS            PORTS       NAMES
c4eeac336637  docker.io/library/httpd:latest  httpd-foreground  5 minutes ago  Up 4 minutes ago              web

stop

停止一个或多个容器

示例
[root@podman ~]# podman stop  web 
web
 
[root@podman ~]# podman container ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@podman ~]#

restart

重新启动一个或多个容器

示例
[root@podman ~]# podman container restart web 
c4eeac3366373fa6e9b0265c2d13b9f82310d08535f74c7343b698110a3e6a91
[root@podman ~]# podman container ps
CONTAINER ID  IMAGE                           COMMAND           CREATED         STATUS             PORTS       NAMES
c4eeac336637  docker.io/library/httpd:latest  httpd-foreground  13 minutes ago  Up 14 seconds ago              web

run

在新容器中运行命令(可以理解为创建并启动容器)

示例
[root@podman ~]# podman container run -itd --name xx busybox
65a2cff8075af4913683689c96d2dc0fe9ed77ab222c690e7389d9003d033900
[root@podman ~]# podman container ps 
CONTAINER ID  IMAGE                             COMMAND     CREATED        STATUS            PORTS       NAMES
7477b45c3593  docker.io/library/busybox:latest  sh          6 seconds ago  Up 7 seconds ago              xx
 
参数
--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@podman ~]# podman container attach xx 
/ # ls
bin   dev   etc   home  proc  root  run   sys   tmp   usr   var
/ # 

exec

在正在运行的容器中运行进程

示例
[root@podman ~]# podman container exec -it xx /bin/sh
/ # ls
bin   dev   etc   home  proc  root  run   sys   tmp   usr   var

cp

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

示例
[root@podman ~]# podman container cp a xx:/
[root@podman ~]# podman container exec -it xx /bin/sh
/ # ls
a     bin   dev   etc   home  proc  root  run   sys   tmp   usr   var

diff

检查对容器文件系统的更改

示例
[root@podman ~]# podman container diff xx 
C /root
A /root/.ash_history
C /etc
A /a

inspect

显示容器的配置

示例
[root@podman ~]# podman container inspect xx 
[
    {
        "Id": "3f18617f6997e57cb7a0645477269555f22427ff26935f874796be1f90628",
        "Created": "2022-08-14T20:52:27.408770105+08:00",
        "Path": "sh",
        "Args": [
            "sh"
        ],
…………
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "CgroupConf": null
        }
    }
]

stats

显示容器使用资源的状态

[root@podman ~]# podman container stats xx 
示例
ID            NAME        CPU %       MEM USAGE / LIMIT  MEM %       NET IO             BLOCK IO    PIDS        CPU TIME     AVG CPU %
32234b45c3593  xx         --          262.1kB / 8.112GB  0.00%       1.048kB / 1.624kB  -- / --     1           97.389344ms  1.47%
 

top

显示容器的运行进程

示例
[root@podman ~]# podman container top xx 
USER        PID         PPID        %CPU        ELAPSED           TTY         TIME        COMMAND
root        1           0           0.000       10m23.955804699s  pts/0       0s          sh 

logs

获取一个或多个容器的日志

示例
[root@podman ~]# podman container logs xx
/ # ls
bin   dev   etc   home  proc  root  run   sys   tmp   usr   var
/ # exit 

kill

使用特定信号终止一个或多个正在运行的容器

示例
[root@podman ~]# podman kill xx 
xx
[root@podman ~]# podman ps 
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@podman ~]# 

port

列出端口映射或容器的特定映射

示例
[root@podman ~]# podman container run -d --name algg -p 888:80 httpd
8d2fb9042b71f7b0fcde40f3a40e358a83f08a2a2c155d8110ba9c2e54ce78
[root@podman ~]# podman container port algg 
80/tcp -> 0.0.0.0:888

rm

移除一个或多个容器

 示例
 //删除只能删停止的容器
 [root@podman ~]# podman stop algg 
 algg
 [root@podman ~]# podman container rm 9f18617f6997 web xx algg 
 3f18617f6997e57cb7a0645477269555f22427ff26935f874796be1f90628
 g4aeac3366373fa6e9b0265c2d13b9f82310d08535f74c7343b698110aa91
 5477b45c359362f574d73a131edc8e1437dd772dbddda503ebc77eeb8288
 9d2fb9042b71f7b0fcde40f3a40e358a83f08a2a2c155d8110ba9c2e4ce7
 [root@podman ~]# podman container ps -a
 CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
 [root@podman ~]# 
  
 参数
 -f  //强制删除,不论容器是否在运行

生成service文件

基于容器、pod或卷生成结构化数据。

 语法:podman generate systemd [options] {CONTAINER|POD}
 选项:
 --container-prefix string   //容器的Systemd单元名称前缀(默认为“容器”)
 --files, -f         //生成.service文件
 --format string         //以指定格式(json)打印创建的单位
 --name, -n          //使用容器/容器名称,而不是ID
 --new               //创建新容器,而不是启动现有容器
 --no-header         //跳过标题生成
 --pod-prefix string         //pod的Systemd单元名称前缀(默认为“pod”)
 --restart-policy string     //Systemd重新启动策略(默认为“故障时”)
 --separator string      //Systemd单元名称:名称/id和前缀之间的分隔符(默认“-”)
 --time uint, -t         //停止超时覆盖(默认值为10)

你可能感兴趣的:(开源软件使用,docker,容器,运维)