Частный реестр Docker с зеркалом - программирование

Частный реестр Docker с зеркалом

Я создал два контейнера Docker. Первый предоставляет частный реестр Docker, а второй - зеркало официального реестра Docker:

docker run -d --name registry -v /local/path/to/registry:/registry -e SETTINGS_FLAVOR=local -e STORAGE_PATH=/registry -p 5000:5000 registry

docker run -d --name mirror -v /local/path/to/mirror:/registry -e STORAGE_PATH=/registry -e STANDALONE=false -e MIRROR_SOURCE=https:/registry-1.docker.io -e MIRROR_SOURCE_INDEX=https://index.docker.io -p 5555:5000 registry

Теперь я хотел бы объединить оба. Всякий раз, когда пользователь извлекает изображения, он должен сначала запросить частный реестр, а затем зеркало. И когда изображения выталкиваются, их следует только вставлять в частный реестр.

У меня нет представления о том, как это можно сделать. Любая помощь приветствуется.

4b9b3361

Ответ 1

Вы не можете просто заставить все команды push docker нажать в свой частный реестр. Одна из причин заключается в том, что вы можете иметь любое количество этих регистров. Вы должны сначала сказать докеру, куда нажать, пометив изображение (см. Ниже).

Вот как вы можете настроить хосты докеров для работы с запущенным частным реестром и локальным зеркалом.

Настройка клиента

Предположим, что вы используете как зеркальный, так и частный реестр на (разрешимом) хосте, называемом dockerstore. Зеркало на порту 5555, реестр на 5000.

Затем на машине (машинах клиент) вы должны передать дополнительные опции для запуска демона докеров. В вашем случае:

  • Добавьте --registry-mirror=http://dockerstore:5555, чтобы рассказать демонам, чтобы он предпочитал использовать локальное зеркало, а не докер. source
  • Добавить --insecure-registry dockerstore:5000 для доступа к частному реестру без дальнейшей настройки. См. этот ответ
  • Перезапустить демон docker

Использование зеркала

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

docker pull debian

На выходе появится сообщение о том, что изображение вытаскивается из вашего зеркала - докер-магазин: 5000

Использование локального реестра

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

Докер ищет либо "." (разделитель домена) или ":" (разделитель портов), чтобы узнать, что первая часть имени репозитория - это местоположение, а не имя пользователя.

Пример:

Тег 30d39e59ffe2 изображение как dockerstore: 5000/myapp: stable

docker tag 30d39e59ffe2 dockerstore:5000/myapp:stable

Нажмите его в частный реестр

docker push dockerstore:5000/myapp:stable

Затем вы можете потянуть также

docker pull dockerstore:5000/myapp:stable

Ответ 2

Имена репозитория должны быть глобальными, то есть репозиторий redis всегда ссылается на официальное изображение Redis из Docker Hub. Если вы хотите использовать частный реестр, вы префикс имени репозитория с именем реестра, например. localhost.localdomain:5000/myimage:mytag.

Поэтому, когда вы тянете или нажимаете, он автоматически перейдет в соответствующий реестр. Зеркало должно быть легко настроено, вы просто передаете URL-адрес демону с аргументом --registry-mirror=.

Это не идеально подходит для корпоративных пользователей, поэтому эта (закрытая) проблема Docker.

Ответ 3

Чтобы быть ясным, документация докеров подтверждает, что:

В настоящее время невозможно отразить другой частный реестр. Только центральный концентратор может быть зеркальным.