使用 GitHub Actions 将容器镜像推送到 GitHub Container Registry


我的工作中,我构建了很多与客户分享的示例,以向他们展示事情是如何运作的。我的很多客户都对 Azure 容器应用程序感兴趣,所以我希望能够为他们提供带有预构建容器映像的示例,而不必共享整个应用程序源代码(尤其是如果我有一堆的基本微服务,实际上并不需要包含在示例中)。

进入 GitHub 容器注册表!(GHCR) 我看过几个示例存储库,其中从 GHCR 引用了容器图像,但我不知道它是否有效或如何将图像推送到它。事实证明,这相当简单。

在这篇文章中,我将讨论什么是 GHCR,以及我们如何使用 GitHub Actions 将容器镜像推送到它!

什么是 GitHub 容器注册表?

GitHub Container Registry 将容器图像存储在您的组织或个人帐户中,并允许您将图像与存储库相关联。它目前同时支持Docker Image Manifest V2、Schema 2和Open Container Initiative (OCI) 规范。

在 GitHub 中,我们可以在 GitHub Actions 工作流文件中构建我们的 docker 图像并将其推送到 GHCR,并使这些图像私下或公开可用(我将我的图像公开用于我的示例)。

假设我有以下 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 Server 应用程序(它是一个非常通用的 Dockerfile,适用于所有 ASP.NET Core 应用程序)。

我们不会将其推送到 Docker Hub 或 Azure 容器注册表,而是设置一个 GitHub Actions 工作流文件以将此容器映像推送到 GHCR。

让我们看一下如何向 GHCR 进行身份验证。

使用 GITHUB_TOKEN 向 GHCR 进行身份验证

向 GHCR 进行身份验证的推荐方法是使用GITHUB_TOKENGitHub 为您提供一个令牌,您可以使用该令牌代表 GitHub Actions 进行身份验证。在每个工作流程运行开始时,GitHub 将自动创建一个唯一的GITHUB_TOKEN密码以在工作流程中使用,您可以使用它来进行身份验证。

当 GHCR 处于 Beta 阶段时,您可以使用个人访问令牌 (PAT) 进行身份验证。您需要注意您授予 PAT 令牌的权限。随着GITHUB_TOKEN,这具有将容器图像推送到 GHCR 所需的足够权限

使用个人访问令牌向 GHCR 进行身份验证

我最初使用时确实遇到了一些麻烦GITHUB_TOKEN,所以为了开始,我使用了 PAT 令牌。要创建一个,请转到Settings/Developer settings,单击Personal access tokens/Tokens (classic)然后单击Generate new token要将图像推送到 GHCR,您只需要以下权限:

  • 阅读:包裹
  • 写:包
  • 删除:包

创建 PAT 后,您可以将其作为存储库机密存储在包含 Dockerfile 的 GitHub 存储库中。

在您的 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 工作流

现在我们已经有了向 GHCR 进行身份验证的方法,我们可以创建一个 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

本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;

2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;

3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;

4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;

5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/294476.html

(0)
上一篇 2022年12月2日
下一篇 2022年12月2日

相关推荐

发表回复

登录后才能评论