Разница между реестром Docker и репозиторием


150

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

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

Теперь вы можете отправить этот репозиторий в реестр, обозначенный его именем или тегом.

Как вы можете поместить репозиторий в реестр? Разве вы не запихиваете образ в репозиторий?


4
как насчет изображений докеров и репозиториев докеров?
Чарли Паркер

для изображений и репозиториев: stackoverflow.com/questions/31115098/…
wisbucky 07

1
если знаете git, то - Docker Registry (по умолчанию hub.docker.com) => GitHub ( github.com); - Репозиторий Docker => Репозиторий Git; - Docker Tag => Git Ref (Branch / Tag)
go2null

Чтобы лучше сопоставить Docker с Git: • Docker Registry = Git Server • Docker Repository = Git Repository • Docker Tag = Git Tag (более или менее)
Саймон Вудсайд,

Ответы:


174

Реестр Docker - это служба, которая хранит ваши образы докеров.

Реестр Docker может быть размещен третьей стороной в виде публичного или частного реестра, например одного из следующих реестров:

или вы можете самостоятельно разместить реестр докеров
(подробнее см. https://docs.docker.com/ee/dtr/ ).

Репозиторий Docker - это набор разных образов докеров с одинаковыми именами и разными тегами. Тег - это буквенно-цифровой идентификатор изображения в репозитории.

Например, см. Https://hub.docker.com/r/library/python/tags/ . Для официального образа python существует множество различных тегов, все эти теги являются членами официального репозитория python в Docker Hub. Docker Hub - это реестр Docker, размещенный на Docker.

Чтобы узнать больше, прочтите:


11
Artifactory - это то, что нужно добавить в список;) Мы используем это
buildmaestro

2
И это ссылка для Artifactory - jfrog.com/confluence/display/RTF/Docker+Registry
JBaruch

1
в чем разница между репозиторием и изображениями в докере?
Чарли Паркер

1
Репозиторий может хранить несколько разных изображений, отмеченных тегами.
Неманья Трифунович

2
Почему имеет смысл иметь одно изображение с несколькими тегами?
Чарли Паркер

65

Из книги Использование Docker, Разработка и развертывание программного обеспечения с контейнерами

Реестры, репозитории, изображения и теги

Существует иерархическая система хранения изображений. Используется следующая терминология:

Реестр

Служба, отвечающая за размещение и распространение изображений. Реестр по умолчанию - Docker Hub.

Репозиторий

Коллекция связанных изображений (обычно представляющих разные версии одного и того же приложения или службы).

Тег

Буквенно-цифровой идентификатор, прикрепленный к изображениям в репозитории (например, 14.04 или стабильный).

Таким образом, команда docker pull amouat/revealjs:latestзагрузит образ, помеченный последним в amouat/revealjsрепозитории, из реестра Docker Hub.


1
так можно ли иметь несколько тегов для одного изображения?
Чарли Паркер

1
@charlie Да. Например, прямо сейчас ubuntu:latestи ubuntu:16.04есть одинаковые Image ID, а это значит, что это всего лишь несколько тегов для одного и того же изображения.
wisbucky 07

Там, где это разбивается, находится в документации для docker pull, которая частично гласит: «Чтобы загрузить конкретный образ или набор образов (например, репозиторий), используйте docker pull. Если тег не предоставлен, Docker Engine использует :latestтег по умолчанию. " Как же тогда можно «загрузить… набор изображений (т.е. репозиторий)»? 🤔
Лэрд Нельсон

1
случайная информация: URL-адрес реестра по умолчанию - docker.io
yosefrow

1
Я визуализирую это как дерево, в котором реестр является корнем, в котором есть несколько дочерних репозиториев, и каждый из этих репозиториев имеет теги images: в качестве своих дочерних элементов. Каждый из этих уровней имеет определенную роль: реестр похож на место размещения, а репозиторий - это каталог изображений. Я правильно понимаю?
Ultrablendz

12

