-
目录
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 。
由于我们没有容器的 IP 地址,我们可以使用 curl 测试宿主操作系统和容器之间的网络通信。以下命令应该显示我们容器化 httpd 服务器的索引页面。
[root@podman ~]# curl 127.0.0.1It 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来代表最近的
可以使用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.1It 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.1It 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 ~]#
签署容器镜像的动机是只信任专门的镜像提供者以减轻中间人 (MITM) 攻击或对容器注册表的攻击。签署图像的一种方法是使用 GNU Privacy Guard ( GPG ) 密钥。这种技术通常与任何符合 OCI 的容器注册表兼容,例如Quay.io。值得一提的是,OpenShift 集成容器注册表开箱即用地支持这种签名机制,这使得单独的签名存储变得不必要。
从技术角度来看,我们可以利用 Podman 对镜像进行签名,然后再将其推送到远程注册表。之后,所有运行 Podman 的系统都必须配置为从远程服务器检索签名,远程服务器可以是任何简单的 Web 服务器。这意味着在图像拉取操作期间,每个未签名的图像都将被拒绝。
首先,我们必须创建一个 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 ~]#
镜像在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
这里看到了拉取记录
查看版本
[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
基于dockerfile创建镜像
检查映像文件系统的更改
示例: [root@podman ~]# podman diff httpd C /usr C /usr/local C /usr/local/bin A /usr/local/bin/httpd-foreground
显示指定镜像的历史记录
示例 [root@podman ~]# podman image history httpd ID CREATED CREATED BY SIZE COMMENT f2a976f932ec 12 days ago /bin/sh -c #(nop) CMD ["httpd-foreground"] 0 B12 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
显示镜像的配置
示例 [root@podman ~]# podman image inspect httpd [ { "Id": "f2a976f932ec6fe48978c1cdde2c8217a497b1f080c80e49049e02757302cf74", "Digest": "sha256:343452ec820a5d59eb3ab9aaa6201d193f91c3354f8c4f29705796d9353d4cc6", "RepoTags": [ "docker.io/library/httpd:latest" ], ………… ], "NamesHistory": [ "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
删除镜像
示例 [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 //强制删除,(不论这个镜像是否被使用)
将镜像保存到本地
示例 [root@podman ~]# podman image save httpd > http.tar [root@podman ~]# ls anaconda-ks.cfg http.tar test.sh
从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
删除未使用的镜像
[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] ………………
拉取镜像
示例 [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
对镜像修改标签
示例 [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
上传镜像
示例 先打标签,改名 命名规则:自己的账户名/镜像名:版本号(标签)
以树格式打印镜像的图层层次结构
示例 [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]
创建一个或多个容器
示例 [root@podman ~]# podman container create httpd 9f18617f6997e57cb7a0645477269555f22427ff26935f874796be1f906ecb28 //也可以--name指定容器名 [root@podman ~]# podman container create --name alg httpd c4eeac3366373fa6e9b0265c2d13b9f82310d08535f74c7343b698110a3e6a91
启动一个或多个容器
示例 [root@podman ~]# podman container start alg alg [root@podman ~]#
容器列表
示例 [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
重命名现有容器
示例 [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
停止一个或多个容器
示例 [root@podman ~]# podman stop web web [root@podman ~]# podman container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@podman ~]#
重新启动一个或多个容器
示例 [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
在新容器中运行命令(可以理解为创建并启动容器)
示例 [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 //一次性容器,退出后直接删除
连接到运行的容器
示例 [root@podman ~]# podman container attach xx / # ls bin dev etc home proc root run sys tmp usr var / #
在正在运行的容器中运行进程
示例 [root@podman ~]# podman container exec -it xx /bin/sh / # ls bin dev etc home proc root run sys tmp usr var
在容器和本地文件之间复制文件/文件夹
示例 [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
检查对容器文件系统的更改
示例 [root@podman ~]# podman container diff xx C /root A /root/.ash_history C /etc A /a
显示容器的配置
示例 [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 } } ]
显示容器使用资源的状态
[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%
显示容器的运行进程
示例 [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
获取一个或多个容器的日志
示例 [root@podman ~]# podman container logs xx / # ls bin dev etc home proc root run sys tmp usr var / # exit
使用特定信号终止一个或多个正在运行的容器
示例 [root@podman ~]# podman kill xx xx [root@podman ~]# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@podman ~]#
列出端口映射或容器的特定映射
示例 [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
移除一个或多个容器
示例 //删除只能删停止的容器 [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 //强制删除,不论容器是否在运行
基于容器、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)