Как использовать команду docker compose pull для обновления образов сервисов

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь использовать команду docker compose pull для обновления образов сервисов, определенных в файле compose.yaml. Мы начнем с подготовки файла compose.yaml с сервисами, которые используют Docker-образы.

После настройки вы изучите различные способы использования команды docker compose pull, включая вытягивание образа конкретного сервиса, вытягивание всех образов сервисов, вытягивание образов с игнорированием сервисов, которые можно собрать, и тихое вытягивание образов без отображения информации о прогрессе. Этот практический опыт даст вам навыки для эффективного управления и обновления образов сервисов в 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{{"Как использовать команду docker compose pull для обновления образов сервисов"}} docker/rmi -.-> lab-555087{{"Как использовать команду docker compose pull для обновления образов сервисов"}} docker/images -.-> lab-555087{{"Как использовать команду docker compose pull для обновления образов сервисов"}} end

Подготовка файла compose.yaml с сервисами, использующими образы

На этом шаге мы подготовим файл compose.yaml, который определяет сервисы с использованием Docker-образов. Docker Compose — это инструмент, позволяющий определять и управлять многоконтейнерными Docker-приложениями. Хотя Docker уже установлен на виртуальной машине LabEx, Docker Compose отсутствует. Сначала мы установим Docker Compose.

Сначала установим Docker Compose. Загрузим бинарный файл Docker Compose и сделаем его исполняемым.

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

Теперь, когда Docker Compose установлен, проверим его версию для подтверждения установки.

docker-compose --version

Вы должны увидеть вывод, похожий на Docker Compose version v2.20.2.

Далее создадим директорию для нашего проекта и перейдём в неё.

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

Теперь создадим файл compose.yaml в этой директории. Этот файл будет определять два сервиса: веб-сервис с использованием образа nginx и сервис базы данных с использованием образа redis.

nano compose.yaml

Вставьте следующее содержимое в файл compose.yaml:

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

Сохраните файл и выйдите из редактора nano (нажмите Ctrl + X, затем Y, затем Enter).

Этот файл compose.yaml определяет два сервиса:

  • web: использует Docker-образ nginx:latest и пробрасывает порт 80 хоста на порт 80 контейнера.
  • db: использует Docker-образ redis:latest.

В следующих шагах мы будем использовать этот файл compose.yaml для вытягивания определённых образов сервисов.

Загрузка образа конкретного сервиса с помощью docker compose pull

На этом шаге мы научимся загружать образ конкретного сервиса, определённого в файле compose.yaml, используя команду docker compose pull. Это полезно, когда вам нужно обновить или скачать образ только для одного сервиса, не затрагивая остальные.

Сначала убедитесь, что находитесь в директории ~/project/my-compose-app, где был создан файл compose.yaml на предыдущем шаге.

cd ~/project/my-compose-app

Теперь загрузим образ для сервиса web. Команда для этого — docker compose pull <имя_сервиса>. В нашем случае имя сервиса — web.

docker compose pull web

Вы увидите вывод, показывающий, что Docker Compose загружает образ nginx:latest. Этот процесс скачивает слои образа из Docker registry.

После завершения команды вы можете проверить, что образ nginx был загружен, выведя список доступных Docker-образов.

docker images

В выводе вы должны увидеть nginx вместе с его тегом (latest), ID образа, датой создания и размером.

Это демонстрирует, как выборочно загрузить образ для конкретного сервиса, определённого в вашем файле compose.yaml. На следующем шаге мы загрузим образы для всех сервисов.

Загрузка всех образов сервисов, определённых в файле compose.yaml

На этом шаге мы научимся загружать образы для всех сервисов, определённых в файле compose.yaml, используя команду docker compose pull без указания конкретных имён сервисов. Это стандартное поведение команды docker compose pull, когда не указаны имена сервисов.

Сначала убедитесь, что находитесь в директории ~/project/my-compose-app.

cd ~/project/my-compose-app

Теперь выполните команду docker compose pull без аргументов.

docker compose pull

Эта команда прочитает файл compose.yaml и загрузит образы для всех определённых в нём сервисов. Поскольку мы уже загрузили образ nginx на предыдущем шаге, Docker Compose проверит его актуальность. Затем он загрузит образ redis:latest, который ещё не был скачан.

Вы увидите вывод, отображающий процесс загрузки образа redis.

После завершения команды вы можете проверить наличие обоих образов (nginx и redis), выведя список доступных Docker-образов.

