Cómo reiniciar el servicio Docker

DockerBeginner
Practicar Ahora

Introducción

Docker es una potente plataforma de contenedorización que permite a los desarrolladores desplegar y gestionar aplicaciones de manera eficiente. Entender cómo reiniciar los servicios de Docker es crucial para mantener la estabilidad del sistema y resolver posibles problemas de configuración o rendimiento. Este tutorial proporciona una guía completa sobre cómo reiniciar los servicios de Docker en diferentes escenarios y sistemas operativos. En este laboratorio, aprenderá cómo reiniciar el demonio de Docker (Docker daemon) y los contenedores individuales, y comprenderá el impacto de los diferentes métodos de reinicio.

Reiniciar el Demonio de Docker (Restarting the Docker Daemon)

El demonio de Docker (Docker daemon) es el proceso en segundo plano que gestiona los objetos de Docker, como imágenes, contenedores, redes y volúmenes. Reiniciar el demonio de Docker a menudo es necesario después de realizar cambios en la configuración o para resolver problemas que afectan a todo el entorno de Docker.

En este paso, aprenderá cómo reiniciar el demonio de Docker utilizando comandos de systemd.

Primero, verifiquemos el estado actual del servicio de Docker.

sudo systemctl status docker

Debería ver una salida que indique si el servicio de Docker está activo y en ejecución.

Output of checking Docker service status

Ahora, reiniciemos el servicio de Docker. Esto detendrá todos los contenedores en ejecución gestionados por el demonio y luego iniciará el demonio nuevamente.

sudo systemctl restart docker

Una vez que se complete el comando, verifique el estado nuevamente para confirmar que el servicio de Docker se ha reiniciado correctamente.

sudo systemctl status docker

Debería ver que el servicio se ha reiniciado y está activo.

Alternativamente, puede detener e iniciar el servicio de Docker por separado. Primero, detenga el servicio:

sudo systemctl stop docker

Verifique el estado para confirmar que está inactivo:

sudo systemctl status docker

Luego, inicie el servicio:

sudo systemctl start docker

Finalmente, verifique el estado una vez más para asegurarse de que esté activo:

sudo systemctl status docker

Reiniciar el demonio de Docker es una operación fundamental para administrar su entorno de Docker. Es importante tener en cuenta que esta acción detendrá todos los contenedores en ejecución.

Reiniciar Contenedores Individuales (Restarting Individual Containers)

Si bien reiniciar todo el demonio de Docker (Docker daemon) afecta a todos los contenedores, a menudo es necesario reiniciar solo un contenedor específico. Esto es útil para aplicar cambios de configuración específicos del contenedor, resolver problemas con una sola aplicación o simplemente reiniciar un servicio que se ejecuta en un contenedor.

En este paso, aprenderá cómo reiniciar contenedores de Docker individuales.

Primero, vamos a descargar (pull) una imagen simple de Nginx y ejecutar un contenedor.

docker pull nginx
docker run -d --name my-nginx -p 80:80 nginx

Este comando descarga la imagen nginx, ejecuta un contenedor llamado my-nginx en modo detached (-d), y mapea el puerto 80 en el host al puerto 80 en el contenedor (-p 80:80).

Verifique que el contenedor se esté ejecutando:

docker ps

Debería ver el contenedor my-nginx listado con un estado de Up.

Ahora, reiniciemos el contenedor my-nginx.

docker restart my-nginx

Este comando envía una señal de parada al contenedor, espera a que se detenga correctamente y luego lo inicia de nuevo. De forma predeterminada, Docker espera 10 segundos a que el contenedor se detenga antes de forzar su finalización.

Verifique el estado del contenedor nuevamente:

docker ps

El contenedor aún debería aparecer como Up, pero la columna STATUS mostrará que se reinició (por ejemplo, Up X seconds).

También puede especificar un tiempo de espera (timeout) para la operación de reinicio utilizando la bandera -t. Por ejemplo, para esperar 5 segundos:

docker restart -t 5 my-nginx

Esto es útil si necesita dar a su aplicación más o menos tiempo para que se cierre limpiamente.

Reiniciar contenedores individuales proporciona un control granular sobre sus aplicaciones sin afectar a otros contenedores en ejecución o al propio demonio de Docker.

Configurar Políticas de Reinicio de Contenedores (Configuring Container Restart Policies)

Docker le permite configurar políticas de reinicio (restart policies) para los contenedores. Una política de reinicio determina si un contenedor debe ser reiniciado automáticamente por el demonio de Docker (Docker daemon) después de que salga. Esta es una característica crucial para garantizar la disponibilidad de sus aplicaciones.

En este paso, aprenderá cómo configurar políticas de reinicio para contenedores de Docker.

Primero, detengamos y eliminemos el contenedor my-nginx anterior para comenzar de nuevo.

docker stop my-nginx
docker rm my-nginx

Ahora, ejecutemos un nuevo contenedor Nginx con una política de reinicio de always.

docker run -d --name my-nginx-always --restart=always -p 80:80 nginx

La bandera --restart=always le dice a Docker que siempre reinicie el contenedor si se detiene, independientemente del código de salida. También reiniciará el contenedor cuando se inicie el demonio de Docker.

Verifique que el contenedor se esté ejecutando:

docker ps

Ahora, simulemos una falla del contenedor deteniéndolo manualmente.

docker stop my-nginx-always

Espere unos segundos y luego verifique el estado del contenedor nuevamente:

docker ps

Debería ver que el contenedor my-nginx-always ha sido reiniciado automáticamente por el demonio de Docker. La columna STATUS indicará que ha estado Up durante un breve período.

Otras políticas de reinicio comunes incluyen:

  • no: No reinicie automáticamente el contenedor (predeterminado).
  • on-failure: Reinicie el contenedor solo si sale con un código de salida distinto de cero (lo que indica un error). Opcionalmente, puede especificar el número máximo de intentos de reinicio (por ejemplo, on-failure:5).
  • unless-stopped: Siempre reinicie el contenedor a menos que el usuario lo detenga explícitamente o se detenga el demonio de Docker.

Probemos la política on-failure. Detenga y elimine el contenedor actual:

docker stop my-nginx-always
docker rm my-nginx-always

Ejecute un nuevo contenedor con la política on-failure:

docker run -d --name my-nginx-on-failure --restart=on-failure -p 80:80 nginx

Verifique que se esté ejecutando:

docker ps

Ahora, simulemos una falla. Podemos hacer esto ejecutando un comando dentro del contenedor que salga con un estado distinto de cero.

docker exec my-nginx-on-failure sh -c "exit 1"

Verifique el estado del contenedor después de unos segundos:

docker ps

El contenedor debería haberse reiniciado automáticamente porque salió con un estado distinto de cero.

Las políticas de reinicio son una herramienta poderosa para garantizar la resiliencia de sus aplicaciones en contenedores. Al configurar la política adecuada, puede automatizar la recuperación de contenedores que se detienen inesperadamente.

Resumen (Summary)

En este laboratorio, ha aprendido cómo reiniciar el demonio de Docker (Docker daemon) y los contenedores individuales. Exploró diferentes métodos para reiniciar el demonio utilizando comandos de systemd y aprendió cómo reiniciar contenedores específicos utilizando el comando docker restart. Además, aprendió sobre las políticas de reinicio (restart policies) de Docker y cómo configurarlas para reiniciar automáticamente los contenedores según diferentes condiciones, mejorando la disponibilidad de sus aplicaciones. Estas habilidades son fundamentales para administrar y solucionar problemas de entornos Docker de manera efectiva.