Introducción
En este laboratorio, aprenderás a utilizar el comando docker compose pause para suspender temporalmente los servicios en ejecución definidos en un archivo docker-compose.yml. Comenzaremos creando un archivo docker-compose.yml simple que define un servicio web utilizando la imagen de Nginx.
Después de crear el archivo docker-compose.yml, aprenderás cómo iniciar los servicios usando docker compose up, pausar un servicio específico en ejecución con docker compose pause, verificar que el servicio está efectivamente pausado y, finalmente, reanudar el servicio con docker compose unpause. Este ejercicio práctico te brindará experiencia en la gestión del ciclo de vida de los servicios de Docker Compose.
Crear un archivo docker-compose.yml simple
En este paso, crearemos un archivo docker-compose.yml simple. Antes de comenzar, necesitamos instalar Docker Compose. Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker multi-contenedor. Con Compose, usas un archivo YAML para configurar los servicios de tu aplicación. Luego, con un solo comando, creas e inicias todos los servicios desde tu configuración.
Primero, instalemos Docker Compose. Descargaremos el binario de Docker Compose y lo haremos ejecutable.
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Después de la instalación, puedes verificar la instalación comprobando la versión de Docker Compose.
docker-compose --version
Deberías ver una salida similar a Docker Compose version v2.20.2.
Ahora, creemos un directorio para nuestro proyecto y accedamos a él.
mkdir my-docker-app
cd my-docker-app
Dentro del directorio my-docker-app, crearemos un archivo llamado docker-compose.yml. Este archivo definirá los servicios para nuestra aplicación. Usaremos el editor nano para crear y editar este archivo.
nano docker-compose.yml
En el editor nano, pega el siguiente contenido. Este archivo docker-compose.yml define un único servicio llamado web que utiliza la imagen nginx:latest.
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
Analicemos este archivo:
version: '3.8'especifica la versión del formato del archivo Docker Compose.services:define los servicios que componen tu aplicación.web:es el nombre de nuestro servicio.image: nginx:latestespecifica la imagen Docker a usar para este servicio. En este caso, usamos la última versión de la imagen Nginx.ports:mapea puertos entre el host y el contenedor."80:80"mapea el puerto 80 del host al puerto 80 del contenedor.
Después de pegar el contenido, guarda el archivo presionando Ctrl + X, luego Y, y finalmente Enter.
Antes de iniciar el servicio, debemos asegurarnos de que la imagen nginx:latest esté disponible localmente. Si no lo está, Docker Compose la descargará automáticamente cuando inicies el servicio. Sin embargo, también puedes descargar la imagen manualmente usando el comando docker pull.
docker pull nginx:latest
Este comando descarga la imagen nginx:latest desde Docker Hub.
Iniciar servicios definidos en docker-compose.yml
En este paso, iniciaremos los servicios definidos en nuestro archivo docker-compose.yml. Utilizaremos el comando docker-compose up para construir, crear e iniciar los servicios.
Asegúrate de estar en el directorio ~/project/my-docker-app donde creaste el archivo docker-compose.yml en el paso anterior.
cd ~/project/my-docker-app
Ahora, ejecuta el siguiente comando para iniciar los servicios. La bandera -d ejecuta los contenedores en modo detached (desacoplado), lo que significa que se ejecutarán en segundo plano.
docker-compose up -d
Este comando leerá el archivo docker-compose.yml, creará los contenedores necesarios según las definiciones de servicio y los iniciará. Si la imagen nginx:latest no está presente en tu sistema, Docker Compose la descargará automáticamente antes de iniciar el contenedor.
Deberías ver una salida indicando que se están creando e iniciando la red, el volumen (si existe) y el contenedor del servicio. Por ejemplo:
[+] Running 1/1
⠿ Container my-docker-app-web-1 Started
Para verificar que el servicio está en ejecución, puedes usar el comando docker-compose ps. Este comando lista los contenedores gestionados por Docker Compose en el directorio actual.
docker-compose ps
Deberías ver una salida similar a esta, mostrando el contenedor del servicio web con estado running:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
my-docker-app-web-1 nginx:latest "/docker-entrypoint.…" web 2 minutes ago running 0.0.0.0:80->80/tcp, :::80->80/tcp
También puedes verificar que el servidor web Nginx sea accesible usando el comando curl para acceder a localhost en el puerto 80.
curl localhost:80
Deberías ver el HTML de la página de bienvenida predeterminada de Nginx, lo que indica que el servidor web está en ejecución y accesible.
Pausar un servicio en ejecución
En este paso, pausaremos el contenedor del servicio web que está en ejecución. Pausar un contenedor suspende todos sus procesos. Esto es diferente a detener un contenedor, lo cual finaliza sus procesos. Cuando un contenedor está pausado, su estado se congela y consume recursos mínimos de CPU.
Asegúrate de estar en el directorio ~/project/my-docker-app.
cd ~/project/my-docker-app
Para pausar el servicio web, usa el comando docker-compose pause seguido del nombre del servicio.
docker-compose pause web
Deberías ver una salida indicando que el servicio está siendo pausado:
[+] Paused 1/1
⠿ Container my-docker-app-web-1 Paused
Ahora, verifiquemos el estado del servicio usando docker-compose ps.
docker-compose ps
La salida debería mostrar el contenedor del servicio web con estado paused:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
my-docker-app-web-1 nginx:latest "/docker-entrypoint.…" web 5 minutes ago paused 0.0.0.0:80->80/tcp, :::80->80/tcp
Cuando un contenedor está pausado, no debería responder a solicitudes. Intentemos acceder al servidor web Nginx nuevamente usando curl.
curl localhost:80
Este comando podría quedarse colgado o devolver un error, indicando que el servicio no responde porque está pausado. Esto confirma que los procesos del contenedor están suspendidos.
Verificar que el servicio está pausado
En este paso, verificaremos explícitamente que el contenedor del servicio web se encuentra en estado pausado. Aunque ya comprobamos el estado usando docker-compose ps en el paso anterior, es una buena práctica confirmar el estado también usando comandos de Docker directamente.
Primero, asegúrate de estar en el directorio ~/project/my-docker-app.
cd ~/project/my-docker-app
Podemos usar el comando docker ps para listar todos los contenedores en ejecución (incluyendo los pausados). Filtraremos la salida para encontrar nuestro contenedor del servicio web y verificar su estado.
docker ps --filter "name=my-docker-app-web-1"
La salida de este comando debería mostrar el contenedor con la columna STATUS indicando Paused.
Alternativamente, puedes usar el comando docker inspect para obtener información detallada sobre el contenedor, incluyendo su estado. Usaremos grep para buscar específicamente el estado "Paused" en la salida.
docker inspect my-docker-app-web-1 | grep Paused
Este comando debería mostrar una línea similar a "Paused": true,, confirmando que el contenedor efectivamente está pausado.
Como se demostró en el paso anterior, intentar acceder al servicio mediante curl debería fallar o quedarse colgado, lo que indica adicionalmente que el contenedor no está procesando solicitudes activamente.
curl localhost:80
Este comando no debería devolver la página de bienvenida de Nginx.
Reanudar el servicio
En este paso, reanudaremos el contenedor del servicio web que pausamos anteriormente. Al reanudar un contenedor, se reactivan todos los procesos que estaban suspendidos cuando el contenedor fue pausado.
Asegúrate de estar en el directorio ~/project/my-docker-app.
cd ~/project/my-docker-app
Para reanudar el servicio web, utiliza el comando docker-compose unpause seguido del nombre del servicio.
docker-compose unpause web
Deberías ver una salida indicando que el servicio está siendo reanudado:
[+] Unpaused 1/1
⠿ Container my-docker-app-web-1 Unpaused
Ahora, verifiquemos nuevamente el estado del servicio usando docker-compose ps.
docker-compose ps
La salida ahora debería mostrar el contenedor del servicio web con estado running:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
my-docker-app-web-1 nginx:latest "/docker-entrypoint.…" web 8 minutes ago running 0.0.0.0:80->80/tcp, :::80->80/tcp
Como el contenedor ahora está en ejecución, debería poder responder a solicitudes nuevamente. Intentemos acceder al servidor web Nginx usando curl.
curl localhost:80
Ahora deberías ver el HTML de la página de bienvenida predeterminada de Nginx, lo que confirma que el servicio está funcionando y accesible nuevamente.
Finalmente, para limpiar los recursos creados durante este laboratorio, puedes detener y eliminar los contenedores, redes y volúmenes definidos en el archivo docker-compose.yml usando el comando docker-compose down.
docker-compose down
Este comando detendrá los contenedores en ejecución y eliminará los contenedores, redes y volúmenes.
Resumen
En este laboratorio, aprendimos a utilizar el comando docker compose pause para gestionar el estado de servicios definidos en un archivo docker-compose.yml. Comenzamos instalando Docker Compose y creando un archivo docker-compose.yml simple que define un servicio web utilizando la imagen de Nginx.
Tras la configuración, iniciamos el servicio con docker compose up -d, lo pausamos mientras estaba en ejecución usando docker compose pause web, verificamos su estado pausado, y finalmente lo reanudamos con docker compose unpause web. Esta experiencia práctica demostró la aplicación real de los comandos pause y unpause para suspender y reanudar temporalmente servicios de Docker Compose.



