Cómo usar el comando docker compose pause para pausar servicios

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555084{{"Cómo usar el comando docker compose pause para pausar servicios"}} docker/ps -.-> lab-555084{{"Cómo usar el comando docker compose pause para pausar servicios"}} docker/inspect -.-> lab-555084{{"Cómo usar el comando docker compose pause para pausar servicios"}} docker/pull -.-> lab-555084{{"Cómo usar el comando docker compose pause para pausar servicios"}} end

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:latest especifica 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.