Изучение новых возможностей реестра контейнеров GitHub

Знаете ли вы, что GitHub запустил новый Реестр контейнеров GitHub в сентябре 2020 года?

Это отличная новость для людей, которые уже используют пакеты GitHub, поскольку GitHub запустил множество новых возможностей для пользователей контейнеров. В этой статье давайте обсудим то, что вам следует знать о последней версии GitHub Container Registry. 😊

Контур

Вот что рассказывается в этой статье.

  • Введение в реестр контейнеров
  • Новые возможности GitHub Container Registry
  • Как перейти на реестр контейнеров GitHub?
  • Пример использования - развертывание веб-сервера Nginx в Kubernetes с помощью GitHub Actions, Kubernetes и реестра контейнеров GitHub.

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

Что такое Реестр контейнеров?

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

Примеры популярных реестров контейнеров: DockerHub, Azure Container Registry, Amazon Elastic Container Registry (ECR).

Зачем нам нужен реестр контейнеров? 🤔

Итак, зачем нам вообще реестр контейнеров?

Легкость развертывания в облаке

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

Легкость управления контейнерами

Реестр контейнеров также помогает эффективно централизованно управлять образами контейнеров приложений между группами внутри вашей организации.

Дополнительные возможности!

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

⭐ Новый реестр контейнеров GitHub

Теперь, когда мы знаем о реестрах контейнеров, давайте узнаем о недавно анонсированном Реестре контейнеров GitHub.

Реестр контейнеров GitHub позволяет организациям легко размещать и управлять своими образами контейнеров с мелкими разрешениями. Он также может хранить как частные, так и публичные образы контейнеров.

Сравнение с другими реестрами контейнеров

Давайте посмотрим на следующую таблицу, в которой сравнивается реестр контейнеров GitHub и другие популярные реестры контейнеров.

Следует отметить, что реестр контейнеров GitHub в настоящее время находится на стадии общедоступной бета-версии, и модель ценообразования для частных образов, общедоступность и SLA могут быть изменены.

Реестр контейнеров GitHub и реестр пакетов GitHub Docker

До GitHub Container Registry, GitHub использовал GitHub Packages Docker Registry для хранения образов Docker.

Однако реестр контейнеров GitHub заменяет реестр GitHub Packages Docker и оптимизирует поддержку уникальных потребностей контейнеров, вводя множество новых функций.

Новые возможности GitHub Container Registry

Обратите внимание на следующие новые функции, представленные в GitHub Container Registry. Подробнее о них вы можете прочитать здесь.

1. Возможность хранить образы контейнеров в вашей организации

Реестр контейнеров GitHub позволяет создавать образы контейнеров в вашей организации. Теперь вы можете легко и безопасно поделиться этими образами контейнеров со своими командами.

2. Детальные разрешения для образов контейнеров.

Вам не нужно выдавать разрешение на хранилище пользователям контейнера. Вместо этого теперь вы можете назначить разрешение с наименьшими привилегиями для отдельных пользователей. Это обеспечит лучшую безопасность ваших образов контейнеров.

3. Может иметь анонимный доступ к общедоступным изображениям контейнеров.

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

Совет: управляйте модулями вашего проекта как независимыми компонентами с помощью Bit (Github).

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

Bit поддерживает Node, TypeScript, React, Vue, Angular и другие.



Узнай больше об этом здесь:



Как перейти на реестр контейнеров GitHub?

Представим, что у вас есть образы докеров уже в реестре Docker пакетов GitHub и вы хотите перенести их в реестр контейнеров GitHub. Как ты можешь это сделать?

Что ж, есть несколько вещей, которые вы должны помнить перед миграцией.

1. Это новый домен - ghcr.io

Реестр контейнеров GitHub использует новый домен, т.е.ghcr.io для образов докеров, вместо старого доменаdocker.pkg.github.com, который используется реестром пакетов GitHub Docker.

Взгляните на приведенный ниже пример URL-адресов изображений докеров.

Пример URL - Реестр пакетов GitHub Docker

docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME

Пример URL - Реестр контейнеров GitHub

ghcr.io/OWNER/IMAGE_NAME

2. Аутентификация с помощью PAT - токен персонального доступа.

