由于清明回老家了,服务器在租房那里没带回来,所以我在自己家里的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
的元数据 和 mynginx
的 Mac
地址
挂载
之前我们使用 -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优势在哪里? "。