Дополняя информацию:

  • Обычно вы помещаете репозиторий в реестр (и все изображения, которые в него входят). Но вы можете отправить один образ в реестр. Во всех случаях вы используете docker push.
  • Изображение имеет 12-значный идентификатор изображения, но также идентифицируется по: namespace/repo-name:tag
  • Полное имя образа может быть при желании предварено именем хоста реестра и портом: myregistryhost:5000/namespace/repo-name:tag
  • Обычное соглашение об именах - использовать ваше имя пользователя в реестре как то, что я назвал «пространством имен».

3
Я понимаю, о чем вы говорите, но технически такого понятия не существует image-name. Формат должен быть user-name/repo-name:tagсогласно документации Docker . (Хотелось бы, чтобы Docker использовал лучшую терминологию, это довольно сбивает с толку, и они даже не всегда последовательны).
wisbucky 07

@wisbucky Спасибо! Я обновил свой ответ. Действительно, когда я отвечал на этот вопрос год назад, документация была не очень хорошей. Например, тогда я создал проблему в репозитории github для докеров, потому что глоссарий докеров не содержал «слой» и «пространство имен» (!)
Пауло Мерсон

1
И как докер вычисляет IP-адрес публичного реестра, если вы просто помещаете что-то вроде nimmis / docker-alpine-java: latest
Адам

1
Оооо -docker info |grep Registry
Адам

2

Репозиторий докеров - это симпатичная комбинация registryи image.

docker tag foo <registry>/<image>:<tag>

такой же как

docker tag foo <repository>:<tag>

1

Реестр Docker - это служба, которую вы можете разместить самостоятельно (доверенной и частной) или позволить концентратору докеров быть хостом для этой службы. Обычно, если ваше программное обеспечение является коммерческим, вы размещаете его как «Частный и надежный» реестр. Для разработчиков Java это несколько аналогично настройке Maven Artifactory.

Docker Repository - это набор изображений с тегами. Например, вы могли пометить 5 ubuntu:latestизображений:

а) Редактор нано (image1_tag: v1)

б) Специальное программное обеспечение 1 (image1_tag: v2)

в) Судо (image1_tag: v3)

г) демон apache http (image1_tag: v4)

д) кот (image1_tag: v5)

Вы можете использовать docker pushкоманду, чтобы отправить каждое из вышеуказанных изображений в ваш репозиторий. Пока имена репозиториев совпадают, они будут успешно отправлены, появятся в выбранном вами репозитории и правильно помечены.

Теперь ваш вопрос: «Итак, где находится этот репозиторий / кто управляет службой»? Вот тут-то и появляется Docker Registry. По умолчанию вы получите реестр концентратора докеров (с открытым исходным кодом), который вы можете использовать для хранения своего частного / общедоступного репозитория. Таким образом, без каких-либо изменений ваши изображения будут отправлены в ваш частный репозиторий в Docker Hub. Пример вывода при нажатии тегов изображения следующий:

docker@my-docker-vm:/$ docker push mydockerhub/my-helloworld-repo:my_tag
The push refers to repository [docker.io/mydockerhub/my-helloworld-repo]
bf41e934d39d: Pushed
70d93396f87f: Pushed
6ec525dfd060: Pushed
705419d10b13: Pushed
a4aaef726d02: Pushed
04964fddc946: Pushed
latest: digest: sha256:eb93c92351bce785aa3ec0de489cfeeaafd55b7d90adf95ecea02629b376e577 size: 1571
docker@my-docker-vm:/$

И если вы введете сразу, docker images --digests -aвы можете подтвердить, что ваши отправленные теги изображений теперь показывают новую подпись против частного репозитория, управляемого реестром концентратора докеров.


«команда docker push для отправки каждого из вышеперечисленных изображений в ваш репозиторий» - вы не отправляете изображения в репозитории, а репозитории в реестры. Или я не прав?
The Impaler

0

Docker Hub и другие сторонние службы хостинга репозиториев называются «реестрами». В реестре хранится набор репозиториев.

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


0

Реестр образов Docker - это место для хранения всех ваших образов Docker. Реестр образов позволяет при необходимости отправлять и извлекать образы контейнеров.

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

Реестр позволяет демону Docker легко извлекать и запускать ваши образы Docker.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.