Cómo usar el comando docker compose pull para actualizar imágenes de 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 pull para actualizar las imágenes de servicios definidas en un archivo compose.yaml. Comenzaremos preparando un archivo compose.yaml con servicios que utilizan imágenes de Docker.

Después de la configuración, explorarás diversas formas de usar el comando docker compose pull, incluyendo la descarga de la imagen de un servicio específico, la descarga de todas las imágenes de servicios, la descarga de imágenes ignorando servicios construibles (buildable services), y la descarga silenciosa de imágenes sin mostrar información de progreso. Esta experiencia práctica te proporcionará las habilidades necesarias para gestionar y actualizar eficientemente tus imágenes de servicios en Docker Compose.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/rmi("Remove Image") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/pull -.-> lab-555087{{"Cómo usar el comando docker compose pull para actualizar imágenes de servicios"}} docker/rmi -.-> lab-555087{{"Cómo usar el comando docker compose pull para actualizar imágenes de servicios"}} docker/images -.-> lab-555087{{"Cómo usar el comando docker compose pull para actualizar imágenes de servicios"}} end

Preparar un archivo compose.yaml con servicios que utilizan imágenes

En este paso, prepararemos un archivo compose.yaml que define servicios utilizando imágenes de Docker. Docker Compose es una herramienta que te permite definir y gestionar aplicaciones multi-contenedor en Docker. Aunque Docker ya está instalado en la máquina virtual de LabEx, Docker Compose no lo está. Primero instalaremos Docker Compose.

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

Ahora que Docker Compose está instalado, verifiquemos la instalación comprobando la versión.

docker-compose --version

Deberías ver una salida similar a Docker Compose version v2.20.2.

A continuación, crearemos un directorio para nuestro proyecto y navegaremos hasta él.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

Ahora, crearemos un archivo compose.yaml en este directorio. Este archivo definirá dos servicios: un servicio web que utiliza la imagen nginx y un servicio de base de datos que utiliza la imagen redis.

nano compose.yaml

Pega el siguiente contenido en el archivo compose.yaml:

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: redis:latest

Guarda el archivo y sal del editor nano (Presiona Ctrl + X, luego Y, luego Enter).

Este archivo compose.yaml define dos servicios:

  • web: Utiliza la imagen de Docker nginx:latest y mapea el puerto 80 del host al puerto 80 del contenedor.
  • db: Utiliza la imagen de Docker redis:latest.

En los siguientes pasos, usaremos este archivo compose.yaml para descargar las imágenes de los servicios definidos.

Descargar la imagen de un servicio específico usando docker compose pull

En este paso, aprenderemos cómo descargar la imagen de un servicio específico definido en nuestro archivo compose.yaml usando el comando docker compose pull. Esto es útil cuando solo necesitas actualizar o descargar la imagen para un único servicio sin afectar a los demás.

Primero, asegúrate de estar en el directorio ~/project/my-compose-app donde creaste el archivo compose.yaml en el paso anterior.

cd ~/project/my-compose-app

Ahora, descarguemos la imagen para el servicio web. El comando para hacer esto es docker compose pull <nombre_del_servicio>. En nuestro caso, el nombre del servicio es web.

docker compose pull web

Verás una salida que indica que Docker Compose está descargando la imagen nginx:latest. Este proceso descarga las capas de la imagen desde el registro de Docker.

Una vez completado el comando, puedes verificar que la imagen nginx ha sido descargada listando las imágenes de Docker disponibles.

docker images

Deberías ver nginx listado en la salida, junto con su etiqueta (latest), ID de imagen, fecha de creación y tamaño.

Esto demuestra cómo descargar selectivamente una imagen para un servicio específico definido en tu archivo compose.yaml. En el siguiente paso, descargaremos las imágenes para todos los servicios.

Descargar todas las imágenes de servicios definidas en el archivo compose.yaml

En este paso, aprenderemos cómo descargar las imágenes para todos los servicios definidos en nuestro archivo compose.yaml usando el comando docker compose pull sin especificar nombres de servicios. Este es el comportamiento predeterminado de docker compose pull cuando no se proporcionan nombres de servicios.

Primero, asegúrate de estar en el directorio ~/project/my-compose-app.

cd ~/project/my-compose-app

Ahora, ejecuta el comando docker compose pull sin argumentos.

docker compose pull

Este comando leerá el archivo compose.yaml y descargará las imágenes para todos los servicios definidos en él. Como ya descargamos la imagen nginx en el paso anterior, Docker Compose verificará si la imagen está actualizada. Luego procederá a descargar la imagen redis:latest, que aún no había sido descargada.

Verás una salida que indica el proceso de descarga para la imagen redis.

Una vez completado el comando, puedes verificar que tanto nginx como redis han sido descargadas listando las imágenes de Docker disponibles.

docker images

