破解Docker镜像下载难题

发布于:2025-05-28 ⋅ 阅读:(216) ⋅ 点赞:(0)

       由于网络访问限制,国内开发者访问 GitHub (https://github.com/) 存在明显延迟和稳定性问题。同时,部分国内镜像源近期也频繁出现服务不可用的情况,进一步增加了开发环境配置的难度。

       本文将介绍一种高效稳定的镜像同步方案,利用GitHub Actions + 阿里云容器镜像服务实现无缝下载。

1.镜像同步   通过GitHub Actions工作流自动拉取目标Docker镜像(利用GitHub境外服务器无障碍访问Docker Hub)将镜像自动推送至阿里云容器镜像服务(ACR)的私有仓库 
2.本地拉取
   阿里云ACR拉取镜像到本地开发环境,享受国内高速下载。

一、GitHub Workflow介绍

       GitHub Workflow(也称为 GitHub Actions Workflow)是 GitHub 提供的 自动化 CI/CD(持续集成/持续交付)工具,用于帮助开发者更高效地管理代码库中的开发流程。它通过GitHub Actions实现,允许开发者在代码库中定义和执行自动化任务,例如构建、测试、部署等。GitHub Workflow的核心思想是将开发流程中的重复性任务自动化,从而减少手动操作,提高开发效率和代码质量。

核心概念

  • GitHub Actions:GitHub提供的自动化平台,允许你创建自定义的工作流(Workflow)。它基于YAML文件配置,可以在特定事件(如 push、pull request 等)触发时执行任务。

  • Workflow:一个自动化流程,由一系列任务(Jobs)组成。每个Workflow对应一个 YAML文件,定义了触发条件、执行步骤和依赖关系。

  • Job:Workflow中的一个任务单元,通常包含一组步骤(Steps)。每个Job在一个独立的运行环境中执行,可以是虚拟机或容器。

  • Step:Job中的具体操作,例如运行命令、调用脚本或使用预定义的操作(Actions)。每个 Step 按顺序执行。

  • Event:触发Workflow的事件,例如代码提交(push)、拉取请求(pull request)、问题创建(issue)等。

  • Actions:预定义的可重用代码块,可以完成特定任务,例如构建代码、运行测试、部署应用等。GitHub 提供了官方Actions,也支持自定义Actions。

二、设置Github仓库workflow

1.新建一个github仓库

图片

2.设置Actions secrets

       设置需要登录阿里云的用户密码

图片

图片

图片

3.设置同步镜像仓库的脚本

       可以直接在github上面编辑,也可以git clone git@github.com:liuxing141/image_sync.git到本地,然后编辑。

图片

具体脚本如下sync.sh:

TARGET_REGISTRY: 阿里云容器镜像服务的Registry实例

TARGET_NAMESPACE: 阿里云容器镜像服务的命名空间

IMAGES: 要同步的镜像(本文中以Dify 1.3.0的几个镜像为例)

#!/bin/bash

set -eux
TARGET_REGISTRY=registry.cn-hangzhou.aliyuncs.com
TARGET_NAMESPACE=liuxing666
IMAGES="langgenius/dify-api:1.3.0 langgenius/dify-web:1.3.0"


for image in${IMAGES} ; do
    #拉取镜像
    docker pull $image
    name=`echo$image | cut -d '/' -f2`
    tag=`echo${name} | cut -d ':' -f2`
    targetFullName=${TARGET_REGISTRY}/${TARGET_NAMESPACE}/${name}
    #打阿里云的tag
    docker tag ${image}${targetFullName}
    #推送到阿里云
    docker push ${targetFullName}

done

4.设置仓库workflow

图片

创建.github\workflows\sync.yaml

图片

具体代码如下sync.yaml:

name: Sync Docker Image
on:
push:
    branches: [ "main" ]
pull_request:
    branches: [ "main" ]

workflow_dispatch:
jobs:
  # This workflow contains a single job called "build"
build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: login to docker registry
        run: docker login -u "${{ secrets.DOCKER_USERNAME }}" -p "${{ secrets.DOCKER_PASSWORD }}" registry.cn-hangzhou.aliyuncs.com
      - name: execute sync.sh
        run: |
         bash "${{ github.workspace }}/sync.sh"

三、测试

       点击actions查看日志是否运行成功

图片

       成功后登录阿里云查看是否存在下载的镜像

图片

       发现已经有啦,然后自己就可以通过阿里云下载需要的镜像了。

# 登录
docker login --username=you_username registry.cn-hangzhou.aliyuncs.com
# 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/your_namespace/dify-api:1.3.0
# 创建本地tag
docker tag registry.cn-hangzhou.aliyuncs.com/your_namespace/dify-api:1.3.0 langgenius/dify-api:1.3.0


网站公告

今日签到

点亮在社区的每一天
去签到