¿Cómo funciona el ciclo de vida de un contenedor Docker?
La comprensión del ciclo de vida de un contenedor Docker es fundamental para su manejo eficaz. Un contenedor Docker es más que solo un encapsulado de aplicaciones; es un proceso del sistema operativo que se ejecuta mientras su "main process" esté activo. Vamos a explorar en detalle cómo gestionar eficazmente los ciclos de vida de los contenedores y cómo mantenerlos operativos cuando sea necesario.
¿Por qué se apaga un contenedor?
Cada contenedor ejecuta un proceso, que es el proceso principal o "main process". Este proceso es el que determina si el contenedor está operativo. Cuando este proceso finaliza, ya sea porque se completa o porque falla, el contenedor se apaga. Esto se debe a que al ejecutar un comando como exit en la terminal de un contenedor, finalizamos su proceso principal, cerrando así el contenedor.
docker run --name mi_contenedor ubuntu /bin/bash
# Dentro del contenedorexit
¿Cómo mantener un contenedor en ejecución?
A veces necesitamos que un contenedor se mantenga activo para otros propósitos. Esto se puede lograr mediante la ejecución de un proceso que no finaliza automáticamente, como tail -f /dev/null. Este enfoque asegura que el contenedor no se apague a menos que se apague manualmente.
docker run --name always_up -d ubuntu tail -f /dev/null
La opción -d (detach) permite que el contenedor se ejecute en segundo plano, mientras que el comando tail -f /dev/null crea un proceso que no termina.
¿Cómo interactuar con un contenedor en ejecución?
Puede que desees ejecutar comandos en un contenedor que está activo. Para esto, Docker ofrece el comando docker exec, que te permite ejecutar nuevos procesos dentro del contenedor en ejecución sin afectarlo.
dockerexec -it always_up /bin/bash
El comando -it te permite ejecutar de manera interactiva, abriendo una shell dentro del contenedor y permitiendo que interactúes directamente con su sistema de archivos.
¿Qué ocurre con los procesos dentro del contenedor?
Docker está diseñado para aislar los procesos dentro de un contenedor de esos en la máquina host. Al examinar los procesos que corren en un contenedor, solo verás aquellos que están siendo ejecutados en ese contenedor específico, no los del sistema operativo de la máquina local.
ps aux
ps -ef
¿Cómo apagar un proceso desde fuera del contenedor?
Si necesitas apagar un proceso en ejecución, puedes hacerlo desde la máquina host, inspeccionado primero para obtener el process id y luego terminándolo. Esto solo funciona directamente en sistemas Linux, ya que Docker corre nativamente en Linux.
Esta acción detendrá el proceso principal y, consecuentemente, apagará el contenedor, siempre que se realice en un sistema que no utiliza una máquina virtual como intermediaria (por ejemplo, Mac).
¿Qué hemos aprendido sobre los contenedores Docker?
Al correr un contenedor, debes pensar en él como un proceso encapsulado. Un contenedor permanece vivo siempre y cuando su proceso principal esté operativo. Entender y manipular este ciclo de vida te permitirá controlar mejor el comportamiento de tus aplicaciones en entornos Docker. Ahora que tienes este conocimiento, ¡es el momento de experimentar y llevar tus habilidades con Docker a nuevos niveles!