На момент написания этой статьи реестр контейнеров GitHub поддерживает только PAT (Personal Access Token) для аутентификации и доступа к изображениям контейнеров, принадлежащих вашей организации.

Создание PAT

При создании PAT нам необходимо предоставить следующие разрешения. Следуйте этой документации для получения дополнительной информации.

  • read:packages Возможность загрузки образов контейнеров и чтения их метаданных.
  • write:packages Возможности загрузки и выгрузки образов контейнеров, а также чтения и записи их метаданных.
  • delete:packages Область удаления образов контейнеров.

Сохраните PAT как переменную среды

export CR_PAT=<TOKEN>

Аутентификация с помощью реестра контейнеров GitHub

echo $CR_PAT | docker login ghcr.io -u kasunsjc --password-stdin

3. Пометка изображения как обычного

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

При добавлении тегов к изображению контейнера следует соблюдать формат ghcr.io/USERNAME/IMAGENAME:TAG.

docker image tag nginx:latest ghcr.io/kasunsjc/nginx:v1

4. Отправьте образ в реестр контейнеров GitHub.

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

docker image push ghcr.io/kasunsjc/nginx:v1

5. Проверка пакета

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

6. Получение образа из реестра контейнеров GitHub.

Теперь, когда изображения находятся в реестре контейнеров GitHub, как мы можем перенести их на наш локальный компьютер или на ваш сервер сборки?

Что ж, вы можете легко использовать docker image pullcommand. Взгляните на следующий пример получения изображения Nginx.

7. Публичные образы Docker в реестре контейнеров GitHub

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

Как ты можешь это сделать?

Реестр контейнеров GitHub поддерживает как общедоступные, так и частные образы. Мы можем сделать изображение общедоступным, как показано ниже.

Примечание. Сделать изображение общедоступным является НЕ двунаправленным, поэтому, если вы решите сделать репозиторий изображений общедоступным, у вас не будет возможности снова сделать изображение личным.

Давайте лучше разберемся на примере использования

Теперь, когда мы знаем о реестре контейнеров GitHub, давайте использовать его с другими сервисами, такими как GitHub Actions и Kubernetes.

Действия GitHub + Реестр контейнеров Github + Kubernetes - Вместе лучше 💕

В этом случае мы собираемся развернуть веб-сервер Nginx в Kubernetes. Во время этого процесса мы будем использовать реестр контейнеров GitHub для хранения созданного образа и действия GitHub для создания и отправки образа в реестр.

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

Создайте Dockerfile для упаковки приложения

Давайте воспользуемся следующими инструкциями в файле dockerfile, чтобы закрепить простую веб-страницу, обслуживаемую Nginx.

FROM nginx:latest
COPY ./index.html /usr/share/nginx/html/index.html

Использование GitHub Action для сборки и развертывания в Kubernetes

Затем мы используем следующий файл рабочего процесса, чтобы проинформировать GitHub Actions о выполнении перечисленных заданий для отправки образа в реестр контейнеров и развертывания в службе Azure Kubernetes.

Если вы новичок в GitHub Action, обратитесь к статье ниже и разберитесь в ней лучше. Вы также можете посетить эту ссылку GitHub, чтобы получить доступ к демонстрационным файлам.



Результат развертывания

После успешного выполнения действия GitHub приложение развертывается в Kubernetes, и вы должны увидеть следующий результат.

Теперь вы можете получить доступ к веб-странице, перейдя по IP-адресу Kubernetes Load Balancer.

Вы также можете проверить, использует ли приложение правильный образ из реестра контейнеров GitHub, используя команду kubectl decribe pod, как показано ниже.

Заключение

  • Вы должны выбрать реестр контейнеров в зависимости от потребностей вашего конкретного варианта использования. Допустимо использовать более одного реестра контейнеров.
  • Вы можете использовать GitHub Container Registry для распространения образов контейнеров в команде разработчиков программного обеспечения или в организации.
  • Если вы используете GitHub Actions для CI / CD, интеграция с GitHub Container Registry хорошо работает с его практиками DevOps.

Наконец, если вы столкнулись с какими-либо проблемами при выполнении действий, описанных в этой статье, оставьте комментарий ниже.

Учить больше