我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

发布 Docker 映像

您可以将 Docker 映像发布到注册表,例如 Docker Hub 或 GitHub Packages,作为持续集成 (CI) 工作流程的一部分。

GitHub Actions 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud 和 GitHub One。 GitHub Actions 不适用于使用旧版按仓库计划的帐户所拥有的私有仓库。 更多信息请参阅“GitHub 的产品”。

本文内容

简介

本指南介绍如何创建执行 Docker 构建的工作流程,然后将 Docker 映像发布到 Docker Hub 或 GitHub Packages。 通过单个工作流程,您可以将映像发布到单一注册表或多个注册表。

注意:如果要推送到另一个第三方 Docker 注册表,则“发布映像到 GitHub Packages”部分可作为一个很好的模板。

基本要求

建议基本了解工作流程配置选项和如何创建工作流程文件。 更多信息请参阅“Learn GitHub Actions”。

您可能还发现基本了解以下内容是有帮助的:

关于映像配置

本指南假定您对存储在 GitHub 仓库的 Docker 映像有完整的定义。 例如,仓库必须包含 Dockerfile 以及执行 Docker 构建所需的任何其他文件才可创建映像。

在本指南中,我们将使用 Docker build-push-action 操作来构建 Docker 映像并将其推送到一个或多个 Docker 注册表。 更多信息请参阅 build-push-action

将映像发布到 Docker Hub

每次在 GitHub 上创建新版本时,都可以触发工作流程来发布映像。 以下示例中的工作流程在活动类型为 createdrelease 事件触发时运行。 有关 release 事件的更多信息,请参阅“触发工作流程的事件”。

在下面的示例工作流程中,我们使用 Docker build-push-action 操作构建 Docker 映像,如果构建成功,则将构建映像推送到 Docker Hub。

要推送到 Docker Hub,您需要有一个 Docker Hub 帐户,并创建一个 Docker Hub 仓库。 更多信息请参阅 Docker 文档中的“在 Docker Hub 上共享映像”。

Docker Hub 需要的 build-push-action 选项包括:

  • usernamepassword:这是您的 Docker Hub 用户名和密码。 建议将 Docker Hub 用户名和密码在 GitHub 仓库中存储为加密密码,以免它们暴露在工作流程文件中。 更多信息请参阅“创建和使用加密密码”。
  • repositoryDOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY 格式的 Docker Hub 仓库。
name: Publish Docker image
on:
  release:
    types: [published]
jobs:
  push_to_registry:
    name: Push Docker image to Docker Hub
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
      - name: Push to Docker Hub
        uses: docker/build-push-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
          repository: my-docker-hub-namespace/my-docker-hub-repository
          tag_with_ref: true

上面的工作流程检出 GitHub 仓库,并且使用 build-push-action 操作构建并推送 Docker 映像。 它设置 build-pow-action 选项 tag_with_ref 自动使用工作流程事件的 Git 引用标记构建的 Docker 映像。 此工作流程在发布 GitHub 版本时触发,因此该引用将是该版本的 Git 标记。

发布映像到 GitHub Packages

每次在 GitHub 上创建新版本时,都可以触发工作流程来发布映像。 以下示例中的工作流程在活动类型为 createdrelease 事件触发时运行。 有关 release 事件的更多信息,请参阅“触发工作流程的事件”。

在下面的示例工作流程中,我们使用 Docker build-push-action 操作构建 Docker 映像,如果构建成功,则将构建映像推送到 GitHub Packages。

GitHub Packages 需要的 build-push-action 选项包括:

  • username:您可以使用 ${{ github.actor }} 上下文自动使用触发工作流程运行的用户的用户名。 更多信息请参阅“GitHub 操作的上下文和表达式语法”。
  • password:您可以使用自动生成的 GITHUB_TOKEN 密码作为密码。 更多信息请参阅“使用 GITHUB_TOKEN 验证身份”。
  • registry:必须设置为 docker.pkg.github.com
  • repository:必须以 OWNER/REPOSITORY/IMAGE_NAME 格式设置。 例如,对于 http://github.com/octo-org/octo-repo 上名为 octo-image stored on GitHub 的映像,repository 选项应设置为 octo-org/octo-repo/octo-image
name: Publish Docker image
on:
  release:
    types: [published]
jobs:
  push_to_registry:
    name: Push Docker image to GitHub Packages
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
      - name: Push to GitHub Packages
        uses: docker/build-push-action@v1
        with:
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
          registry: docker.pkg.github.com
          repository: my-org/my-repo/my-image
          tag_with_ref: true

上面的工作流程检出 GitHub 仓库,并且使用 build-push-action 操作构建并推送 Docker 映像。 它设置 build-pow-action 选项 tag_with_ref 自动使用工作流程事件的 Git 引用标记构建的 Docker 映像。 此工作流程在发布 GitHub 版本时触发,因此该引用将是该版本的 Git 标记。

发布映像到 Docker Hub 和 GitHub Packages

在单一工作流程中,您可以对每个注册表使用 build-push-action 操作,以将 Docker 映像发布到多个注册表。

下面的示例工作流程使用前面章节中的 build-push-action 步骤(“发布映像到 Docker Hub”和“发布映像到 GitHub Packages”)来创建同时推送到两个注册表的单一工作流程。

name: Publish Docker image
on:
  release:
    types: [published]
jobs:
  push_to_registries:
    name: Push Docker image to multiple registries
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
      - name: Push to Docker Hub
        uses: docker/build-push-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
          repository: my-docker-hub-namespace/my-docker-hub-repository
          tag_with_ref: true
      - name: Push to GitHub Packages
        uses: docker/build-push-action@v1
        with:
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
          registry: docker.pkg.github.com
          repository: my-org/my-repo/my-image
          tag_with_ref: true

上面的工作流程检出 GitHub 仓库,并且使用两次 build-push-action 操作构建并推送 Docker 映像到 Docker Hub 和 GitHub Packages。 对于这两个步骤, 它设置 build-pow-action 选项 tag_with_ref 自动使用工作流程事件的 Git 引用标记构建的 Docker 映像。 此工作流程在发布 GitHub 版本时触发,因此对两个注册表的引用将是该版本的 Git 标记。

此文档对您有帮助吗?

Privacy policy

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。