Перейти к содержанию

Реестр контейнеров Docker


Подготовка

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

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

Атрибут Описание
имя пакета Может содержать буквы нижнего регистра (а-я), верхнего регистра (А-Я), числа (0-9), точки (.), тире (-), нижнее подчеркивания (_).
версия пакета Может содержать цифры (0-9), точки (.)
имя файла Может содержать буквы нижнего регистра (а-я), верхнего регистра (А-Я), числа (0-9), точки (.), тире (-), нижнее подчеркивания (_).

В документации ниже встречается атрибут {домен gitflic} На его место необходимо указать домен, в зависимости от версии:

  • для SaaS версии registry.gitflic.ru

  • для self-hosted localhost:8080

Домен и порт для self-hosted версии может отличаться.

Авторизация

Выполните команду

docker login registry.gitflic.ru

или при использовании self-hosted

docker login localhost:8080

Для авторизации введите ваш логин аккаунта, далее вставьте ваш транспортный токен вместо пароля. Если аутентификация прошла успешно, вы получите сообщение Login Succeeded

Docker login

Загрузка образов

Атрибут Описание
домен_gitflic registry.gitflic.ru или ваш, в случае Self-Hosted версии
ownerAlias Псевдоним владельца проекта
projectAlias Псевдоним проекта
companyAlias Псевдоним компании
image_name:tag Название и тег Docker образа

В проекте https://gitflic.ru/project/gitflic/documentation, {companyAlias} - gitflic, {projectAlias} - documentation

Подготовка к отправке

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

Вариант для дальнейшей загрузки образа на уровне проекта

Шаблон команды:

docker tag {image_name:tag} {домен_gitflic}/project/{ownerAlias}/{projectAlias}/{image_name:tag}

Пример команды для выполнения:

docker tag ubuntu:latest localhost:8080/project/user/repo/ubuntu:latest

Вариант для дальнейшей загрузки образа на уровне компании

Шаблон команды:

docker tag {image_name:tag} {домен_gitflic}/company/{companyAlias}/{image_name:tag}

Пример команды для выполнения:

docker tag ubuntu:latest localhost:8080/company/test_company/ubuntu:latest

Вариант для дальнейшей загрузки образа на уровне инстанса

Шаблон команды:

docker tag {image_name:tag} {домен_gitflic}/{image_name:tag}

Пример команды для выполнения:

docker tag ubuntu:latest localhost:8080/ubuntu:latest

Сборка и отправка образа

Вариант для проекта

Шаблон команды:

docker build -t {домен_gitflic}/project/{ownerAlias}/{projectAlias}/{image_name:tag} .

docker push {домен_gitflic}/project/{ownerAlias}/{projectAlias}/{image_name:tag}

В проекте https://gitflic.ru/project/gitflicuser/myproject, {ownerAlias} - gitflicuser, {projectAlias} - myproject

Пример команды для выполнения:

docker build -t localhost:8080/project/gitflicuser/myproject/my-docker:1.0.1 .

docker push localhost:8080/project/gitflicuser/myproject/my-docker:1.0.1

Вариант для компании

Шаблон команды

docker build -t {домен_gitflic}/company/{companyAlias}/{image_name:tag} .

docker push {домен_gitflic}/company/{companyAlias}/{image_name:tag}

В проекте https://gitflic.ru/project/gitflic/documentation, {companyAlias} - gitflic, {projectAlias} - documentation

Пример команды для выполнения

docker build -t localhost:8080/project/gitflic/docs/my-docker:1.0.1 .

docker push localhost:8080/project/gitflic/docs/my-docker:1.0.1

Вариант для инстанса

Шаблон команды

docker build -t {домен_gitflic}/{image_name:tag} .

docker push {домен_gitflic}/company/{companyAlias}/{image_name:tag}

Пример команды для выполнения

docker build -t localhost:8080/my-docker:1.0.1 .

docker push localhost:8080/my-docker:1.0.1

Проксирование образов

GitFlic поддерживает возможность подключения внешних Docker-реестров для работы с публичными и приватными образами. Это позволяет использовать GitFlic как единое хранилище для всех необходимых образов, в том числе загруженных из внешних источников. Также, проксирование позволяет автоматически загружать образ из внешних реестров, если он отсутствует в реестре GitFlic.

Добавление внешнего реестра

По умолчанию, в GitFlic (как в облачной версии, так и в Self-Hosted) уже установлен внешний реестр Docker Hub, что позволяет сразу использовать его публичные образы без дополнительной настройки.

Чтобы добавить новый внешний Docker-реестр, администратор сервиса должен выполнить следующие шаги:

1. Перейти в панель администратора -> раздел Реестр

2. На странице перейти на вкладку Внешние реестры

3. Нажать кнопку Добавить и заполнить форму, указав:

Поле Значение
Тип Container
Название Название реестра.
URL URL адрес реестра. Например, registry.hub.docker.com для Docker Hub.
Вес Определяет приоритет реестра. Указывается числом: чем больше значение, тем выше приоритет. В первую очередь сервис обращается к реестру с наибольшим весом.
Время жизни артефакта Длительность хранения спроксированного образа в часах. По истечении срока он будет удалён.
Имя пользователя Указывается, если доступ к реестру требует аутентификации.
Пароль / Access token Необходим при работе с приватными образами.

После добавления внешнего реестра вы сможете загружать образы через GitFlic с использованием проксирования.

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

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

Пример использования

Вместо:

docker pull ubuntu

Используйте:

docker pull registry.example.com/ubuntu

где registry.example.com — URL к вашему GitFlic-реестру.

Условия успешного проксирования

  • Для того, чтобы образ в результате проксирования был сохранён в GitFlic, клиент должен запросить манифест образа через GitFlic.
  • Если клиент загрузил только блобы (части образа), но не запросил манифест, образ не будет собран и сохранён в GitFlic.
  • После успешного проксирования полного образа, он отобразится в реестре.

Если клиент ранее загружал некоторые слои образа и запросил только недостающие части, дозагрузка и сборка образа в GitFlic будет выполнена автоматически. Процесс может занять до 30 минут.

Мульти-архитектурные образы

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

Сборка мульти-архитектурных образов

Для сборки мульти-архитектурного образа мы рекомендуем использовать утилиту docker buildx.

1. Проверьте наличие установленный утилиты buildx:

docker buildx version

2. Установите утилиту buildx (если не установлена):

Ubuntu, Debian:

apt install docker-buildx-plugin

Если в вашей ОС отсутствует репозиторий с данным пакетом, вы можете загрузить его вручную, например с GitHub:

mkdir -p ~/.docker/cli-plugins
curl -sLo ~/.docker/cli-plugins/docker-buildx "https://github.com/docker/buildx/releases/download/v0.20.1/buildx-v0.20.1.linux-amd64"
chmod +x ~/.docker/cli-plugins/docker-buildx

При использовании Docker Desktop, данный шаг можно пропустить.

3. Проверьте наличие билдера (конструктора):

docker buildx ls

4. Создайте билдер, если он отсутствует:

docker buildx create --use --name my_builder

Если вы используете Docker Desktop, то можете пропустить данный шаг, так как в нем присутствует стандартный билдер.

5. Соберите образ для нескольких архитектур и отправьте его в реестр контейнеров.

Пример команды для сборки и отправки образа в реестр проекта для архитектур amd64 и arm64:

docker buildx build --platform linux/amd64,linux/arm64 -t registry.gitflic.ru/project/{ownerAlias}/{projectAlias}/{image_name:tag} --push .

Проверка мульти-архитектурных образов

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

docker buildx imagetools inspect registry.gitflic.ru/project/{ownerAlias}/{projectAlias}/{image_name:tag}

Вывод должен содержать информацию о нескольких платформах. Пример:

docker manifest inspect registry.gitflic.ru/ubuntu:latest
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 529,
         "digest": "sha256:104f82606ea66da00e6cfecbcccdb53ba4238a7057bed809f004107ad8e90c97",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 529,
         "digest": "sha256:2d21d74b3a6ff089355d2442aa9aac3ff625ea55567639393827913718c7f65a",
         "platform": {
            "architecture": "arm64",
            "os": "linux",
            "variant": "v8"
         }
      }
   ]
}

Запуск образов на разных архитектурах

Для того, чтобы запускать образ на разных архитектурах, используйте параметр --platform в Docker.

  • Пример запуска образа на архитектуре amd64:
docker run --rm --platform linux/amd64 registry.gitflic.ru/project/{ownerAlias}/{projectAlias}/{image_name:tag}
  • Пример запуска образа на архитектуре arm64:
docker run --rm --platform linux/arm64 registry.gitflic.ru/project/{ownerAlias}/{projectAlias}/{image_name:tag}

Удаление образов

Чтобы удалить образ с помощью пользовательского интерфейса GitFlic:

  1. Перейдите в раздел Реестр пакетов

  2. Найдите нужный вам образ в списке и откройте его

  3. Чтобы удалить образ полностью, на главной странице образа нажмите кнопку корзины. Для удаления конкретной версии образа, перейдите в раздел Теги и нажмите кнопку корзины рядом с нужным тегом.

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