在本地推送 Docker 镜像至 Docker Hub 时,经常遇到超时问题。为了避免手动操作带来的不便,决定通过 GitHub Actions 实现自动化工作流,轻松将 Docker 镜像推送至 Docker Hub。接下来,我将详细介绍如何配置并使用 GitHub 工作流实现这一过程。
先来说说 Spring Boot项目打包 成 Docker 镜像,并上传到仓库的流程
Spring Boot
项目: 传送门maven
命令 mvn -B clean package --file pom.xml
打包 jar
文件docker build
构建 docker
镜像docker push
推送 docker
镜像为了将镜像推送到 Docker Hub,我们需要进行 Docker Hub 的认证。以下是配置步骤:
在项目根目录下创建 .github/workflows
文件夹。
docker-image.yml
创建一个名为 docker-image.yml
的 GitHub Actions 配置文件,内容如下:
name: docker-build-push
on:
push:
branches:
# 监听推送到 master 分支
- "master"
# 监听以 v 开头的标签
tags:
- 'v*'
pull_request:
# 监听针对 master 分支的拉取请求
branches:
- "master"
jobs:
build:
# 使用最新的 Ubuntu 环境
runs-on: ubuntu-latest
env:
# 默认为 Docker Hub,如果使用其他 Docker 注册表,可以修改
REGISTRY: 'docker.io'
# 使用 GitHub 仓库名作为镜像名称,格式为 < 账户>/< 仓库>
# IMAGE_NAME: ${{ github.generator }}
IMAGE_NAME: mobaijun/generator
steps:
# 检出代码
- name: Checkout code
# 检出代码,默认会检出整个仓库
uses: actions/checkout@v3
# 设置 JDK 11
- name: Set up JDK 11
# 设置 Java 版本为 11
uses: actions/setup-java@v3
with:
# Java 版本设置为 11
java-version: '11'
# 使用 Temurin 的 JDK 发行版
distribution: 'temurin'
# 启用 Maven 缓存,提升构建速度
cache: maven
# 使用 Maven 构建项目
- name: Build with Maven
# 使用 Maven 清理并构建项目
run: mvn -B clean package --file pom.xml
# 构建 Docker 镜像
- name: Build Docker image
# 根据 Dockerfile 构建镜像,并标记为 latest
run: docker build -f ./ballcat-codegen-backend/src/main/resources/docker/Dockerfile . --tag ${{ env.IMAGE_NAME }}:latest
# 登录到 Docker Hub(或其他 Docker 注册表)
- name: Log in to Docker Hub
# 仅在非 PR 事件中执行登录
if: github.event_name != 'pull_request'
# 使用 Docker 登录动作
uses: docker/login-action@v2
with:
# 使用自定义的注册表(默认为 Docker Hub)
registry: ${{ env.REGISTRY }}
# 从 GitHub Secrets 获取 Docker 用户名
username: ${{ secrets.DOCKER_USERNAME }}
# 从 GitHub Secrets 获取 Docker 密码
password: ${{ secrets.DOCKER_PASSWORD }}
# 提取 Docker 元数据(标签和标签)
- name: Extract Docker metadata
id: meta
# 使用 Docker metadata-action 提取元数据
uses: docker/metadata-action@v4
with:
# 使用定义的镜像名称
images: ${{ env.IMAGE_NAME }}
tags: |
# 设置最新标签
type=raw,value=latest,enable={{is_default_branch}}
# 设置基于标签的标签
type=ref,enable=true,priority=600,prefix=,suffix=,event=tag
# 构建并推送 Docker 镜像
- name: Build and push Docker image
# 使用 Docker build-push-action 来构建和推送镜像
uses: docker/build-push-action@v3
with:
# Docker 构建上下文为当前目录
context: .
# Dockerfile 路径
file: ./ballcat-codegen-backend/src/main/resources/docker/Dockerfile
# 如果不是 PR,推送镜像
push: ${{ github.event_name != 'pull_request' }}
# 使用提取的标签推送镜像
tags: ${{ steps.meta.outputs.tags }}
# 使用提取的标签作为镜像元数据
labels: ${{ steps.meta.outputs.labels }}
master
分支 时自动触发工作流。v
开头的标签 时触发版本发布。master
分支 时,自动触发构建和测试过程。在推送镜像之前,我们需要先登录到 Docker Hub。通过 GitHub Secrets 保护 Docker Hub 的认证信息,确保账号密码安全。
当你成功配置并推送到 GitHub 后,每次提交或标签推送都会自动触发工作流,并将构建好的 Docker 镜像上传至 Docker Hub。你可以通过以下图片看到最终的工作流执行结果:
通过这种自动化方式,你可以节省大量的时间和精力,同时确保 Docker 镜像的构建和推送过程完全可重复。快来体验 GitHub Actions 的强大功能吧!
利用 GitHub Actions 自动构建项目的 docker 镜像并发布到 DockerHub | 二丫讲梵
巧用 Github Action 自动推送 docker 镜像,白 piao github 服务器资源,还省时又省力_github 系统上传 hub.docker-CSDN 博客