Сведения о реестрах, репозиториях и артефактах

В этой статье представлены основные понятия реестров контейнеров, репозиториев, образов контейнеров и связанных артефактов.

Реестр, репозитории и артефакты

Реестр

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

Помимо образов контейнеров, совместимых с Docker, Реестр контейнеров Azure поддерживает ряд артефактов содержимого, включая диаграммы Helm и форматы образов Open Container Initiative (OCI).

Репозиторий

Репозиторий — это коллекция образов контейнеров или других артефактов в реестре, имеющих одинаковые имена, но разные теги. Например, три указанных ниже образа находятся в репозитории acr-helloworld.

  • acr-helloworld:latest
  • acr-helloworld:v1
  • acr-helloworld:v2

Имена репозиториев также могут включать пространство имен. Используя имена, разделенные слэшами, можно определить связанные репозитории и принадлежность артефактов в вашей организации. Однако реестр управляет всеми репозиториями независимо друг от друга, а не в виде иерархии. Например:

  • marketing/campaign10-18/web:v2
  • marketing/campaign10-18/api:v3
  • marketing/campaign10-18/email-sender:v2
  • product-returns/web-submission:20230604
  • product-returns/legacy-integrator:20230715

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

Артефакт

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

Тег

Тег для образа или другого артефакта указывает его версию. Один или несколько тегов можно назначить одному артефакту в репозитории. Вы также можете "отменить" артефакт, удалив все теги из образа, сохраняя данные образа (его слои) в реестре.

Репозиторий (или репозиторий и пространство имен) вместе с тегом определяют имя образа. Вы можете отправлять и получать образ, указав его имя в операции передачи или получения. По умолчанию используется тег latest (если не указать другой тег в командах Docker).

Как помечать образы контейнеров зависит от сценариев разработки или развертывания. Например, используйте стабильные теги для поддержания базовых образов и использования уникальных тегов для развертывания образов. Дополнительные сведения см. в статье Рекомендации по использованию тегов и управлению версиями образов контейнеров.

Правила именования тегов см. в документации по Docker.

Уровень

Образы контейнеров и артефакты состоят из одного или более слоёв. Различные типы артефактов по-разному определяют слои. Например, в образе контейнера Docker каждый слой соответствует строке в файле Dockerfile, определяющем образ:

Слои образа контейнера

Артефакты в реестре имеют общие уровни, что повышает эффективность хранения. Например, несколько образов в разных репозиториях могут иметь общий базовый уровень ASP.NET Core, но реестр хранит только одну копию этого слоя. Кроме того, совместное использование слоев позволяет оптимизировать распределение слоев по узлам. При этом для нескольких артефактов используются одинаковые слои. Например, если образ, уже находящийся в узле, включает в себя уровень ASP.NET Core в качестве основы, то при последующем извлечении другого образа, ссылающегося на тот же слой, этот слой не будет перемещен в узел. Вместо этого он ссылается на слой, который уже существует на узле.

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

манифест

Каждый образ контейнера или артефакт, который вы отправляете в реестр контейнеров, содержит манифест. Реестр создает манифест при загрузке содержимого. Манифест однозначно идентифицирует артефакты и задает слои.

Базовый манифест образа Linux hello-world выглядит примерно следующим образом:

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 1510,
    "digest": "sha256:fbf289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e"
  },
  "layers": [
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 977,
      "digest": "sha256:2c930d010525941c1d56ec53b97bd057a67ae1865eebf042686d2a2d18271ced"
    }
  ]
}

Используйте команду az acr manifest list-metadata Azure CLI для перечисления манифестов репозитория:

az acr manifest list-metadata --name <repositoryName> --registry <acrName>

Например, выведите список манифестов для acr-helloworld репозитория:

az acr manifest list-metadata --name acr-helloworld --registry myregistry
[
  {
    "digest": "sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108",
    "tags": [
      "latest",
      "v3"
    ],
    "timestamp": "2023-07-12T15:52:00.2075864Z"
  },
  {
    "digest": "sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57",
    "tags": [
      "v2"
    ],
    "timestamp": "2023-07-12T15:50:53.5372468Z"
  },
  {
    "digest": "sha256:7ca0e0ae50c95155dbb0e380f37d7471e98d2232ed9e31eece9f9fb9078f2728",
    "tags": [
      "v1"
    ],
    "timestamp": "2023-07-11T21:38:35.9170967Z"
  }
]

Дайджест манифеста

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

Вы можете извлечь артефакт из реестра, добавив его дайджест в операцию извлечения. Некоторые системы могут быть настроены для извлечения по дайджесту, так как это гарантирует версию образа, которую вы извлекаете, даже если вы отправляете идентичный помеченный образ позже в регистратор.

Внимание

Если вы неоднократно отправляете измененные артефакты с идентичными тегами, вы можете создать сироты: артефакты, которые не помечены, но по-прежнему используют пространство в реестре. Изображения без тегов не отображаются в Azure CLI или на портале Azure при перечислении или просмотре изображений по тегу. Однако их слои по-прежнему существуют и используют пространство в реестре. При удалении нетегированного образа освобождается пространство реестра, если манифест является единственным или последним, указывающим на определённый слой. Сведения о том, как освободить место, используемое непомеченными изображениями, см. в статье "Удаление образов контейнеров в реестре контейнеров Azure".

Адрес артефакта

Чтобы обработать артефакт реестра для операций отправки и получения с помощью Docker или других клиентских инструментов, объедините полное имя реестра, имя репозитория (включая путь к пространству имен, если применимо), а также тег артефакта или дайджест манифеста. Общий формат:

Адрес по тегу: [loginServerUrl]/[repository][:tag]

Адрес по хэшу: [loginServerUrl]/[repository]@[sha256:digest]

При использовании Docker или других клиентских средств для извлечения или отправки артефактов в реестр контейнеров Azure используйте полный URL-адрес реестра, также называемый именем сервера входа . В облаке Azure полный URL-адрес Реестра контейнеров Azure имеет формат myregistry.azurecr.io (все буквы должны быть строчными). По умолчанию используется тег latest (если вы не укажете какой-либо другой тег в команде).

Примечание.

Вам не удастся указать номер порта, например myregistry.azurecr.io:443, в URL-адресе сервера входа реестра.

Примеры отправки по тегу:

docker push myregistry.azurecr.io/samples/myimage:20230106

docker push myregistry.azurecr.io/marketing/email-sender

Пример выборки по тегу:

docker pull myregistry.azurecr.io/marketing/campaign10-18/email-sender:v2

Пример извлечения по дайджесту манифеста:

docker pull myregistry.azurecr.io/acr-helloworld@sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108

Следующие шаги