Gestionar contenedores con Podman

Este es uno de los capítulos del tutorial Tutorial de Podman. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

En el capítulo anterior de este tutorial sobre Podman, pudiste ver como lidiar con imágenes, como podías gestionarlas, descargarlas, borrarlas, etc. Ahora toca ir un paso mas allá, ha llegado el momento de poner en marcha tus contenedores con Podman. De poner en funcionamiento esas imágenes, e iniciar tus aplicaciones y servicios, con la ventaja de que no te tienes que preocupar de dependencias, porque la aplicación o servicio viene perfectamente empaquetado. Simplemente es lanzar el contenedor y comenzar a utilizarlo. Sin embargo, para esto, es necesario conocer como gestionar contenedores con Podman, y esto es precisamente lo que te voy a mostrar en este nuevo capítulo del tutorial

Gestionar contenedores con Podman

Gestionar contenedores con Podman

Preliminares

Como paso previo a meterte en harina, y ver como gestionar contenedores con Podman, vas a crearte una imagen con la que realizar todas las pruebas. O mejor dicho, recuperarás la imagen del capítulo anterior de gestionar imágenes con Podman. Le vas a añadir una pequeña variante para poder ver algunos comandos de Podman en funcionamiento. Así el script será el siguiente,

#!/bin/sh
sleep 3600
echo "Hola mundo"

Y el Dockerfile tendrá el siguiente aspecto,

FROM alpine:3.13.0
COPY ./sample.sh /
CMD /bin/sh /sample.sh

Y solo te queda crear la imagen, que puedes hacerlo con tan solo ejecutar la siguiente instrucción, como ya viste en el capítulo anterior del tutorial,

podman build . -t saludos:sleep

Levantando tu primer contenedor

Una vez construida tu imagen es el momento de levantar tu primer contenedor. Esto es tan sencillo como ejecutar podman run saludos:sleep. Pero espera, no lo inicies todavía, porque en el caso de que lo hagas, tendrás que esperar esa hora, los 3600 segundos, a que termine la ejecución. Si eres un ansias, y no lo has podido evitar y has levantando ya el contenedor, tampoco te preocupes, simplemente pulsa Ctrl+c. En lugar de esto ejecuta,

podman run -d saludos:sleep

Si todo ha ido bien, ahora podrás comprobar si tu contenedor está en funcionamiento. Para ello, tan solo tienes que ejecutar la siguiente instrucción,

podman ps

Esto te mostrará algo como lo que puedes ver a continuación,

CONTAINER ID IMAGE         COMMAND   CREATED      STATUS  PORTS NAMES
bfdf016cc475 saludos:sleep /bin/s... 1 minute ago Created       competent_lichterman

El primer dato que aparece es un identificador del contenedor. Este identificador te permitirá de forma sencilla gestionar el contenedor, por ejemplo, detenerlo o incluso borrarlo. La siguiente columna hace referencia a la imagen de la cual se ha creado el contenedor. Después encontrarás el comando, el tiempo desde que se creó el contenedor, el estado del mismo y un nombre del mismo. Este nombre es aleatorio, a menos que tu lo definas, algo que es recomendable para que sea mas sencilla su gestión.

Si quieres ponerle un nombre personalizado a tu contenedor, para que sea mas sencillo su gestión tienes que utilizar la opción --name, tal y como te muestro en la siguiente instrucción,

podman run -d --name saluditos saludos:sleep

Si ahora ejecutas de nuevo podman ps verás que aparece un nuevo contenedor, pero esta vez con el nombre que le hayas puesto, en mi caso, saluditos.

La anterior instrucción, te muestra todos los contenedores que están en funcionamiento. Sin embargo, es posible que tengas contenedores parados. Para ver todos los contenedores, incluso los que están parados, tienes que utilizar la opción -a, es decir, podman ps -a.

Deteniendo y matando contenedores

Por supuesto no todo se trata de iniciar un contenedor. Es posible que quieras detener el contenedor. Para esto tienes la opción stop. Así, para el caso anterior, puedes detener el contenedor utilizando la opción,

podman stop saluditos

Aunque por supuesto también podrías detenerlo utilizando el identificador del contenedor, no solo por el nombre. Te lo comento para el caso de que no le hayas puesto nombre a ese contenedor.

No solo puedes tener el contenedor utilizando stop, también puedes detenerlo utilizando kill, es decir,

podman kill saluditos

