
Docker容器可以跨平台运行,在Ubuntu下构建的镜像,也可以在Debian、Redhat Linux甚至Windows下顺利运行。
但是Docker容器不能跨CPU架构,在x86平台下构建的镜像,无法在arm平台上运行。
利用Github Action,可以用一套代码,同时构建多个CPU架构的Docker镜像,包括x86,x64,armv7,arm64等等,并发布到Docker Hub。在不同的CPU架构平台上,系统会自动下载对应的镜像运行,很好地解决了这个问题。
首先,你要有能够在x86平台上可以正常构建镜像的Docker代码文件,包括Dockerfile。
在github中新建一个Repository,将代码文件同步上传上去。
在Repository中设置Secrets,点击Settings -> Secrets and variables -> Actions,点击 New repository secret, 新建两个secret ,分别为DOCKERHUB_USERNAME和DOCKERHUB_TOKEN,它们的值分别为你在docker hub的账号和密码。
然后在Repositories中新建一个Action Workflow,点击Actions->New workflow->setup a new workflow yourself。
workflow的文件名随意,代码如下:
name: Docker
on:
push:
branches: ['master']
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: linux/arm64,linux/amd64
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v5
with:
platforms: linux/arm64,linux/amd64
push: true
tags: user/app:latest
其中branches是代码所在的branch,现在是master,根据实际情况修改。
user/app是你在docker hub中的用户名和app名字,根据实际情况修改。
现在生成的CPU架构镜像包括arm64和amd64,还可以生成386,riscv64,mips64,armv6,armv7等等CPU架构的镜像。
修改保存workflow后,只要branch内的代码一变动,workflow就会自动运行,构建镜像,并把生成的多个镜像文件自动上传到docker hub。
参考:
https://docs.docker.com/build/ci/github-actions/multi-platform/