基于GitHubActions同步Docker镜像实践

a5010e258cfe7eb60bfadcf16390f844.png

GitHub Actions简介

GitHub Actions 是 GitHub 推出的一款强大的持续集成和持续部署(CI/CD)工具。它可以帮助开发者在 GitHub 上自动化软件开发生命周期中的各种任务,从而提高开发效率和交付质量。

GitHub Actions 的核心思想是基于事件驱动的工作流(Workflow)。开发者可以定义各种事件(如代码提交、拉取请求、计划任务等)触发相应的工作流,在工作流中执行一系列的操作和动作。这些操作包括编译、测试、打包、部署等各种软件开发相关的任务。

工作流的定义采用 YAML 格式,非常简洁易读。开发者只需要在代码仓库中创建一个 .github/workflows 目录,并在其中添加 YAML 格式的工作流定义文件即可。这些文件描述了在特定事件发生时应该执行哪些操作步骤。

GitHub Actions 提供了大量的现成动作(Actions),开发者可以直接拿来使用。这些动作封装了各种常见的构建、测试、部署等功能,涵盖了从 Java、Python、Node.js 到 Docker、AWS 等各种技术栈。开发者也可以自定义动作,实现更复杂的功能。

除了灵活的工作流定义和丰富的动作库,GitHub Actions 还提供了方便的日志查看、状态检查等功能,帮助开发者更好地监控和管理自动化流程。同时,它还支持矩阵构建、缓存依赖、secrets 管理等高级特性,满足复杂场景下的需求。

GitHub Actions 的另一大优势在于它与 GitHub 本身深度集成。开发者无需额外配置第三方 CI/CD 工具,只需利用熟悉的 GitHub 环境即可实现自动化。这不仅简化了工具链,也使得开发、构建、部署的全流程可以无缝衔接。

总的来说,GitHub Actions 为开发者提供了一个强大、灵活、集成度高的 CI/CD 解决方案。它不仅能够帮助开发者提高交付效率,还能促进代码仓库、自动化流程和部署环境的良性互动,为软件开发注入新的活力。随着 GitHub Actions 的持续发展和完善,相信它将在未来成为业界领先的 CI/CD 工具之一。

Docker镜像同步

将外网的镜像同步到国内的镜像仓库是一个常见的需求,特别是对于一些需要访问国外资源的企业和开发者来说。这样可以提高镜像拉取的速度,同时也能规避因网络问题导致的镜像拉取失败。下面我将详细介绍如何实现这一同步过程:

  1. 选择合适的国内镜像仓库服务商

  • 国内常见的镜像仓库服务商有阿里云容器镜像服务、腾讯云镜像仓库、华为云镜像仓库等。选择时可以考虑服务质量、价格、使用便利性等因素。

创建国内镜像仓库

  • 登录选定的镜像仓库服务商平台,创建一个新的镜像仓库。这个镜像仓库将作为同步目标仓库,用于存储从外网同步过来的镜像。

配置镜像同步任务

  • 大多数镜像仓库服务商都提供了镜像同步的功能。在服务商的控制台上,找到镜像同步的相关功能,配置同步任务的源镜像仓库(通常是外网仓库)和目标镜像仓库(刚刚创建的国内仓库)。

  • 同时可以设置同步的镜像名称、标签、同步频率等参数,以满足业务需求。

触发首次同步

  • 配置好同步任务后,通常需要手动触发首次同步,之后就可以设置为自动同步。

  • 同步过程中,服务商的控制台会实时显示同步进度和状态,方便监控。

验证同步结果

  • 同步完成后,登录国内镜像仓库检查目标镜像是否已经同步成功。可以尝试拉取镜像并运行容器,验证镜像的完整性。

调整同步策略

  • 根据实际使用情况,可以适当调整同步的镜像名称、标签、频率等参数,以优化同步效果。比如可以同步常用的基础镜像,而对于变更频率较高的业务镜像可以缩短同步间隔。

通过以上步骤,就可以将外网的镜像资源同步到国内的镜像仓库了。这样不仅可以加快镜像拉取速度,提高应用部署效率,还能规避因网络问题导致的镜像拉取失败。对于需要访问国外资源的企业和开发者来说,这是一个非常有价值的解决方案。

GitHub Actions同步镜像

使用 GitHub Actions 可以非常方便地实现 Docker 镜像的同步。下面我们来详细介绍一下具体的配置步骤:

  1. 在 GitHub 仓库中创建一个新的工作流文件:

  • .github/workflows 目录下创建一个新的 YAML 文件,例如 docker-sync.yml

在工作流文件中添加以下内容:

name: Docker Image Sync

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:

  sync:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    
    - name: Set up QEMU
      uses: docker/setup-qemu-action@v1
    
    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1
      
    - name: Login to Docker Hub
      uses: docker/login-action@v1
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}
        
    - name: Sync Docker Image
      run: |
        docker pull <source-image-name>:<source-tag>
        docker tag <source-image-name>:<source-tag> <target-image-name>:<target-tag>
        docker push <target-image-name>:<target-tag>

这个工作流定义了在 main 分支上的 pushpull_request 事件触发时执行同步任务。

配置 Docker 登录凭证:

  • 在 GitHub 仓库的 Settings > Secrets 页面添加 DOCKER_USERNAMEDOCKER_PASSWORD 两个 secret,分别存储 Docker 镜像仓库的用户名和密码。

配置同步源和目标镜像:

  • Sync Docker Image 步骤中,将 <source-image-name><source-tag> 替换为源镜像的名称和标签,将 <target-image-name><target-tag> 替换为目标镜像的名称和标签。

提交工作流文件并推送到 GitHub 仓库:

  • 保存工作流文件并推送到 GitHub 仓库的 main 分支。

完成以上步骤后,每次 main 分支上有 pushpull_request 事件发生时,GitHub Actions 就会自动触发镜像同步任务。

需要注意的是,在实际使用时,您需要根据实际情况修改镜像名称、标签、Docker 仓库等相关信息。同时,如果需要同步多个镜像,可以在工作流中添加多个 Sync Docker Image 步骤。

通过使用 GitHub Actions 实现 Docker 镜像同步,您可以轻松地将外网镜像同步到国内仓库,提高应用部署的效率和可靠性。如果您有任何其他问题,欢迎随时与我交流。

我的实践过程

新建了一个GitHub仓库用于个人同步镜像到腾讯云TCR。
地址: https://github.com/zeyangli/docker_proxy

注意:GitHub Actions语法有很多,目前很简单手动修改ci.yaml会自动触发action pipeline.


创建目标镜像仓库

ccr.ccs.tencentyun.com/devopsvip/inbound-agent
d31f2caa7a202d4674a40fafe16bc804.png

添加仓库Secrets

保存目标镜像仓库的认证信息。
c033ec196edc4060a9ce1a18d659c1ad.png

CI文件(.github/workflow/ci.yaml)

# This is a basic workflow to help you get started with Actions
#VERSION 2
#renew

name: Docker image sync to tencent
env:
  REGISTRY_URL: "ccr.ccs.tencentyun.com/devopsvip"
on:
  push:
    paths:
      - '.github/workflows/**'

jobs:
  build:
    runs-on: ubuntu-20.04
    steps:
    - name: Push Docker images
      run: |
        docker pull jenkins/inbound-agent:latest-jdk17 
        docker tag jenkins/inbound-agent:latest-jdk17 ${REGISTRY_URL}/inbound-agent:latest-jdk17
        docker login -u ${{ secrets.TENCENTDOCKER_USER}} -p ${{ secrets.TENCENTDOCKER_PASSWD}} ${REGISTRY_URL}
        docker push ${REGISTRY_URL}/inbound-agent:latest-jdk17

效果验证

9c025853d788e7cb6c1ed9c58bc61cdf.png
image.png
f70d380424e83c91d3c309f1a36e1570.png
image.png
### 如何在 GitHub 上使用 Docker 镜像 #### 创建 GitHub 存储库用于构建 Docker 镜像 为了能够在 GitHub 上利用 Docker 镜像,首先需要创建一个新的 GitHub 存储库来保存构建镜像所需的资源。这个存储库至少应该包含一个名为 `Dockerfile` 的文件,在该文件中定义了要构建的 Docker 映像的具体配置[^3]。 ```dockerfile FROM node:14-alpine WORKDIR /app COPY . . RUN npm install CMD ["npm", "start"] ``` 上述是一个简单的 Dockerfile 示例,适用于基于 Node.js 应用程序的环境设置。 #### 设置 GitHub Actions 自动化流程 通过 GitHub Actions 可以实现自动化地拉取、构建以及推送 Docker 镜像容器注册表(如 Docker Hub 或者私有的 GitHub Packages)。这通常涉及到编写 `.github/workflows/` 文件夹下的 YAML 工作流文件,指定触发条件和执行的任务序列。 ```yaml name: Build and Push Docker Image on: push: branches: - main jobs: build-and-push-image: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Log in to the Container registry run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin - name: Build the Docker image run: docker build . --tag my-docker-image:${{ github.sha }} - name: Tag & Push Docker image run: | docker tag my-docker-image:${{ github.sha }} my-docker-image:latest docker push my-docker-image:latest ``` 这段工作流脚本会在每次推送到默认分支时自动运行,完成从检出代码、登录容器注册表、构建镜像到最后上传的过程。 #### 打标签并提交至 GitHub 仓库 当完成了特定版本的功能开发之后,可以通过给当前状态打上 Git 标签的方式标记重要里程碑,并将这些标签同步到远程仓库中去。命令如下所示: ```bash git tag v1.0.0 git push origin v1.0.0 ``` 这样做不仅有助于追踪不同版本之间的变更历史,同时也方便后续回滚或部署指定版本的应用实例[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值