Ciclo de vida
El ciclo de vida de un contenedor en Docker abarca desde su creación hasta su eliminación, pasando por varios estados y operaciones que definen cómo y cuándo el contenedor está activo, pausado, detenido, y finalmente eliminado. A continuación, te explico cada fase del ciclo de vida de un contenedor:
1. Creación (Create)
- Descripción: En esta fase, Docker crea el contenedor a partir de una imagen, pero aún no lo inicia. El contenedor se define con las configuraciones necesarias, como el comando a ejecutar, las variables de entorno, los volúmenes y las redes asociadas.
- Comando:
docker create <nombre_imagen>
- Estado: El contenedor se encuentra en un estado “creado” (
created
), pero no está en ejecución. - Ejemplo:
docker create --name mi_contenedor nginx
Esto crea un contenedor llamado
mi_contenedor
a partir de la imagennginx
, pero no lo inicia.
2. Inicio (Start)
- Descripción: Una vez creado el contenedor, se puede iniciar. En esta fase, Docker ejecuta el comando principal definido en la imagen dentro del contenedor.
- Comando:
docker start <nombre_contenedor>
- Estado: El contenedor pasa a un estado “en ejecución” (
running
). - Ejemplo:
docker start mi_contenedor
Esto inicia el contenedor
mi_contenedor
previamente creado. - Nota: Si prefieres crear y arrancar el contenedor en un solo paso, puedes usar:
docker run <nombre_imagen>
Esto creará y ejecutará el contenedor en un solo comando.
3. Pausar (Pause)
- Descripción: Pausar un contenedor detiene temporalmente todos los procesos dentro del contenedor sin detener el contenedor en sí. Esto es útil para liberar recursos del sistema sin interrumpir el estado del contenedor.
- Comando:
docker pause <nombre_contenedor>
- Estado: El contenedor entra en un estado “pausado” (
paused
), donde los procesos están detenidos, pero no finalizados. - Ejemplo:
docker pause mi_contenedor
4. Reanudar (Unpause)
- Descripción: Reanuda los procesos de un contenedor que había sido pausado.
- Comando:
docker unpause <nombre_contenedor>
- Estado: El contenedor regresa al estado “en ejecución” (
running
). - Ejemplo:
docker unpause mi_contenedor
5. Detener (Stop)
- Descripción: Detener un contenedor finaliza el proceso principal que se está ejecutando en el contenedor, lo que también detiene cualquier proceso secundario. Docker le da al contenedor un tiempo para apagarse correctamente antes de forzarlo a detenerse.
- Comando:
docker stop <nombre_contenedor>
- Estado: El contenedor entra en un estado “detenido” (
exited
). - Ejemplo:
docker stop mi_contenedor
- Nota: El tiempo de espera predeterminado es de 10 segundos. Puedes especificar un tiempo de espera diferente:
docker stop -t 30 mi_contenedor
Esto espera 30 segundos antes de forzar la detención del contenedor.
6. Reiniciar (Restart)
- Descripción: Reinicia un contenedor que ha sido detenido. Esto detiene el contenedor si está en ejecución y luego lo vuelve a iniciar.
- Comando:
docker restart <nombre_contenedor>
- Estado: El contenedor pasa de “detenido” (
exited
) a “en ejecución” (running
). - Ejemplo:
docker restart mi_contenedor
7. Finalizar (Kill)
- Descripción: Forza la detención inmediata del contenedor enviando una señal de terminación (
SIGKILL
) al proceso principal. Esto no permite un apagado ordenado del contenedor. - Comando:
docker kill <nombre_contenedor>
- Estado: El contenedor entra en un estado “detenido” (
exited
), similar al comandostop
, pero sin permitir el tiempo de gracia para el apagado. - Ejemplo:
docker kill mi_contenedor
8. Eliminar (Remove)
- Descripción: Elimina un contenedor que está detenido. Esto borra los datos del contenedor, pero no afecta a la imagen desde la cual fue creado.
- Comando:
docker rm <nombre_contenedor>
- Estado: El contenedor desaparece de la lista de contenedores, dejando solo la imagen original y cualquier volumen persistente.
- Ejemplo:
docker rm mi_contenedor
- Nota: Si quieres eliminar un contenedor en ejecución, primero debes detenerlo o puedes usar el flag
-f
(forzar):docker rm -f mi_contenedor
9. Inspección y Loggin (Inspect y Logs)
- Descripción:
- Inspect: Permite obtener detalles completos de un contenedor, como sus configuraciones, red, volúmenes montados, etc.
- Logs: Permite ver los logs generados por el contenedor, lo que es útil para la depuración.
- Comandos:
docker inspect <nombre_contenedor> docker logs <nombre_contenedor>
- Ejemplo:
docker inspect mi_contenedor docker logs mi_contenedor
Resumen del Ciclo de Vida
- Creación: Definición y creación del contenedor a partir de una imagen.
- Inicio: Ejecución del contenedor.
- Pausa/Reanudar: Detener y reanudar temporalmente los procesos del contenedor.
- Detener: Finalizar los procesos y detener el contenedor.
- Reiniciar: Detener e iniciar nuevamente el contenedor.
- Finalizar: Forzar la detención inmediata del contenedor.
- Eliminar: Eliminar el contenedor después de que ha sido detenido.
El ciclo de vida de un contenedor es esencial para entender cómo gestionar y mantener aplicaciones en Docker. Cada fase te ofrece herramientas para controlar de manera efectiva cómo y cuándo se ejecutan tus contenedores.