Подтвердить что ты не робот

В Docker, в чем разница между изображением и репозиторием?

Я новичок в Docker и следую Учебник по началу работы. На шаге 7 говорится:

введите docker images и нажмите RETURN. Команда отображает все изображения в вашей локальной системе. Вы должны увидеть docker/whalesay в списке.

$ docker images
REPOSITORY           TAG         IMAGE ID            CREATED            VIRTUAL SIZE
docker/whalesay      latest      fb434121fc77        3 hours ago        247 MB
hello-world          latest      91c95931e552        5 weeks ago        910 B

но в первом столбце четко сказано "репозиторий", а не, например, "имя изображения". Я также заметил на компьютерах других людей, что, поскольку изображение может иметь несколько тегов, это перечисление часто содержит повторяющиеся записи - по одному для каждого тега. Итак, это список изображений, список репозиториев, список комбинаций тегов изображений или что-то еще? В чем разница между изображением и репозиторием?

Кроме того, учитывая, что изображения и репозитории - это разные вещи, как я могу просто перечислить свои репозитории?

Это не связано с контейнерами.

4b9b3361

Ответ 1

Цитата из официальной документации Docker:

Репозиторий потенциально содержит несколько вариантов изображения.

(см.: https://docs.docker.com/userguide/dockerimages)

Это означает: Изображение Docker может принадлежать репозиторию, например. когда он был перенесен в реестр Docker (с docker push my/reporitory:version1). С другой стороны, репозиторий содержит несколько версий изображения (= разные теги). Поэтому, когда вы создаете новую версию своего изображения, вы можете дать ей тег (docker tag 518a41981a6a my/reporitory:version2) и вставить его в свой репозиторий в качестве следующей версии (docker push my/reporitory:version2).

Вот пример из документации Docker (см. ссылку выше). Как вы можете видеть, в нем показан один репозиторий под названием ouruser/sinatra, который содержит различные версии (latest, devel, v2) одного и того же изображения:

$ docker images ouruser/sinatra
REPOSITORY          TAG     IMAGE ID      CREATED        VIRTUAL SIZE
ouruser/sinatra     latest  5db5f8471261  11 hours ago   446.7 MB
ouruser/sinatra     devel   5db5f8471261  11 hours ago   446.7 MB
ouruser/sinatra     v2      5db5f8471261  11 hours ago   446.7 MB

В вашем примере у вас есть два репозитория (docker/whalesay и hello-world), который содержит только одно помеченное изображение (называемое latest, что означает, что на самом деле нет тега и отображаются последние изображения).

Ответ 2

Да, это очень запутанная терминология.

Самый простой ответ:

Изображение: одно изображение.

Репозиторий: коллекция изображений.

Детали:

Изображение: однозначно ссылается на Image ID, шестнадцатеричный код из 12 цифр (например, 91c95931e552). [1]

Репозиторий: содержит одно или несколько изображений. Таким образом, репозиторий hello-world может содержать два разных изображения: 91c95931e552 и 1234abcd5678.

Image alias - Я собираюсь определить Image alias как псевдоним, который ссылается на конкретное изображение. Формат Image alias равен repository:tag. Таким образом, вы можете использовать дружественный для человека псевдоним, такой как hello-world:latest вместо 12-значного кода.

Пример:

Скажем, у меня есть эти изображения:

REPOSITORY           TAG         IMAGE ID
docker/whalesay      latest      fb434121fc77
hello-world          latest      91c95931e552
hello-world          v1.1        91c95931e552
hello-world          v1.0        1234abcd5678

Репозитории: docker/whalesay, hello-world.

Изображения fb434121fc77, 91c95931e552, 1234abcd5678. Обратите внимание, что 2-я и 3-я строки имеют одинаковый Image ID, поэтому они являются одним и тем же изображением.

Алиасы изображений:

docker/whalesay:latest
hello-world:latest
hello-world:v1.1
hello-world:v1.0

Итак, hello-world:latest и hello-world:v1.1 - это просто две псевдонимы для одного и того же изображения.

Дополнительная информация:

  • Формат
  • Repository name также может содержать необязательный пользователь или пространство имен, что полезно при использовании публичного реестра, такого как Docker Hub. Например. docker/whalesay. В противном случае у вас будет много конфликтов имен репозитория.

  • Если вы не укажете tag при обращении к псевдониму изображения, он автоматически добавит :latest. Поэтому, когда вы укажете hello-world, он будет интерпретироваться как hello-world:latest. Предупреждение: latest на самом деле не означает ничего особенного, это просто тег по умолчанию.

  • [1] Фактически, полный идентификатор изображения представляет собой 64-разрядный шестнадцатеричный код, усеченный до 12 цифр, но вам не нужно об этом заботиться.

Ответ 3

Изображения построены путем запуска docker build с заданным Dockerfile и идентифицируются их идентификатором.

Репозитории и теги - это просто средства для обозначения и организации ваших изображений в значащих иерархиях/архитектурах.

  • Репозиторий обычно содержит несколько связанных изображений

  • Изображение может переходить в несколько репозиториев

Следующее из этого SO-ответа дает подробное объяснение вывода docker images (это, вероятно, то, что они должны были поместить в документы):

  • Идентификатор IMAGE - это первые 12 символов истинного идентификатора для изображения. Вы можете создать много тегов данного изображения, но их идентификаторы будут все будет одинаковым (как указано выше).
  • VIRTUAL SIZE является виртуальным, потому что он объединяет размеры всех отдельных слоев. Это означает, что сумма всех значения в этом столбце, вероятно, намного больше, чем используемое дисковое пространство всеми этими изображениями.
  • Значение в столбце REPOSITORY происходит от флага -t команды docker build или от docker tag -весьте существующее изображение. Вы можете пометить изображения, используя номенклатуру, которая имеет смысл вы, но знаете, что докер будет использовать тег в качестве места реестра в docker push или docker pull.
  • Полная форма тега [REGISTRYHOST/][USERNAME/]NAME[:TAG]. Для ubuntu выше, REGISTRYHOST определяется как registry.hub.docker.com. Поэтому, если вы планируете хранить свое изображение под названием my-application в реестре в docker.example.com, вы должны пометить это изображение docker.example.com/my-application.
  • Столбец TAG - это только часть [: TAG] полного тега. Это печальная терминология.