Obteniendo información de las imágenes
Búsqueda de imágenes
Si queremos buscar imágenes de algún registro remoto desde la línea de comandos, podemos usar la instrucción podman search
. Podemos indicar el nombre del registro o solo el nombre de la imagen:
$ podman search registry.access.redhat.com/httpd
$ podman search httpd
Inspeccionar imágenes
Es posible obtener información detallada sobre una imagen. Para ello usaremos la instrucción podman image inspect
o de forma abreviada:
$ podman inspect docker.io/nginx:stable
La información más destacable que podemos ver:
- El id y el checksum de la imagen.
- Los puertos que se exponen al crear un contenedor.
- La arquitectura y el sistema operativo de la imagen.
- El tamaño de la imagen.
- Las variables de entorno definidas en la imagen.
- El comando que ejecuta el contenedor que se cree a partir de la imagen.
- Las capas.
- Y muchas más cosas…
Podemos usar filtros, como en el caso de los contenedores. Por ejemplo, para mostrar el identificador de la imagen, ejecutamos
$ podman inspect --format='{{.Id}}' docker.io/nginx:stable
Consultar los puertos que expone el contenedor que creemos a a partir de esta imagen:
$ podman inspect --format='{{range $port,$key := .Config.ExposedPorts}}{{$port}}{{end}}' docker.io/nginx:stable
Consultar el sistema operativo y la arquitectura:
$ podman inspect --format='{{.Os}} {{.Architecture}}' docker.io/nginx:stable
Consultar las variables de entorno definidas en la imagen:
$ podman inspect --format='{{range .Config.Env}}{{println .}}{{end}}' docker.io/nginx:stable
Y por último, para consultar los identificadores de las capas que forman la imagen:
$ podman inspect --format='{{range .RootFS.Layers}}{{println .}}{{end}}' docker.io/nginx:stable
Visualizar las capas de una imagen
Para visualizar los identificadores de las capas que forman parte de la imagen, podemos ejecutar:
$ podman image tree docker.io/nginx:stable
Image ID: 7f0fd59e0094
Tags: [docker.io/library/nginx:stable]
Size: 146.7MB
Image Layers
├── ID: 3c8879ab2cf2 Size: 84.17MB
├── ID: 40e0cedc54cd Size: 62.52MB
├── ID: c84b6e6a1bc2 Size: 3.584kB
├── ID: e5f52d8379ae Size: 4.608kB
├── ID: b5fa8ef12cb9 Size: 3.584kB
└── ID: 3688c0e283b4 Size: 7.168kB Top Layer of: [docker.io/library/nginx:stable]
Comparar imágenes
Para comparar los sistemas de archivos de las imágenes podemos usar el comando podman image diff
. Como resultado aparecerá la lista de archivos y una letra: C
si ha cambiado, A
si se ha añadido o D
si se ha borrado. Si indicamos una sola imagen, esta se comparará con su capa inferior, si damos el nombre de dos imágenes se compararán entre ellas. Por ejemplo:
$ podman image diff docker.io/nginx:stable
$ podman image diff docker.io/nginx:stable docker.io/nginx:latest
Montaje de imágenes
Podman nos permite montar el sistema de archivos raíz de una imagen en modo sólo lectura sin crear un contenedor a partir de ella. La imagen montada estará disponible inmediatamente en el sistema anfitrión, permitiéndole examinar su contenido. Para ello usaremos la instrucción podman image mount
para montar la imagen, y podman image unmount
para desmontarla.
Por ejemplo, podemos montar una imagen descargada por el usuario root
:
$ sudo podman pull docker.io/library/nginx
$ sudo podman image mount docker.io/library/nginx
/var/lib/containers/storage/overlay/dd6407eb3a3a9b1d1a18c5d41244b1f989d5cd69a92cc39cd5bab1149d5d8f31/merged
$ sudo podman image unmount docker.io/library/nginx
92b11f67642b62bbb98e7e49169c346b30e20cd3c1c034d31087e46924b9312e
Si queremos montar una imagen descargada por un usuario sin privilegios:
$ podman image mount docker.io/library/nginx
Error: cannot run command "podman image mount" in rootless mode, must execute `podman unshare` first
La razón de este error es que el modo rootless no permite montar imágenes. Necesitamos acceder al namespace de usuario, para ello tenemos que usar la instrucción podman unshare
, que permitirá el acceso a los nombres de espació de usuario y de montaje hasta que indiquemos la instrucción exit
.
$ podman unshare
# podman image mount docker.io/library/nginx
/home/usuario/.local/share/containers/storage/overlay/dd6407eb3a3a9b1d1a18c5d41244b1f989d5cd69a92cc39cd5bab1149d5d8f31/merged
# ls /home/usuario/.local/share/containers/storage/overlay/dd6407eb3a3a9b1d1a18c5d41244b1f989d5cd69a92cc39cd5bab1149d5d8f31/merged
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
# podman image unmount docker.io/library/nginx
92b11f67642b62bbb98e7e49169c346b30e20cd3c1c034d31087e46924b9312e
# exit