Ahora deberías ver tanto nginx como redis listadas en la salida.

Esto demuestra cómo descargar fácilmente todas las imágenes necesarias para tu aplicación multi-contenedor con un solo comando.

Descargar imágenes de servicios ignorando los servicios construibles

En este paso, exploraremos cómo usar la bandera --ignore-buildable con docker compose pull. Esta opción es útil cuando tu archivo compose.yaml incluye servicios que se construyen desde un Dockerfile (servicios construibles) además de servicios que usan imágenes preconstruidas. La bandera --ignore-buildable indica a Docker Compose que solo descargue imágenes para servicios que especifiquen una clave image, omitiendo aquellos con clave build.

Primero, modifiquemos nuestro archivo compose.yaml para incluir un servicio construible. Añadiremos un servicio básico que construye una imagen simple.

Asegúrate de estar en el directorio ~/project/my-compose-app.

cd ~/project/my-compose-app

Ahora, crea un Dockerfile simple para nuestro servicio construible.

nano Dockerfile

Pega el siguiente contenido en el Dockerfile:

FROM alpine:latest
CMD ["echo", "Hello from buildable service!"]

Guarda el archivo y sal del editor nano.

Luego, modifica el archivo compose.yaml para incluir un nuevo servicio que use este Dockerfile.

nano compose.yaml

Añade la siguiente definición de servicio a tu archivo compose.yaml, debajo del servicio db:

builder:
  build: .

Tu archivo compose.yaml completo debería verse así:

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: redis:latest
  builder:
    build: .

Guarda el archivo y sal del editor nano.

Ahora, intentemos descargar imágenes usando docker compose pull --ignore-buildable.

docker compose pull --ignore-buildable

Observarás que Docker Compose verifica los servicios web y db y descarga sus imágenes si es necesario (ya deberían estar descargadas de pasos anteriores). Sin embargo, ignorará el servicio builder porque usa la clave build en lugar de image. No verás ninguna salida relacionada con la construcción o descarga de una imagen para el servicio builder.

Para confirmar que no se construyó ni descargó ninguna imagen para el servicio builder, puedes listar tus imágenes de Docker.

docker images

Solo deberías ver las imágenes nginx y redis listadas. No habrá una nueva imagen creada desde el Dockerfile por este comando.

Esto demuestra cómo la bandera --ignore-buildable te permite descargar selectivamente solo imágenes preconstruidas, lo que puede ser útil en varios escenarios de desarrollo e implementación.

Descargar imágenes de servicios silenciosamente sin información de progreso

En este paso, aprenderemos cómo descargar imágenes de servicios sin mostrar la información detallada de progreso usando la bandera --quiet o -q con docker compose pull. Esto es útil cuando deseas reducir la cantidad de salida en tu terminal, por ejemplo, en scripts o flujos de trabajo automatizados.

Primero, asegúrate de estar en el directorio ~/project/my-compose-app.

cd ~/project/my-compose-app

Ahora, usemos el comando docker compose pull --quiet para descargar las imágenes. Como las imágenes para web y db probablemente ya están presentes de pasos anteriores, Docker Compose verificará si están actualizadas. Si lo están, el comando se completará rápidamente con una salida mínima. Si una imagen necesitara ser descargada, no verías las barras de progreso habituales ni la información de capas.

docker compose pull --quiet

Notarás que la salida es significativamente menos detallada en comparación con ejecutar docker compose pull sin la bandera --quiet. Podrías ver mensajes indicando que las imágenes ya están actualizadas, pero no verás el progreso detallado de descarga para cada capa.

Para demostrar el efecto más claramente, primero eliminemos una de las imágenes y luego descarguémosla silenciosamente. Eliminaremos la imagen redis.

docker rmi redis:latest

Ahora, descarga las imágenes nuevamente usando la bandera --quiet.

docker compose pull --quiet

Esta vez, la imagen redis será descargada, pero no verás el progreso detallado. La salida será mínima, confirmando que la operación de descarga está ocurriendo sin la retroalimentación visual habitual.

Puedes verificar que la imagen redis ha sido descargada nuevamente listando las imágenes de Docker.

docker images

Deberías ver tanto nginx como redis listadas.

La bandera --quiet es una forma simple pero efectiva de controlar la verbosidad del comando docker compose pull, haciéndolo adecuado para entornos donde no se desea una salida detallada.

Resumen

En este laboratorio, aprendimos cómo utilizar el comando docker compose pull para actualizar imágenes de servicios. Comenzamos preparando un archivo compose.yaml que define servicios con imágenes Docker específicas, incluyendo la instalación del propio Docker Compose.

Posteriormente, exploramos cómo descargar imágenes para servicios individuales, descargar todos los servicios definidos en el archivo, y utilizar opciones para ignorar servicios construibles y suprimir la salida de progreso para un proceso de descarga más silencioso.