使用 GitHub Actions 自动化 Docker 工作流程,只需几个简单的步骤即可启动并运行。
设置 GitHub Actions
创建一个工作流程文件,它是一个简单的 YAML 文件,位于repo 的 .github/workflows/ 目录下。
登录github,假定已经有包含Dockerfile和相应生成镜像文件的repo,点击add file-create new file,命名为.github/workflows/docker.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
| name: Docker Workflow
on: push: branches: - main
jobs: build: runs-on: ubuntu-latest
steps: - name: Check out code uses: actions/checkout@v3
- name: Set up Docker Buildx uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and Push Docker Image uses: docker/build-push-action@v4 with: context: . push: true tags: | ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }} ${{ secrets.DOCKER_USERNAME }}/myapp:latest
|
生成镜像并提交到dockerhub
主要工作流程是把repo中的Dockerfile生成镜像并上传到docker.io,由于要使用dockerhub登录帐号和密码,为了不在yml中明文显示,需在repo-settings-secrets and variables-actions页,点击new repo secret,创建DOCKER_USRRNAME和DOCKER_PASSWORD两个变量,内容分别是帐号和密码,以便在yml中使用。

点击repo-actions,新建的yml已经开始执行,

如果有错,会提示,点进去有提示出错原因。本文中的yml内容就是把出错提示交给deepseek一步一步修改而来。


最终成功执行并上传到docker.io。

提交到ghcr.io
建立ghcr.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
| name: Docker Workflow (GHCR)
on: push: branches: - main
permissions: contents: read packages: write
jobs: build: runs-on: ubuntu-latest
steps: - name: Check out code uses: actions/checkout@v3
- name: Set up Docker Buildx uses: docker/setup-buildx-action@v2
- name: Login to GHCR uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and Push uses: docker/build-push-action@v4 with: context: . push: true tags: | ghcr.io/${{ github.repository_owner }}/myapp:${{ github.sha }} ghcr.io/${{ github.repository_owner }}/myapp:latest
|
文件中的注释会引起执行错误,因此没有注释(注释被当成语句导致出错,走了不少弯路)。
此处的帐号是自动获取的,密码是自动生成的token,不需要手动生成。
把生成的sha当成tag其实并不方便,太长了。
提交的镜像在用户名-pactkages处。
