使用github action自动构建镜像并推送到dockerhub

使用github action自动构建镜像并推送到dockerhub

dockerhub 获取 token

登录 dockerhub,获取token,如下

github-action-1

将 dockerhub token 添加到 github repo 中

github-action-2

github 仓库添加 action

github 代码仓库页面中选择 Actions

点击 Docker image Action 的 Configure

github-action-3

编辑action配置文件.github/workflows/docker-image.yml 内容如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
name: Docker Image CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    -
      name: Checkout
      uses: actions/checkout@v3
    -
      name: Login to Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}
      - 
      name: Set up QEMU
      uses: docker/setup-qemu-action@v2
      -
      name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v2
    -
      name: Build and push
      uses: docker/build-push-action@v4
      with:
        context: .
        file: ./Dockerfile
        platforms: |
            linux/amd64
            linux/arm64
        push: true
        tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.GITHUB_REPOSITORY_NAME_PART }}:latest

buildx 依赖 qemu

以下对该文件内容分别进行解释:

  • name: 流程名,定义了这个流程的名称,可以与配置文件名不同。只要与其他流程配置文件中的流程名不同即可。
  • on: 触发条件,定义了在何种条件下触发该流程。这里定义的是在 main 分支提交时触发该流程。
  • env: 环境变量,定义了静态可公开环境变量,一般来说可以将应用的名称、镜像的名称写在这个部分。
  • jobs: 任务,定义了流程所需要执行的各项任务,可以是一个或多个。
    • 这里定义了 5 个任务,从前到后分别是
    • 检出代码
    • 登录到github,其中 ${{ secrets.DOCKERHUB_USERNAME }} 和 ${{ secrets.DOCKERHUB_TOKEN }} 分别是 dockerhub 的用户名和token,需要在dockerhub生成,然后配置在仓库-Settings-Security-Securets and variables - Actions
    • 安装 qemu (buildx 依赖 qemu)
    • 安装 buildx,支持构建更多架构的惊喜
    • 构建docker镜像,并推送到dockerhub仓库
  • file: 指定在项目仓库中的Dockerfile文件位置。
  • platforms:指定构建镜像所需要兼容支持的平台架构
  • tags: 将要构建的镜像标签,这里每次构建latest镜像,${{ env.GITHUB_REPOSITORY_NAME_PART }}表示仓库名

注:docker/setup-qemu-action@v2 对应的就是 https://github.com/docker/setup-qemu-action 分支v2

参考:
https://lisz.me/tech/docker/github-action.html
http://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html
https://dmesg.app/github-actions-docker-image.html
https://juejin.cn/post/7088959261870391332

Built with Hugo
主题 StackJimmy 设计