Gestión del Ciclo de Vida del Contenedor
Comprender cómo gestionar el ciclo de vida de un contenedor es crucial para el uso eficaz de Docker. En este paso, exploraremos varios comandos para controlar los estados del contenedor y comprender el ciclo de vida del contenedor.
Estados del Ciclo de Vida del Contenedor
Un contenedor Docker puede existir en varios estados:
- Created (Creado): El contenedor se crea pero no se inicia
- Running (En ejecución): El contenedor se está ejecutando actualmente
- Paused (Pausado): La ejecución del contenedor está en pausa
- Stopped (Detenido): El contenedor está detenido pero aún existe
- Removed (Eliminado): El contenedor se elimina
Exploremos cómo realizar la transición entre estos estados.
Creando un Contenedor sin Iniciarlo
Puede crear un contenedor sin iniciarlo usando el comando create:
docker create --name test-container nginx
Esto crea un contenedor pero no lo inicia. Verifique su estado:
docker ps -a
Debería ver el nuevo contenedor con un estado "Created" (Creado):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f4ab92d1234 nginx "/docker-entrypoint.…" 5 seconds ago Created test-container
a72369167c21 nginx "/docker-entrypoint.…" 40 minutes ago Up 30 minutes 0.0.0.0:8080->80/tcp my-nginx
bc123def456a redis "docker-entrypoint.s…" 10 minutes ago Up 10 minutes 6379/tcp redis-server
Iniciando un Contenedor Creado
Para iniciar el contenedor creado:
docker start test-container
Verifique que se esté ejecutando:
docker ps
Pausando y Reanudando Contenedores
Docker le permite pausar un contenedor, lo que congela todos los procesos dentro de él:
docker pause test-container
Verifique su estado:
docker ps
Salida:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f4ab92d1234 nginx "/docker-entrypoint.…" 2 minutes ago Up 1 minute (Paused) test-container
a72369167c21 nginx "/docker-entrypoint.…" 42 minutes ago Up 32 minutes 0.0.0.0:8080->80/tcp my-nginx
bc123def456a redis "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 6379/tcp redis-server
Para reanudar el contenedor:
docker unpause test-container
Verifique que se esté ejecutando de nuevo:
docker ps
Deteniendo y Reiniciando Contenedores
Para detener un contenedor de forma correcta (enviando SIGTERM, luego SIGKILL después de un período de gracia):
docker stop test-container
Para forzar la detención de un contenedor (enviando SIGKILL):
docker start test-container ## Start it again first
docker kill test-container ## Then kill it
Para reiniciar un contenedor (lo detiene y lo inicia de nuevo):
docker start test-container ## Start it again first
docker restart test-container
Eliminando Contenedores
Para eliminar un contenedor detenido:
docker stop test-container ## Make sure it's stopped first
docker rm test-container
Verifique que se haya ido:
docker ps -a | grep test-container
No debería obtener ninguna salida, lo que indica que el contenedor ha sido eliminado.
Eliminando un Contenedor en Ejecución
Puede forzar la eliminación de un contenedor en ejecución:
docker run --name temp-container -d nginx
docker rm -f temp-container
Políticas de Reinicio del Contenedor
Docker le permite establecer políticas de reinicio para los contenedores:
docker run --name always-restart --restart always -d nginx
Este contenedor se reiniciará automáticamente si sale o si Docker se reinicia.
Verifique la política de reinicio:
docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' always-restart
Salida:
always
Detengamos y eliminemos este contenedor:
docker rm -f always-restart
Comprender estos comandos del ciclo de vida le brinda control total sobre sus contenedores Docker, lo que le permite gestionar de manera eficiente sus estados en función de las necesidades de su aplicación.