docker images

Теперь в выводе должны отображаться оба образа: nginx и redis.

Это демонстрирует, как легко загрузить все необходимые образы для вашего многоконтейнерного приложения одной командой.

Загрузка образов сервисов с игнорированием сборки (buildable services)

В этом шаге мы рассмотрим использование флага --ignore-buildable с командой docker compose pull. Этот флаг полезен, когда ваш файл compose.yaml содержит как сервисы, использующие готовые образы, так и сервисы, которые собираются из Dockerfile (buildable services). Флаг --ignore-buildable указывает Docker Compose загружать образы только для сервисов с указанным ключом image, пропуская сервисы с ключом build.

Сначала модифицируем наш файл compose.yaml, добавив сервис для сборки. Создадим простой сервис, который собирает базовый образ.

Убедитесь, что находитесь в директории ~/project/my-compose-app.

cd ~/project/my-compose-app

Создадим простой Dockerfile для нашего сервиса:

nano Dockerfile

Вставьте следующее содержимое в Dockerfile:

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

Сохраните файл и выйдите из редактора nano.

Теперь изменим файл compose.yaml, добавив новый сервис, использующий этот Dockerfile.

nano compose.yaml

Добавьте следующее определение сервиса в ваш файл compose.yaml после сервиса db:

builder:
  build: .

Полный файл compose.yaml теперь должен выглядеть так:

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

Сохраните файл и выйдите из редактора nano.

Теперь выполним загрузку образов с флагом --ignore-buildable:

docker compose pull --ignore-buildable

Вы увидите, что Docker Compose проверяет сервисы web и db и загружает их образы при необходимости (они уже должны быть загружены на предыдущих шагах). Однако сервис builder будет проигнорирован, так как использует ключ build вместо image. В выводе не будет информации о сборке или загрузке образа для сервиса builder.

Чтобы убедиться, что для сервиса builder не был создан или загружен образ, выведите список Docker-образов:

docker images

Вы должны увидеть только образы nginx и redis. Новый образ из Dockerfile не будет создан этой командой.

Это демонстрирует, как флаг --ignore-buildable позволяет выборочно загружать только готовые образы, что может быть полезно в различных сценариях разработки и развертывания.

Загрузка образов сервисов без отображения информации о прогрессе

На этом шаге мы научимся загружать образы сервисов без отображения подробной информации о прогрессе, используя флаг --quiet или -q с командой docker compose pull. Это полезно, когда требуется сократить объем вывода в терминале, например, в скриптах или автоматизированных процессах.

Сначала убедитесь, что находитесь в директории ~/project/my-compose-app.

cd ~/project/my-compose-app

Теперь выполним команду docker compose pull --quiet для загрузки образов. Поскольку образы для web и db уже должны быть загружены на предыдущих шагах, Docker Compose проверит их актуальность. Если они актуальны, команда завершится быстро с минимальным выводом. Если бы образ требовалось загрузить, вы не увидите стандартных индикаторов прогресса и информации о слоях.

docker compose pull --quiet

Вы заметите, что вывод стал значительно менее подробным по сравнению с выполнением docker compose pull без флага --quiet. Могут появиться сообщения о том, что образы уже актуальны, но не будет детальной информации о прогрессе загрузки каждого слоя.

Для более наглядной демонстрации сначала удалим один из образов, а затем загрузим его с флагом --quiet. Удалим образ redis.

docker rmi redis:latest

Теперь снова загрузим образы с флагом --quiet.

docker compose pull --quiet

На этот раз образ redis будет загружен, но без отображения детального прогресса. Вывод будет минимальным, подтверждая выполнение операции без стандартной визуализации.

Вы можете проверить, что образ redis был загружен, выведя список Docker-образов.

docker images

В списке должны отображаться оба образа: nginx и redis.

Флаг --quiet — это простой, но эффективный способ контроля уровня детализации вывода команды docker compose pull, что делает его подходящим для сред, где подробный вывод не требуется.

Итоги

В этой лабораторной работе мы изучили использование команды docker compose pull для обновления образов сервисов. Мы начали с подготовки файла compose.yaml, определяющего сервисы с конкретными Docker-образами, включая установку самого Docker Compose.

Затем мы рассмотрели:

  • Загрузку образов для отдельных сервисов
  • Загрузку всех сервисов, определённых в файле
  • Использование опций для игнорирования сборки сервисов (buildable services)
  • Подавление вывода прогресса для более "тихого" процесса загрузки