注: GitHub 托管的运行器目前在 GitHub Enterprise Server 上不受支持。 您可以在 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
。
注:您的 GitHub Enterprise Server 实例 上的 GitHub Actions 对 GitHub.com 或 GitHub Marketplace 上的操作具有有限的访问权限。 更多信息请参阅“自托管运行器与 GitHub 之间的通信”。
将映像发布到 Docker Hub
每次在 GitHub 上创建新版本时,都可以触发工作流程来发布映像。 以下示例中的工作流程在活动类型为 created
的 release
事件触发时运行。 有关 release
事件的更多信息,请参阅“触发工作流程的事件”。
在下面的示例工作流程中,我们使用 Docker build-push-action
操作构建 Docker 映像,如果构建成功,则将构建映像推送到 Docker Hub。
要推送到 Docker Hub,您需要有一个 Docker Hub 帐户,并创建一个 Docker Hub 仓库。 更多信息请参阅 Docker 文档中的“将 Docker 容器映像推送到 Docker Hub”。
Docker Hub 需要的 build-push-action
选项包括:
username
和password
:这是您的 Docker Hub 用户名和密码。 我们建议将 Docker Hub 用户名和密码存储为机密,使它们不会公开在工作流程文件中。 更多信息请参阅“创建和使用加密密码”。repository
:DOCKER-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 上创建新版本时,都可以触发工作流程来发布映像。 以下示例中的工作流程在活动类型为 created
的 release
事件触发时运行。 有关 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 标记。