password
URL
type
status
date
slug
summary
tags
category
icon

如何使用 GitHub Action 部署 Docker 镜像(超详细教程)

随着心理学领域中数据处理(如 fMRI 和 EEG 数据处理)以及计算建模(如贝叶斯建模、认知建模)对计算环境要求的不断提升,建立一个稳定可靠的计算环境变得尤为重要。在这种情况下,Docker 的使用提供了一种有效的解决方案,能够确保环境的一致性和可移植性,避免了本地环境配置繁琐的问题。
然而,Docker 的部署并不总是那么简单,特别是在国内网络环境下,下载镜像和依赖可能会遇到速度慢甚至失败的情况。这时,使用 GitHub Actions 自动化部署 Docker 镜像就显得格外有意义。其优势在于:
  • 无需本地配置:只要代码推送到 GitHub 仓库,GitHub Actions 就会自动完成构建和推送,省去了本地繁杂的操作。
  • 跨平台兼容:通过 Buildx 支持多平台镜像的构建,轻松应对不同硬件架构的需求。
  • 优化网络环境问题:利用 GitHub 的服务器优势,避免了国内网络环境下的镜像拉取困境,大大提升了构建速度和成功率。
一些案例:

1. 准备 Dockerfile 文件

首先,你需要创建一个 Dockerfile,这个文件描述了如何构建你的 Docker 镜像。例如,我们构建一个基于pymc的贝叶斯建模计算环境。用于可以通过如下步骤创建 Dockerfile
  • 其中,USER_NAME 和 USER_EMAIL 可以替换为你自己的任意的账户名和邮箱。

2. 构建并推送 Docker 镜像

我们有两种方法可以构建和推送 Docker 镜像:
  1. 传统使用本地构建并推送
  1. 使用 GitHub Actions 自动构建并推送

2.1 本地构建并推送

首先,确保你已经安装了 Docker 并启用了 Buildx 插件。Buildx 是 Docker 提供的扩展工具,允许我们为多平台构建镜像。
你可以运行以下命令来为不同架构构建镜像:
  • 同样,USER_NAME 和 IMAGE_NAME 替换为你自己的 docker 账户名和任意的docker镜像名称,例如,pyBayesian

2.2 使用 GitHub Actions 自动化构建

GitHub Actions 是一种强大的工具,可以帮助我们自动化构建和推送 Docker 镜像。你可以通过以下步骤来配置 GitHub Actions。

2.2.1 创建 GitHub Actions 工作流

在你的仓库中创建 .github/workflows/docker-image.yml 文件:
然后在 docker-image.yml 中写入以下内容:
name: PyBayesian on: push: branches: - main workflow_dispatch: jobs: buildx: runs-on: ubuntu-latest env: NAME_VERSION: pybayesian:2024v1 steps: - name: Checkout uses: actions/checkout@v4 - name: Docker login uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: push amd64 run: docker buildx build --platform linux/amd64 -t ${{ secrets.DOCKERHUB_USERNAME }}/${{env.NAME_VERSION}}-amd64 -f Dockerfile . --push - name: push arm64 run: docker buildx build --platform linux/arm64 -t ${{ secrets.DOCKERHUB_USERNAME }}/${{env.NAME_VERSION}}-arm64 -f Dockerfile . --push - name: Build the Combined Manifest run: docker buildx build --platform linux/amd64,linux/arm64 -t ${{ secrets.DOCKERHUB_USERNAME }}/${{env.NAME_VERSION}} -f Dockerfile . --push - name: Build the Newest Manifest run: docker buildx build --platform linux/amd64,linux/arm64 -t ${{ secrets.DOCKERHUB_USERNAME }}/pybayesian:latest -f Dockerfile . --push
on: 表示部署构建的触发机制。例如,这段代码会在 main 分支有更新时自动触发镜像构建和推送。同时,workflow_dispatch 运行用户在github上手动进行构建。
在build jobs 中, NAME_VERSION 定义了我们镜像的名称和版本,可以通过${{env.NAME_VERSION}} 进行引用。 docker/login-action@v3 表示我们需要登陆 docker 来将docker镜像上传到自己账户的 dockerhub中。在下一节我们可以看到,如何在 github 中如何配置 docker 的账户和token。 我们构建了四个任务,分别对应构建 amd64,arm64,两个平台混合,以及将两个平台混合镜像标记为新标签的部署任务。

2.2.2 配置 GitHub Secrets

为了确保 GitHub Actions 能安全地登录 Docker Hub,你需要在 GitHub 项目的设置中配置 Secrets。具体步骤如下:
  1. 在dockerhub 中申请个人token。https://app.docker.com/settings/personal-access-tokens
![<<{"width":690,"height":536}>>](data:image/svg+xml;utf8,)
  1. 在GitHub 仓库中设置账户和token
  1. 点击右上角的 **Settings,**在左侧导航栏找到 Secrets and variables,点击 Actions
![<<{"width":690,"height":536}>>](data:image/svg+xml;utf8,)
  1. 添加两个 Secrets:
![<<{"width":690,"height":343}>>](data:image/svg+xml;utf8,)
  • DOCKERHUB_USERNAME:填入你的 Docker Hub 用户名
  • DOCKERHUB_TOKEN:填入刚才获取的tokens
添加完成后,GitHub Actions 将能够通过你的账户登录 Docker Hub,并安全地推送镜像。

3. 最后一步:推送代码并自动部署

现在,一切配置已经完成!每当你将代码推送到 main 分支时,GitHub Actions 会自动帮你构建 Docker 镜像并推送到 Docker Hub 上。
或者进行手动推送:
![<<{"width":690,"height":210}>>](data:image/svg+xml;utf8,)
总结
以上就是如何使用 GitHub Actions 自动化部署 Docker 镜像的完整流程。从准备 Dockerfile,到使用 GitHub Actions 构建并推送 Docker 镜像,整个过程简单而高效。如果你还没尝试过自动化部署,赶紧动手试试吧!希望这篇教程对你有帮助,有问题的话欢迎留言讨论哦~
如果你喜欢这篇文章,别忘了点赞、收藏、分享给更多的小伙伴们哦!