Примечание.
Container registry в настоящее время находится в public preview для GitHub Enterprise Server и подлежит изменению.
Для использования Container registry необходимо включить GitHub Packages и изоляцию поддоменов. Дополнительные сведения см. в разделе Работа с реестром контейнеров.
Сведения о Container registry
Container registry хранит образы контейнеров в вашей организации или личной учетной записи и позволяет связать образ с репозиторием. Можно указать, нужно ли наследовать разрешения из репозитория или задавать детализированные разрешения независимо от репозитория. Кроме того, можно анонимно выполнять доступ к открытым образам контейнеров.
Чтобы использовать Container registry на GitHub Enterprise Server, администратор сайта должен сначала настроить GitHub Packages для экземпляра и включить изоляцию поддомена. Дополнительные сведения см. в разделе [AUTOTITLE и Начало работы с пакетами GitHub для вашего предприятия](/admin/configuration/configuring-network-settings/enabling-subdomain-isolation).
Сведения о поддержке Container registry
В настоящее время Container registry поддерживает следующие форматы образов контейнеров:
При установке или публикации образа Docker Container registry поддерживает внешние слои, такие как образы Windows.
Проверка подлинности Container registry
Примечание.
GitHub Packages поддерживает проверку подлинности только с помощью personal access token (classic). Дополнительные сведения см. в разделе Управление личными маркерами доступа.
Для публикации, установки и удаления частных, внутренних и общедоступных пакетов требуется маркер доступа.
Можно использовать personal access token (classic) для проверки подлинности в API GitHub Packages или API GitHub . При создании personal access token (classic)можно назначить маркер различным областям в зависимости от ваших потребностей. Дополнительные сведения о областях, связанных с пакетами, для personal access token (classic), см. в разделе Сведения о разрешениях для пакетов GitHub.
Для проверки подлинности в реестре GitHub Packages в рабочем процессе GitHub Actions можно использовать следующее:
GITHUB_TOKENдля публикации пакетов, связанных с репозиторием рабочих процессов.- personal access token (classic) с по крайней мере
read:packagesобластью действия для установки пакетов, связанных с другими частными репозиториями (GITHUB_TOKENможно использовать, если репозиторий предоставлен доступ на чтение к пакету. См . раздел AUTOTITLE.
Проверка подлинности в рабочем процессе GitHub Actions
Этот реестр поддерживает детализированные разрешения. Для реестров, поддерживающих детализированные разрешения, если рабочий процесс GitHub Actions использует personal access token для проверки подлинности в реестре, настоятельно рекомендуется обновить рабочий процесс для использования GITHUB_TOKEN. Инструкции по обновлению рабочих процессов, прошедших проверку подлинности в реестре с помощью personal access token, см. в разделе Публикация и установка пакета с помощью GitHub Actions.
Примечание.
Возможность удаления и восстановления пакетов с помощью REST API GitHub Actions в настоящее время находится в public preview и подлежит изменению.
Вы можете использовать GITHUB_TOKEN рабочий процесс GitHub Actions для удаления или восстановления пакета с помощью REST API, если маркер имеет admin разрешение на пакет. Репозитории, публикующие пакеты с помощью рабочего процесса и репозиториев, которые явно подключены к пакетам, автоматически предоставляются admin разрешения на пакеты в репозитории.
Дополнительные сведения см. в GITHUB_TOKENразделе Использование GITHUB_TOKEN для проверки подлинности в рабочих процессах. Дополнительные сведения о рекомендациях при использовании реестра в действиях см. в разделе Справочник по безопасному использованию.
Вы также можете предоставить доступ к пакетам независимо для GitHub Actions. Дополнительные сведения см. в разделе [AUTOTITLE и Настройка управления доступом и видимости пакета](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package).
Проверка подлинности с помощью personal access token (classic)
Убедитесь, что вы замените HOSTNAME экземпляр GitHub Enterprise Server имя узла или IP-адрес в приведенных ниже примерах.
Примечание.
GitHub Packages поддерживает проверку подлинности только с помощью personal access token (classic). Дополнительные сведения см. в разделе Управление личными маркерами доступа.
-
Создайте personal access token (classic) с соответствующими областями для задач, которые необходимо выполнить. Если для вашей организации требуется единый вход, необходимо включить его для нового маркера.
Примечание.
По умолчанию при выборе
write:packagesобласти для personal access token (classic) в пользовательском интерфейсеrepoтакже будет выбрана область. Областьrepoпредлагает ненужный и широкий доступ, который мы рекомендуем избежать использования для рабочих процессов GitHub Actions в частности. Дополнительные сведения см. в разделе Справочник по безопасному использованию. В качестве обходного решения можно выбрать толькоwrite:packagesобласть для personal access token (classic) в пользовательском интерфейсе с помощью этого URL-адреса:https://HOSTNAME/settings/tokens/new?scopes=write:packages- Выберите область
read:packagesдля скачивания образов контейнеров и считывания их метаданных. - Выберите область
write:packagesдля скачивания и отправки образов контейнеров, а также для считывания и записи их метаданных. - Выберите область
delete:packagesдля удаления образов контейнеров.
Дополнительные сведения см. в разделе Управление личными маркерами доступа.
- Выберите область
-
Сохраните данные personal access token (classic). Рекомендуется сохранить маркер в качестве переменной среды.
export CR_PAT=YOUR_TOKEN -
С помощью интерфейса командной строки для типа контейнера войдите в службу Container registry по адресу
containers. HOSTNAME.$ echo $CR_PAT | docker login containers. HOSTNAME -u USERNAME --password-stdin > Login Succeeded
Отправка образов контейнеров
В этом примере отправляется последняя версия IMAGE_NAME.
docker push containers. HOSTNAME/NAMESPACE/IMAGE_NAME:latest
Замените NAMESPACE именем личная учетная запись или организации, для которой требуется область действия изображения.
В этом примере отправляется версия 2.5 образа.
docker push containers. HOSTNAME/NAMESPACE/IMAGE_NAME:2.5
При первой публикации пакета для параметра видимости по умолчанию выбирается закрытый доступ. Чтобы изменить видимость или задать разрешения доступа, см. раздел Настройка управления доступом и видимости пакета. Вы можете связать опубликованный пакет с репозиторием с помощью пользовательского интерфейса или командной строки. Дополнительные сведения см. в разделе Подключение репозитория к пакету.
При отправке образа контейнера из командной строки образ не связан с репозиторием по умолчанию. Это даже если вы пометите изображение с пространством имен, которое соответствует имени репозитория, например containers.github.companyname.com/octocat/my-repo:latest.
Самый простой способ подключить репозиторий к пакету контейнера — опубликовать пакет из рабочего процесса с помощью ${{secrets.GITHUB_TOKEN}}репозитория, содержащего рабочий процесс, автоматически связан. Обратите внимание, что GITHUB_TOKEN у вас нет разрешения на отправку пакета, если вы ранее принудили пакет к тому же пространству имен, но не подключили пакет к репозиторию.
Чтобы подключить репозиторий при публикации образа из командной строки и убедиться, что у вас GITHUB_TOKEN есть соответствующие разрешения при использовании рабочего процесса GitHub Actions, рекомендуется добавить метку org.opencontainers.image.source в вашу Dockerfile. Дополнительные сведения см. в разделе "Образы контейнеров метки" в этой статье иПубликация и установка пакета с помощью GitHub Actions.
Вытягивание образов контейнеров
Вытягивание по хэшу
Чтобы всегда использовать один и тот же образ, можно указать точную версию образа контейнера для вытягивания, задав значение SHA digest.
-
Чтобы найти значение хэша SHA, используйте
docker inspectилиdocker pull, а затем скопируйте значение SHA послеDigest:docker inspect containers. HOSTNAME/NAMESPACE/IMAGE_NAMEЗамените
NAMESPACEименем личная учетная запись или организации, в которой находится изображение. -
При необходимости удалите образ локально.
docker rmi containers. HOSTNAME/NAMESPACE/IMAGE_NAME:latest -
Вытяните образ контейнера с
@YOUR_SHA_VALUEпосле имени образа.docker pull containers. HOSTNAME/NAMESPACE/IMAGE_NAME@sha256:82jf9a84u29hiasldj289498uhois8498hjs29hkuhs
Вытягивание по имени
docker pull containers. HOSTNAME/NAMESPACE/IMAGE_NAME
Замените NAMESPACE именем личная учетная запись или организации, в которой находится изображение.
Вытягивание по имени и версии
Пример интерфейса командной строки Docker с образом, извлеченным по имени и тегу версии 1.14.1:
$ docker pull containers. HOSTNAME/NAMESPACE/IMAGE_NAME:1.14.1
> 5e35bd43cf78: Pull complete
> 0c48c2209aab: Pull complete
> fd45dd1aad5a: Pull complete
> db6eb50c2d36: Pull complete
> Digest: sha256:ae3b135f133155b3824d8b1f62959ff8a72e9cf9e884d88db7895d8544010d8e
> Status: Downloaded newer image for containers. HOSTNAME/NAMESPACE/IMAGE_NAME/release:1.14.1
> containers. HOSTNAME/NAMESPACE/IMAGE_NAME/release:1.14.1
Замените NAMESPACE именем личная учетная запись или организации, в которой находится изображение.
Вытягивание по имени и последней версии
$ docker pull containers. HOSTNAME/NAMESPACE/IMAGE_NAME:latest
> latest: Pulling from NAMESPACE/IMAGE_NAME
> Digest: sha256:b3d3e366b55f9a54599220198b3db5da8f53592acbbb7dc7e4e9878762fc5344
> Status: Downloaded newer image for containers. HOSTNAME/NAMESPACE/IMAGE_NAME:latest
> containers. HOSTNAME/NAMESPACE/IMAGE_NAME:latest
Замените NAMESPACE именем личная учетная запись или организации, в которой находится изображение.
Сборка образов контейнеров
В этом примере собирается образ hello_docker:
docker build -t hello_docker .
Добавление тегов в образы контейнеров
-
Найдите идентификатор образа Docker, к которому вы хотите добавить тег.
$ docker images > REPOSITORY TAG IMAGE ID CREATED SIZE > containers. HOSTNAME/my-org/hello_docker latest 38f737a91f39 47 hours ago 91.7MB > hello-world latest fce289e99eb9 16 months ago 1.84kB -
Добавьте тег к образу Docker, указав идентификатор образа, желаемое имя образа и место размещения.
docker tag 38f737a91f39 containers. HOSTNAME/NAMESPACE/NEW_IMAGE_NAME:latest
Замените NAMESPACE именем личная учетная запись или организации, для которой требуется область действия изображения.
Образы контейнеров маркировки
Вы можете использовать предварительно определенные ключи заметки для добавления метаданных, включая описание, лицензию и исходный репозиторий в образ контейнера. Значения поддерживаемых ключей будут отображаться на странице пакета для изображения.
Для большинства изображений можно использовать метки Docker для добавления ключей заметок в изображение. Дополнительные сведения см. в официальной документации Docker и предварительно определенных ключах заметок в репозиторииopencontainers/image-spec.
Для изображений с несколькими арками можно добавить описание к изображению, добавив соответствующий ключ заметки в annotations поле в манифесте изображения. Дополнительные сведения см. в разделе "Добавление описания в многоархивовые изображения".
Следующие ключи заметок поддерживаются в Container registry.
| Ключ. | Description |
|---|---|
org.opencontainers.image.source | URL-адрес репозитория, связанного с пакетом. Дополнительные сведения см. в разделе Подключение репозитория к пакету. |
org.opencontainers.image.description | Текстовое описание ограничено 512 символами. Это описание появится на странице пакета под именем пакета. |
org.opencontainers.image.licenses | Идентификатор лицензии SPDX, например MIT, ограничен 256 символами. Лицензия появится на странице пакета на боковой панели "Сведения". Дополнительные сведения см. в списке лицензий SPDX. |
Чтобы добавить ключ в качестве метки Docker, мы рекомендуем использовать инструкцию в вашей команде LABEL Dockerfile. Например, если вы являетесь пользователем octocat и являетесь владельцем my-repo, и ваш образ распространяется по условиям лицензии MIT, вы добавите следующие строки в вашу Dockerfile:
LABEL org.opencontainers.image.source=https://HOSTNAME/octocat/my-repo
LABEL org.opencontainers.image.description="My container image"
LABEL org.opencontainers.image.licenses=MIT
Кроме того, можно добавить метки в образ во время сборки с помощью docker build команды.
$ docker build \
--label "org.opencontainers.image.source=https://HOSTNAME/octocat/my-repo" \
--label "org.opencontainers.image.description=My container image" \
--label "org.opencontainers.image.licenses=MIT"
Добавление описания в многоархивовые изображения
Многоархивное изображение — это образ, поддерживающий несколько архитектур. Он работает путем ссылки на список изображений, каждый из которых поддерживает другую архитектуру в одном манифесте.
Описание, которое отображается на странице пакета для изображения с несколькими арками, получается из annotations поля в манифесте изображения. Как и метки Docker, заметки предоставляют способ связывания метаданных с изображением и поддержки предварительно определенных ключей заметки. Дополнительные сведения см. в разделе "Заметки " в репозитории opencontainers/image-spec .
Чтобы указать описание многоархового изображения, задайте значение для org.opencontainers.image.description ключа в annotations поле манифеста, как показано ниже.
"annotations": {
"org.opencontainers.image.description": "My multi-arch image"
}
Например, следующий шаг рабочего процесса GitHub Actions создает и отправляет многоархивовый образ. Параметр outputs задает описание изображения.
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
- name: Build and push Docker image
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
file: ./Dockerfile
platforms: ${{ matrix.platforms }}
push: true
outputs: type=image,name=target,annotation-index.org.opencontainers.image.description=My multi-arch image
Устранение неполадок
- Container registry имеет ограничение на 10 ГБ для каждого слоя.
- Для отправки данных Container registry установлено ограничение времени ожидания в 10 минут.