Primeros pasos con Podman: Gestionar imágenes, contenedores y volúmenes

Podman es un tiempo de ejecución de contenedores que proporciona características similares a Docker. Forma parte de la biblioteca libpod y puede utilizarse para gestionar pods, contenedores, imágenes de contenedores y volúmenes de contenedores. Podman es muy diferente de Docker, que utiliza la arquitectura cliente-servidor y requiere un demonio Docker para ejecutarse, mientras que Podman no requiere ningún demonio para ejecutarse y además puede ejecutarse perfectamente sin privilegios de root.

En este tutorial, te mostraremos el uso básico de Podman para gestionar contenedores, imágenes y volúmenes, y crear imágenes de contenedores.

Requisitos previos

  • Servidor Ubuntu con Podman instalado
  • Un conocimiento básico de Docker facilitará

1. Comandos básicos de Podman

Después de instalar Podman en el sistema Ubuntu, debemos saber cómo comprobar el propio Podman. Necesitamos comprobar la versión que ya está instalada en el sistema, el entorno del sistema Podman y el uso básico de la ayuda.

Para obtener la versión instalada de Podman en la máquina, utiliza el siguiente comando.

podman version

Cualquier versión de Podman > 1.0.1 será válida para esta guía.

Ahora comprueba la configuración del entorno de Podman.

podman info

Y se te mostrará el entorno del sistema de la instalación de Podman. Incluyendo la información de los paquetes Host, Registros y Almacenamiento.

Entorno Podman

A continuación, ejecuta el siguiente comando para mostrar todas las opciones disponibles del comando Podman.

podman --help

Para mostrar la ayuda de un comando concreto, puedes utilizar lo que se indica a continuación.

podman pod help

Ayuda Podman

2. Gestionar Imágenes de Contenedores utilizando Podman

Ahora pasamos a la gestión de imágenes de contenedores con Podman. Hay algunos comandos básicos que debes conocer relacionados con la gestión de imágenes de contenedores, como la búsqueda de imágenes, la descarga de imágenes, la visualización de imágenes disponibles en el sistema local y la eliminación de imágenes.

Ejecuta el siguiente comando para buscar una imagen.

podman search nginx

El comando buscará imágenes que contengan la palabra ‘nginx’ en todos los repositorios disponibles que ya estén definidos en el archivo de configuración ‘/etc/containers/repositories.conf’.

Buscar imagen de Podman

Ahora descarga algunas imágenes utilizando los siguientes comandos ‘podman pull’.

podman pull docker.io/library/nginx
podman pull docker.io/library/alpine

Una vez completado, comprueba todas las imágenes disponibles en la máquina del servidor.

podman images

Ahora tendrás las imágenes nginx y alpine en el sistema.

obtener imágenes con el comando podman pull

Para eliminar la imagen alpine, puedes utilizar la opción ‘rmi’ como se indica a continuación.

podman rmi alpine

eliminar imagen podman

Como resultado, sólo tendrás la imagen contenedora nginx en el sistema.

3. Gestionar contenedores

En esta etapa, hemos aprendido sobre la gestión de imágenes contenedoras. Y en el siguiente paso, aprenderemos a crear y gestionar contenedores con Podman.

Para crear un nuevo contenedor, podemos utilizar el comando ‘podman run’ como se indica a continuación.

podman run -d -p 8000:80 --name hakase-nginx docker.io/library/nginx

El comando creará un nuevo contenedor llamado ‘hakase-nginx’ basado en la imagen nginx y expondrá el puerto 8000 en la máquina anfitriona.

Detalla las opciones del comando:

-d – mantener el contenedor ejecutándose en segundo plano y sólo imprimir el ID del contenedor como resultado.
-p 8000:80 – mapeo de puertos para el contenedor y el sistema anfitrión. Puerto 8000 en la máquina anfitriona y puerto 80 en el contenedor.
–name hakase-nginx – especifica el nombre del contenedor con «hakase-nginx».

Ahora se mostrarán todos los contenedores en ejecución del sistema.

podman ps

Y se te mostrará que el contenedor llamado ‘hakase-nginx’ está en funcionamiento.

Ejecuta el contenedor podman

Si quieres comprobar todos los contenedores disponibles, puedes utilizar la opción ‘-a’.

podman ps -a

Ahora obtendrás todos los contenedores disponibles con diferentes estados.

Después de obtener todos los contenedores en ejecución en la máquina anfitriona, te mostraremos cómo comprobar todos los procesos dentro del contenedor, adjuntarlos al contenedor en ejecución, y detener y eliminar el contenedor.

Para comprobar el proceso dentro del contenedor en ejecución utilizando el siguiente comando.

podman top hakase-nginx

Ahora, para adjuntar y acceder al contenedor en ejecución, puedes utilizar el comando ‘exec’ como se indica a continuación.

podman exec -it hakase-nginx /bin/bash

Dentro del contenedor ‘hakase-nginx’, comprueba la versión de nginx en él.

nginx -V

Obtendrás el resultado que se muestra a continuación.

Gestionar contenedores Podman

Ahora escribe ‘exit’ para salir del contenedor.

A continuación, detén el contenedor ‘hakase-nginx’.

podman stop hakase-nginx

A continuación, elimina el contenedor.

podman rm hakase-nginx

Inicio y parada de Podman

Si quieres forzar la parada y eliminar el contenedor en ejecución, puedes utilizar la opción ‘-f’ forzar.

podman rm hakase-nginx -f

4. Gestionar Volumen

Desde la versión 0.12, Podman tiene soporte para crear y gestionar volúmenes sólo locales. Por lo tanto, si estás utilizando la versión anterior, no tendrás este comando ‘podman volume’.

Ahora crea un nuevo volumen local utilizando el siguiente comando.