La diferencia entre stop y kill, es que mientras que con el primero envías la señal SIGTERM y luego la señal SIGKILL, con el segundo envías directamente la señal SIGKILL. El primero es mas lento que el segundo, pero realizará todos los procesos que se esperan de él, por ejemplo, guardar datos en una base de datos. El segundo, es muy probable, que se deje procesos por realizar.

Copiar archivos entre el host y el contenedor

Es muy probable, que en un momento dado, quieras copiar archivos entre el host, la máquina en la que has levantado el contenedor y el contenedor, ya sea en un sentido, es decir, del host al contenedor, o en otro sentido del contenedor al host. Primero de tu máquina al contenedor,

touch unarchivo.txt
podman cp unarchivo.txt saluditos:.

He creado el archivo unarchivo.txt para que no haya dudas. Ahora si quisieras comprobar que el archivo se encuentra en el contenedor, tienes que entrar dentro de él y echar una mirada. ¿Como entrar en el contenedor?,

podman exec -it saluditos sh

De la misma forma, una vez dentro del contenedor, puedes hacer de la misma forma, crear el archivo y copiarlo fuera,

podman exec -it saluditos sh
touch ejemplo.txt
exit
podman cp saluditos:ejemplo.txt ./

Monitorizar el contenedor

Conocer lo que sucede en tu contenedor es importante, sobre todo para aquellos casos en los que no todo se está comportando como tu esperabas. En este caso, tienes dos opciones muy interesantes para averiguar lo que sucede. La primera de las opciones, te permite tomar un foto de la situación,

podman top saluditos

USER   PID   PPID   %CPU    ELAPSED           TTY   TIME   COMMAND
root   1     0      0.000   9m32.327629406s   ?     0s     /bin/sh /sample.sh 
root   2     1      0.000   9m32.327774814s   ?     0s     sleep 3600

La segunda de las opciones es utilizar la opción stats. Esta opción te seguir en tiempo real todo lo que sucede en el contenedor. Sin embargo, para esto es necesario que esté habilitado cgroups v2. En el caso de Ubuntu, actualmente, en el momento de escribir este artículo, no está habilitado por defecto.

Borrar contenedores con Podman

Algo que tienes que tener en cuenta es que cada vez que instancias una imagen obtendrás un contenedor. Si no vas con cuidado, te puedes llevar la sorpresa que que el número de contenedores crezca de manera considerable, sobre todo, aquellos que no usas. Esta se una de las razones para acostumbrarte a utilizar podman ps -a. De la misma manera, si les pones nombre, también tendrás menos posibilidades de dejarlos en el olvido. Sin embargo, tarde o temprano temprano vas a querer limpiar tu equipo de contenedores. Así, si quieres borrar un contenedor concreto, simplemente tienes que ejecutar la instrucción,

podman rm saluditos

De la misma forma que anteriormente, si no le has puesto nombre al contenedor, también lo puedes borrar utilizando su número de identificación.

Pero, ¿que sucede cuando tienes decenas de contenedores?. Siempre puedes utilizar un sencillo script, como,

for i in ID1 ID2 ID3
do
    podman rm $i
done

Donde ID1, ID2, ID3 son los identificadores de los contenedores que quieres borrar de tu equipo. Sin embargo, si no te preocupa borrar todos los contenedores que estén parados, puedes utiliza la opción prune,

podman container prune

Esto te preguntará si quieres borrarlos contenedores que no estén en ejecución, y en su caso los borrará,

WARNING! This will remove all non running containers.
Are you sure you want to continue? [y/N] y

Otras herramientas interesantes

Con esto que has visto hasta el momento, ya puedes levantar tus contenedores, detenerlos y borrarlos. Sin embargo, existen muchas mas opciones, algunas de ellas realmente interesantes y que tienes que tener presentes, sobre todo en el caso de que tengas algún problema en la ejecución de tus contenedores,

  • create te permite crear un contenedor pero no ponerlo en marcha
  • cleanup esta opción te permitirá limpiar redes y puntos de montaje de uno o más volúmenes, con la salvedad de que estos tienen que estar parados.
  • export permite exportar un contenedor como un archivo tar.
  • logs esta opción es la que te permitirá ver los logs del contenedor.

Conclusiones

Como te he indicado en la última sección del apartado anterior, estas son solo algunas de las opciones y herramientas que tienes para gestionar contenedores con Podman. Te recomiendo encarecidamente que revises la documentación oficial de Podman.


Mas información,

Imagen de portada de Guillaume Bolduc en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *