使用GitHub Actions自动化docker并上传


目录
  1. 1. 设置 GitHub Actions
  2. 2. 生成镜像并提交到dockerhub
  3. 3. 提交到ghcr.io

使用 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 # 升级到 v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2 # 升级到 v2

- name: Login to Docker Hub
uses: docker/login-action@v2 # 升级到 v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build and Push Docker Image
uses: docker/build-push-action@v4 # 升级到 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处。

Top, Home