Обзор

Локальный прокси зеркал реестров для dockerd, работающий только на чтение.

Локальный прокси зеркал реестров для dockerd, работающий только на чтение. Он находится между dockerd и одним или несколькими выбранными пользователем зеркалами Registry v2 и дополняет встроенную поддержку зеркал в dockerd:

  • Управление во время работы. Добавляйте, удаляйте и отключайте источники без перезапуска dockerd.
  • Изоляция сбоев. После заданного числа последовательных сбоев механизм circuit breaker временно исключает неотвечающее или неисправное зеркало из обработки запросов до успешной проверки.
  • Настраиваемая гонка запросов. Дублирующие запросы с задержкой (hedged requests) позволяют использовать первый пригодный ответ. Гонка включена по умолчанию; её можно отключить.
  • Возобновление загрузки слоёв. При обрыве передачи загрузка слоя продолжается с того же байтового смещения на другом зеркале; демон по-прежнему проверяет дайджест.
  • Резервный путь к официальному реестру. Если прокси не может обслужить запрос, dockerd может обратиться к официальному реестру через настроенный резервный путь. Реестр должен оставаться доступным и разрешать загрузку.

Поддерживаются оба хранилища образов dockerd: containerd (hosts.toml) и классическое хранилище graphdriver (daemon.json, только docker.io).

Пример

В этом примере oci-mirror-proxy завершил загрузку за 508,0 с, а загрузка напрямую с зеркала заняла 740,3 с: в 1,46 раза быстрее, или на 31,4% меньше времени.

Напрямую с зеркала · 740,3 сЧерез oci-mirror-proxy · 508,0 с
Загрузка напрямую с зеркалаЗагрузка через прокси
Запись asciinemaЗапись asciinema

GIF показывают ускоренную запись; исходные записи сохраняют реальное время. См. подробности записи.

Состояние проекта

Поддерживаются: API реестра для загрузки образов, переключение при сбоях, автоматическое отключение неисправных источников, дублирующие запросы с задержкой, возобновление загрузки blob, аутентификация по токену и HTTP Basic, сокет управления, перечитывание конфигурации и настройка dockerd с отменой изменений.

Не поддерживаются: отправка образов (push), локальный кеш blob, хранилища секретов в системной связке ключей и экспорт метрик.

Требования

  • Go 1.26.8 или новее для сборки (либо автоматическая загрузка инструментария Go).
  • Локальный Docker Engine в Linux или Docker Desktop в macOS/Windows (контейнеры Linux). См. автоматическую интеграцию с Docker. Для rootless dockerd адрес прослушивания должен быть доступен из его сетевого пространства имён; эту настройку выполняет администратор. См. rootless dockerd.

Замечания по безопасности

  • API реестра не использует аутентификацию, поэтому по умолчанию слушает 127.0.0.1. Если listen указывает не на loopback, загрузка образов без аутентификации становится доступна по сети.
  • Значения паролей не записываются в конфигурацию напрямую: пароль задаётся ссылкой вида env:NAME или file:/path. Секреты скрываются в журналах и выводе %v.
  • Заголовок клиента Authorization никогда не пересылается источникам.
  • Сокет управления защищён правами файловой системы: для частных экземпляров каталог имеет права 0700, а сокет — 0600. Системные службы root со стандартным адресом /run/oci-mirror-proxy/admin.sock или /var/run/oci-mirror-proxy/admin.sock предоставляют всем локальным пользователям доступ к API управления (каталог 0711, сокет 0666), включая изменение и перечитывание конфигурации. Заменить каталог или сокет может только root; API управления не публикуется по TCP.
  • Конфигурация зеркал объединяется на основе фактических файлов, без зависимости от состояния установки. Перед атомарной заменой изменяемые файлы резервируются; revert удаляет только записи выбранного прокси.

На этой странице