Skip to content

Основы Docker: Реестр образов (Registry)

Docker Registry — это сервис для хранения и распространения Docker-образов. Он работает по аналогии с репозиториями пакетов (например, npm для Node.js или PyPI для Python), но предназначен для Docker-образов.

Основные понятия Docker Registry

  • Репозиторий (Repository): Набор связанных Docker-образов с разными тегами (версиями). Репозиторий обычно представляет собой одно приложение или сервис. Например, nginx — это репозиторий, который может содержать различные версии образа Nginx (например, nginx:latest, nginx:1.20, nginx:alpine).
  • Тег (Tag): Метка, используемая для версионирования образов внутри репозитория. Теги позволяют различать различные версии одного и того же приложения. По умолчанию используется тег latest, если не указан другой.
  • Реестр (Registry): Серверное приложение, хранящее репозитории Docker-образов. Реестры могут быть публичными или частными.

Docker Hub

Docker Hub (https://hub.docker.com/) — это публичный реестр образов Docker, предоставляемый Docker Inc. Он содержит огромное количество образов от сообщества, официальных образов от Docker и образов от различных поставщиков программного обеспечения. Docker Hub является реестром по умолчанию, который Docker использует для поиска и загрузки образов, если не указан другой реестр.

Вы можете использовать Docker Hub для:

  • Поиска готовых образов: Найти образы популярных программных продуктов, таких как операционные системы, базы данных, веб-серверы и языки программирования.
  • Загрузки образов (docker pull): Получить образы на свой локальный Docker-хост.
  • Хранения собственных образов: Зарегистрировавшись, вы можете создавать собственные репозитории и выгружать (docker push) свои образы (как публичные, так и приватные, в зависимости от тарифного плана).
  • Совместной работы: Предоставлять доступ к своим приватным репозиториям другим пользователям или командам.

Частные реестры Docker (Private Registries)

Помимо Docker Hub, вы можете развернуть собственные частные реестры Docker. Частные реестры полезны в следующих случаях:

  • Безопасность: Хранение образов внутри вашей корпоративной сети, что обеспечивает больший контроль над доступом и безопасностью.
  • Производительность: Более быстрая загрузка образов внутри локальной сети.
  • Соответствие требованиям: Соблюдение специфических требований к хранению данных.

Существует несколько способов развернуть частный реестр Docker:

  • Официальный образ Registry: Docker предоставляет официальный образ registry, который можно запустить как контейнер.
  • Облачные решения: Многие облачные провайдеры (например, AWS ECR, Google Container Registry, Azure Container Registry) предлагают управляемые сервисы частных реестров Docker.
  • Сторонние решения: Существуют и другие коммерческие и open-source решения для создания частных реестров.

Взаимодействие с Docker Registry

Docker CLI предоставляет команды для взаимодействия с реестрами образов.

Вход в Docker Registry (docker login)

Для выгрузки приватных образов или доступа к приватным репозиториям на Docker Hub или другом частном реестре необходимо выполнить вход с помощью команды docker login:

bash
docker login [REGISTRY_HOST]

Если REGISTRY_HOST не указан, по умолчанию используется Docker Hub. Вам будет предложено ввести имя пользователя и пароль. После успешного входа учетные данные сохраняются в файле конфигурации (~/.docker/config.json).

Для выхода из реестра используется команда docker logout:

bash
docker logout [REGISTRY_HOST]

Загрузка образов (docker pull)

Команда docker pull используется для загрузки образов из реестра на ваш локальный Docker-хост. Если имя реестра не указано, Docker по умолчанию обращается к Docker Hub.

bash
docker pull ubuntu:latest        # Загрузка из Docker Hub
docker pull [my-private-registry.com/my-namespace/my-image:1.0](https://my-private-registry.com/my-namespace/my-image:1.0) # Загрузка из частного реестра

Выгрузка образов (docker push)

Команда docker push используется для выгрузки образов из вашего локального Docker-хоста в реестр. Перед выгрузкой приватных образов вам необходимо выполнить вход в соответствующий реестр.

bash
docker tag my-local-image:latest my-username/my-repo:latest # Тегирование локального образа для Docker Hub
docker push my-username/my-repo:latest                     # Выгрузка на Docker Hub

docker tag my-local-image:1.0 [my-private-registry.com/my-namespace/my-image:1.0](https://my-private-registry.com/my-namespace/my-image:1.0) # Тегирование для частного реестра
docker push [my-private-registry.com/my-namespace/my-image:1.0](https://my-private-registry.com/my-namespace/my-image:1.0)                     # Выгрузка в частный реестр

Обратите внимание, что перед выгрузкой образ должен быть правильно именован с учетом имени пользователя или организации (для Docker Hub) или имени хоста и пространства имен (для частных реестров).

Команда docker search используется для поиска образов в Docker Hub. Поиск в частных реестрах может поддерживаться или не поддерживаться в зависимости от реализации реестра.

bash
docker search nginx

Информация об образе (docker inspect)

Команда docker inspect предоставляет подробную информацию о Docker-объектах, включая образы из реестра (если они загружены локально).

bash
docker inspect nginx:latest

Docker Compose и реестры

При использовании Docker Compose вы можете указывать образы из любого доступного реестра (как публичного, так и частного) в файле docker-compose.yml. Docker Compose автоматически попытается загрузить указанные образы при выполнении команды docker-compose up. Если вам необходимо использовать образы из приватного реестра, Docker должен быть настроен для доступа к этому реестру (например, через docker login).

yaml
version: "3.9"
services:
  web:
    image: [my-private-registry.com/my-namespace/my-web-app:latest](https://my-private-registry.com/my-namespace/my-web-app:latest)
    ports:
      - "80:80"
    # ...

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: secret
    # ...

Безопасность Docker Registry

Безопасность Docker Registry является важным аспектом, особенно при использовании частных реестров. Рекомендуется:

  • Использовать HTTPS: Обеспечьте шифрование трафика между Docker-клиентами и реестром.
  • Настроить аутентификацию и авторизацию: Контролируйте доступ к образам.
  • Сканировать образы на уязвимости: Регулярно проверяйте образы в реестре на наличие известных уязвимостей.
  • Контролировать доступ к хост-машине, на которой запущен реестр: Защитите сервер реестра от несанкционированного доступа.

Docker Registry играет ключевую роль в жизненном цикле Docker-образов, обеспечивая централизованное хранилище и механизм распространения для ваших контейнеризированных приложений. Понимание того, как работать с реестрами, позволяет эффективно управлять образами и развертывать приложения в различных средах.