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.
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
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’.
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.
Para eliminar la imagen alpine, puedes utilizar la opción ‘rmi’ como se indica a continuación.
podman rmi alpine
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.
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.
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
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’.
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.
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’.
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.
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.
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.
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 .
Una vez completado, comprueba la nueva imagen en la máquina.
podman images
Y obtendrás la imagen ‘hakase-image’.
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.
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.