En esta ocasión hemos utilizado la opción -d o --detach del comando podman run, para que la ejecución del comando en el contenedor se haga en segundo plano, de manera desatendida, sin estar conectada a la entrada y salida estándar.

Por ejemplo, en este ejemplo ejecutamos un proceso demonio en el contenedor (proceso que se ejecuta indefinidamente) y utilizamos la poción -d para que se ejecute de manera desatendida, en segundo planto. En el ejemplo ejecutamos un bucle infinito que va escribiendo secuencialmente números en la salida estándar y en un fichero cada un segundo:

$ podman run -d --name contenedor1 ubuntu bash -c 'i=0;while true; do echo $((i=i+1)); echo $i >> numeros.txt; sleep 1; done'

En la instrucción podman run hemos ejecutado el comando con bash -c que nos permite ejecutar uno o más comandos en el contenedor de forma más compleja (por ejemplo, indicando ficheros dentro del contenedor).

Comprobamos que el contenedor se está ejecutando:

$ podman ps
CONTAINER ID  IMAGE                            COMMAND               CREATED        STATUS        PORTS       NAMES
7a3e97be08c1  docker.io/library/ubuntu:latest  bash -c i=0;while...  3 minutes ago  Up 3 minutes              contenedor1

Podemos visualizar los logs del contenedor, ejecutando el siguiente comando:

$ podman logs contenedor1

Con la opción logs -f seguimos visualizando los logs en tiempo real.

Ciclo de vida de los contenedores

Tenemos varios comandos que nos permiten controlar el ciclo de vida del contenedor. En una terminal podemos visualizar los logs del contenedor y en otro terminal ejecutar los comandos para ver cómo se comporta el contenedor:

  • podman start: Inicia la ejecución de un contenedor que está parado.
  • podman stop: Detiene la ejecución de un contenedor en ejecución.
  • podman restart: Para y vuelve a iniciar la ejecución de un contenedor.
  • podman pause: Pausa la ejecución de un contenedor.
  • podman unpause: Continúa la ejecución de un contenedor que estaba pausado..

Ejecución de comandos en contenedores

Si tenemos un contenedor que está iniciado, podemos ejecutar comandos en él con podman exec. Por ejemplo:

$ podman exec contenedor1 ls
...
numeros.txt
...
$ podman exec contenedor1 cat numeros.txt

Si queremos acceder interactivamente al contenedor, podemos ejecutar:

$ podman exec -it contenedor1 bash

Copiar ficheros en contenedores

Con el comando podman cp podemos copiar ficheros a o desde un contenedor. Por ejemplo, si tengo un fichero en mi equipo lo puedo copiar al contenedor:

$ echo "Curso Podman">podman.txt
$ podman cp podman.txt contenedor1:/tmp

Podemos comprobar que el fichero existe en el contenedor:

$ podman exec contenedor1 cat /tmp/podman.txt
Curso Podman

Evidentemente, también podemos copiar ficheros desde el contenedor a nuestro equipo:

$ podman cp contenedor1:numeros.txt .

Eliminar un contenedor demonio

Hay que tener en cuenta que un contenedor que esta ejecutándose no puede ser eliminado. Tendríamos que parar el contenedor y posteriormente borrarlo:

$ podman stop contenedor1
$ podman rm contenedor1

Otra opción es borrarlo a la fuerza:

$ podman rm -f contenedor1

Para eliminar todos los contenedores que están parados:

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

Otra solución sería:

$ podman rm --all

Finalmente para eliminar todos los contenedores:

$ podman rm -f --all

Actualizado: