podman 容器操作(下)

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情

由于清明回老家了,服务器在租房那里没带回来,所以我在自己家里的centos上安装了一个podman 3.4.4

显示容器元数据

使用 podman inspect可以显示对象的元数据

可操作的对象包括 容器(container) 、镜像(image)、网络(network)、pod、存储卷(volume)

命令分别为

podman container inspect

podman image inspect

podman network inspect

podman pod inspect

podman volume inspect

获取容器的ip地址

我们启动nginx容器

命令podman run -d --name mynginx -p 9090:80 nginx

意思为启动一个容器,并且将容器名称命名为 mynginx且将宿主机9090映射至容器的80端口

我们使用 podman container mynginx查看一下 容器的元数据信息

使用 -f可以获取指定的信息

例如: 获取名称 和 ip地址

podman container inspect -f '{{.Name}}' mynginx

podman container inspect -f '{{.NetworkSettings.IPAddress}}' mynginx

如何获取指定的信息

-f {{}}格式化输出,中编写变量,其逻辑为直接定义inspect中的信息,例如: 上述获取ip地址的逻辑为

查询 inspect 中的 NetworkSettings 中的 IPAddress , 我们将数据格式化后可得

比如,我们想获取Mac地址,-f 为: '{{.NetworkSettings.MacAddress}}'

其他资源类似,甚至你可以省略资源,只用写名称,因为podman名称是唯一的

例如:

创建一个卷命名为 mydisk,并且查看 mydisk 的元数据 和 mynginxMac 地址

挂载

之前我们使用 -v挂载卷(volume) ,其实它还可以挂载宿主机目录

我们还可以使用mount来映射整个容器的目录

挂载nginx html目录

命令

mkdir -p /root/html/
echo  'juejin pdudo test' > /root/html/index.html 
podman run -d --name mynginx2 -v /root/html:/usr/share/nginx/html -p 9091:80 nginx 
a88e38a954130f24010693cbd9867eabcd4a1de7a63612b810ef2f6edf47aa30
podman container inspect -f '{{.NetworkSettings.IPAddress}}' mynginx2
复制代码

挂载成果,访问网站,成功输出 juejin pdudo test

注意事项

-v 前面参数是宿主机目录 后面参数是容器中的目录

宿主机目录需要使用绝对路径,否则podman会随机将容器中的目录给映射到宿主机上

查看挂载信息

podman inspect -f '{{.Mounts}}' mynginx2

使用 -f输出的不太好看,我们直接使用 inspect往上翻翻看

宿主机必须要绝对路径


挂载文件

这次我们将 /dev/log 挂载到 容器中,并且在容器中输出log,我们观察宿主机是否出现日志

命令

podman run --name myalpine -v /dev/log:/dev/log alpine logger 'juejin pdudo test'
journalctl | grep juejin
复制代码

宿主机日志果然出现了 juejin pdudo test

所以,-v不仅能够挂载目录,还能够挂载文件(linux 一切皆文件)

将整个容器根系统映射出来

我们使用podman mount可以将整个容器文件系统挂载到宿主机上

例如如下,我们启动一个nginx容器,并且将该容器的文件系统挂载出来,我们更具挂载出来的路径,我们成功修改了容器的内文件的内容。

指定容器的IP地址

在创建容器时,可以使用--ip指定ip地址

设置nginx容器ip地址

运行nginx容器,将其地址设置为10.88.0.99

导入和导出容器

在日常工作中,我们经常有容器不经常使用,但是又必须存在的时候,为避免误操作(podman rm),我们可以打包放在本地,在需要容器的时候,我们在导入到镜像中即可。

导出容器

我们将nginx5容器给导出来

命令 podman export -o tarball名称 容器ID

我们查看容器信息

我们导出mynginx5容器

导入镜像

我们将上次导出的容器,导入到镜像中

我们可以看到,导入成功后,名称为: localhost/mynginx,我们需要的时候,直接运行就可以了。

心得体会

获取元数据

获取元数据,在日常工作中,作为排查问题非常有效,例如 之前测试 -v挂载,我宿主机忘记了写绝对路径了,导致实验结果不对,通过查询元数据才发现的。

当我们挂载了相对路径的目录后

我们查询元数据,就可以发现异常

我们挂载的宿主机的html名称,而挂载点变为了/var/lib/containers/storage/volumes/html/_data

通过这2天的学习,简而言之,如果会docker,那么入手podman简直得心应手,我使用了一圈下来,发现 podman不能说很像docker,简直是一模一样,之所以可以豪气的定义别名alias docker=podman,原来是有底气的,不得不说,运维也在卷了,说不定再过一段时间,你会看到这道面试题: "你认为Podman和Docker有什么区别? Podman优势在哪里? "。

猜你喜欢

转载自juejin.im/post/7082524484397170718