podman volume create hakase-volume

Después, visualiza todos los volúmenes disponibles en el sistema.

podman volume ls

Y aparecerá el «volumen hakase» en la lista.

Para comprobar los detalles del volumen «hakase-volume», podemos utilizar la opción «inspeccionar» como se indica a continuación.

podman volume inspect hakase-volume

Y verás que el ‘mountPoint’ del volumen está en el directorio local ‘/var/lib/containers/storage/hakase-volume/_data’.

Podman gestiona volúmenes

Ve a ese directorio y crea un nuevo archivo index.html.

cd /var/lib/containers/storage/hakase-volume/_data
echo "<h1><center>This is custom index and volume - Hello Podman</center></h1>" > index.html

Ahora crea un nuevo contenedor y monta el ‘hakase-volume’ en el contenedor.

podman run -d -p 8000:80 -v hakase-volume:/usr/share/nginx/html --name hakase-nginx docker.io/library/nginx

Una vez creado el contenedor, comprueba los volúmenes disponibles en el contenedor utilizando el siguiente comando.

podman inspect -f '{{ json .Mounts }}' hakase-nginx | jq

En la parte inferior del resultado, obtendrás el ‘hakase-volumen’ en el contenedor.

Montajes de volumen

A continuación, comprueba la dirección IP del contenedor.

podman inspect -f '{{ .NetworkSettings.IPAddress }}' hakase-nginx

Accede al contenedor en el puerto HTTP utilizando httpie.

http http://10.88.0.4/

Y obtendrás el archivo personalizado index.html que se ha creado en el ‘hakase-volumen’.

volumen del contenedor de acceso

Ahora, si quieres eliminar el volumen, puedes utilizar la opción ‘rm’.

podman volume rm hakase-volume

Y el ‘volumen hakase’ será eliminado.

5. Crear imágenes personalizadas con Commit

Ahora vamos a crear imágenes de contenedor personalizadas utilizando Podman. Básicamente, Podman te permite crear imágenes personalizadas basadas en el contenedor modificado o crear nuevas imágenes personalizadas utilizando el ‘Dockerfile’.

En esta sección, vamos a crear nuevas imágenes personalizadas basadas en el contenedor modificado mediante el comando ‘podman commit’.

Descarga/retira la imagen maestra ‘ubuntu’.

podman pull docker.io/library/ubuntu

Ahora ejecuta el contenedor basado en la imagen ubuntu. Y dentro del contenedor, ejecuta el comando ‘bash’ que actualizará los repositorios e instalará el paquete nginx.

podman run --name container-temp ubuntu bash -c "apt update && apt install -y nginx"

Espera a que se instale nginx dentro del contenedor.

Utiliza commit para crear imágenes personalizadas

Una vez completada, crea una nueva imagen personalizada basada en el ‘contenedor-temp’ utilizando el siguiente comando.

podman commit container-temp my-nginx

A continuación, comprueba las imágenes disponibles en el sistema.

podman images

Y obtendrás una nueva imagen llamada ‘my-nginx’ en la lista.

Imagen personalizada creada

Si quieres ejecutar el contenedor basado en la imagen ‘my-nginx’, ejecuta el siguiente comando.

podman run -dt -p 8001:80 --name nginx01 my-nginx /usr/sbin/nginx -g 'daemon off;'

Ahora comprueba el contenedor en ejecución y comprueba su dirección IP.

podman ps
podman inspect --format '{{ .NetworkSettings.IPAddress }}' nginx01

Y se te mostrará que el contenedor ‘nginx01’ está en funcionamiento. Después, accede al puerto HTTP del contenedor ‘nginx01’.

http -p h 10.88.0.19

Como resultado, obtendrás la respuesta del encabezado HTTP que se muestra a continuación.

prueba nginx

6. Crear imágenes personalizadas con Dockerfile

Ahora vamos a crear una nueva imagen de contenedor personalizada utilizando el Dockerfile.

Crea un nuevo directorio de proyecto y crea un nuevo ‘Dockerfile’ dentro.

mkdir project; cd project/
vim Dockerfile

Pega la siguiente configuración.

FROM ubuntu
# Install Nginx
RUN \
apt-get update && \
apt-get install -y nginx && \
rm -rf /var/lib/apt/lists/* && \
echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
chown -R www-data:www-data /var/lib/nginx

# Define mountable directories.
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]

# Define the working directory.
WORKDIR /etc/nginx

# Define default command.
CMD ["nginx"]

# Expose ports.
EXPOSE 80
EXPOSE 443

Guarda y cierra.

Ahora ejecuta el podman que aparece a continuación para crear una nueva imagen personalizada utilizando el Dockerfile.

podman build -t hakase-image .

Utiliza Dockerfiles para crear imágenes

Una vez completado, comprueba la nueva imagen en la máquina.

podman images

Y obtendrás la imagen ‘hakase-image’.

Lista de imágenes podman

A continuación, crea un nuevo contenedor basado en la ‘hakase-image’ ejecutando el siguiente comando.

podman run -d -p 8002:80 --name nginx02 hakase-image

Después, comprueba el contenedor ‘nginx02’ y su dirección IP.

podman ps
podman inspect --format '{{ .NetworkSettings.IPAddress }}' nginx02

Asegúrate de que el contenedor ‘nginx02’ está en funcionamiento.

Ahora comprueba el contenedor utilizando la herramienta httpie.

http 10.88.0.21

Y se te mostrará la página Nginx por defecto y su cabecera HTTP.

acceder a la imagen de prueba

Por último, ahora puedes gestionar contenedores, imágenes y volumen utilizando Podman. Y puedes crear nuevas imágenes personalizadas para tu aplicación utilizando el Dockerfile.

También te podría gustar...