DevGang
Авторизоваться

Отправка изображений контейнеров в реестр контейнеров GitHub с помощью действий GitHub

GitHub Container Registry хранит образы контейнеров в вашей организации или личной учетной записи и позволяет связать образ с репозиторием. В настоящее время он поддерживает спецификации Docker Image Manifest V2, Schema 2 и Open Container Initiative (OCI).

В GitHub мы можем создавать и отправлять наши образы докеров в GHCR в файле рабочего процесса GitHub Actions и делать эти образы доступными либо в частном порядке, либо публично (я делаю свои образы общедоступными для своих примеров).

Допустим, у нас есть следующий Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
LABEL org.opencontainers.image.source="https://github.com/willvelida/dapr-store-app"
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Store/Store.csproj", "Store/"]
RUN dotnet restore "Store/Store.csproj"
COPY . .
WORKDIR "/src/Store"
RUN dotnet build "Store.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Store.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Store.dll"]

Этот файл Dockerfile просто создает простое серверное приложение Blazor (это довольно общий файл Dockerfile для всех ASP.NET Основные приложения).

Вместо того, чтобы отправлять это в Docker Hub или Azure Container Registry, мы собираемся настроить файл рабочего процесса GitHub Actions для отправки этого образа контейнера в GHCR.

Давайте посмотрим, как мы можем пройти аутентификацию в GHCR.

Использование GITHUB_TOKEN для аутентификации в GHCR

Рекомендуемый метод аутентификации в GHCR - использовать GITHUB_TOKEN. GitHub предоставляет вам токен, который вы можете использовать для аутентификации от имени GitHub Actions. В начале каждого запуска рабочего процесса GitHub автоматически создает уникальный секрет GITHUB_TOKEN для использования в рабочем процессе, который вы можете использовать для аутентификации.

Когда GHCR был в бета-версии, вы могли использовать личный токен доступа (PAT) для аутентификации. Вам нужно было бы быть осторожным с разрешениями, которые у вас есть на выбранном PAT. С GITHUB_TOKEN это поставляется с достаточными разрешениями, необходимыми для отправки изображений контейнеров в GHCR

Использование личного Token доступа для аутентификации в GHCR

Изначально у вас могут возникнуть некоторые проблемы с использованием GITHUB_TOKEN, поэтому для начала используем токен PAT. Чтобы создать его, перейдите в Настройки/Настройки разработчика, нажмите на личные token доступа/Tokens (classic), а затем нажмите на Сгенерировать новый token. Чтобы отправлять изображения в GHCR, вам нужны только следующие разрешения:

  1. read:packages
  2. write:packages
  3. delete:packages

После того, как вы создали PAT, вы можете сохранить его как секрет репозитория внутри вашего репозитория GitHub, который содержит ваш файл Dockerfile.

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

- name: 'Login to GitHub Container Registry'
        run: |
          echo $CR_PAT | docker login ghcr.io -u <Your-GitHub-username> --password-stdin

Поскольку рекомендуется использовать GITHUB_TOKEN вместо токенов PAT, мы будем использовать это в дальнейшем.

Создание рабочего процесса GitHub Actions

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

name: Deploy Images to GHCR

env:
  DOTNET_VERSION: '6.0.x'

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
      push-store-image:
        runs-on: ubuntu-latest
        defaults:
          run:
            working-directory: './Store'
        steps:
          - name: 'Checkout GitHub Action'
            uses: actions/checkout@main

          - name: 'Login to GitHub Container Registry'
            uses: docker/login-action@v1
            with:
              registry: ghcr.io
              username: ${{github.actor}}
              password: ${{secrets.GITHUB_TOKEN}}

          - name: 'Build Inventory Image'
            run: |
              docker build . --tag ghcr.io/<your-GitHub-username>/store:latest
              docker push ghcr.io/<your-GitHub-username>/store:latest

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

Для аутентификации мы можем использовать docker/login-action, нацелить ghrc.io в качестве реестра и используйте свое имя пользователя (переданное как ${{ github.actor }}) и наш GITHUB_TOKEN в качестве пароля.

Как только мы пройдем аутентификацию, мы сможем пометить ваше изображение, используя формат ghcr.io/<your-github-username>/<image-name>:<image-version>.

Делаем наш образ общедоступным

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

Чтобы сделать их доступными для нашего репозитория, нам нужно добавить команду LABEL в наш Dockerfile. Вы должны сделать это под первой командой FROM следующим образом:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
LABEL org.opencontainers.image.source="https://github.com/<your-github-username>/<your-repo-name>"

Это сделает наши изображения видимыми на главной странице нашего репозитория, вот так:

Нажмите на пакет, который вы хотите сделать общедоступным, затем перейдите в Package Settings. В опасной зоне (подсказка Кенни Логгинса) нажмите "change visibility" и выберите "Public", например так:

Теперь, когда наш пакет общедоступен, мы можем извлечь его с помощью docker pull следующим образом:

docker pull ghcr.io/willvelida/store:latest

Заключение

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

Это должно помочь вам с публикацией изображений контейнеров в реестре контейнеров GitHub. Для изображений частных контейнеров по-прежнему можно использовать Azure Container Registry, но аутентификация и отправка изображений в GHC для целей образцов выглядит как правильный путь.

#Git #Docker #GitHub
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу