使用GitHub Actions自动化docker并上传

• 4 分钟阅读 • docker

使用 GitHub Actions 自动化 Docker 工作流程,只需几个简单的步骤即可启动并运行。

设置 GitHub Actions

创建一个工作流程文件,它是一个简单的 YAML 文件,位于repo 的 .github/workflows/ 目录下。
登录github,假定已经有包含Dockerfile和相应生成镜像文件的repo,点击add file-create new file,命名为.github/workflows/docker.yml,文件内容如下:

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,内容如下:

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处。

文章标签: docker

上一篇 : github actions生成支持多种机器架构的镜像
下一篇 : 上传镜像到github镜像仓库
留言
阅读进度 0%