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

1. Запуск локального Docker Registry

Docker предоставляет официальный образ registry для создания локального реестра.

docker run -d -p 5000:5000 --name registry registry:2
  • -d — запускает контейнер в фоновом режиме.
  • -p 5000:5000 — пробрасывает порт 5000 (по умолчанию для registry).
  • —name registry — имя контейнера.
  • registry:2 — официальный образ Docker Registry.

Теперь локальный реестр доступен по адресу localhost:5000.

2. Настройка хранилища

По умолчанию образы хранятся в памяти контейнера. Для персистентного хранения добавьте том (volume):

docker run -d -p 5000:5000 --name registry -v registry-data:/var/lib/registry registry:2

-v registry-data:/var/lib/registry — монтирует том registry-data для хранения образов.

3. Работа с локальным реестром

Тегирование образа:

  1. Чтобы отправить образ в локальный реестр, его нужно пометить тегом с префиксом localhost:5000/.
    docker tag my-image:latest localhost:5000/my-image:latest
  2. Отправка образа в реестр:
    docker push localhost:5000/my-image:latest
  3. Получение образа из реестра:
    docker pull localhost:5000/my-image:latest

4. Настройка Docker для работы с локальным реестром

Если вы используете HTTPS или работаете на удалённой машине, убедитесь, что Docker настроен для работы с небезопасными реестрами (insecure registries). Добавьте в файл /etc/docker/daemon.json:

{

  "insecure-registries": ["localhost:5000"]

}

Перезапустите Docker:

sudo systemctl restart docker

5. Дополнительные настройки (опционально)

Аутентификация: Для защиты реестра настройте HTTP-аутентификацию с помощью htpasswd:

docker run -d -p 5000:5000 --name registry \
  -v $(pwd)/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" registry:2

Создайте файл htpasswd с помощью команды:

htpasswd -Bc auth/htpasswd <username>

TLS: Для продакшн-среды настройте TLS-сертификаты, чтобы обеспечить безопасное соединение.

6. Проверка содержимого реестра

Для просмотра доступных образов используйте API реестра:

curl http://localhost:5000/v2/_catalog

Заключение

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