> 技术文档 > 利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载


利用GitHub Action彻底解决Docker镜像无法下载

  • 1. 前言
  • 2. GitHub Action
  • 3. 开干
    • 3.1 阿里云配置
      • 3.1.1 创建阿里云命名空间
      • 3.1.2 设置访问凭证
    • 3.2 Github
      • 3.2.1 建仓库
      • 3.2.2 脚本
        • 3.2.2.1 脚本1
        • 3.2.2.2 脚本2
        • 3.2.2.3 脚本3
        • 3.2.2.4 免密
    • 3.3 测试构建
  • 4. 后续

1. 前言

平时工作或学习中Docker和k8s已经是必备的技能和工具了.但很多时候由于某些原因无法顺畅的从Docker Hub上下载镜像.特别是一些比较急的时候,越是急越是拉不下来.
之前也写过一篇\"利用阿里云下载国外镜像,国内顺畅下载k8s.gcr.io的镜像\",但由于步骤比较多,每次下载不同的镜像都需要通过大量的手工步骤才能完成镜像的拉取.
本文介绍的方法彻底解决以上问题,只需要2步就能完成镜像的下载.

  1. 修改github仓库中的images.txt文件,将镜像以每行一个的方式保存
  2. 稍作等待后,从阿里云镜像仓库下载镜像

那这些是怎么实现的? 这里就不得不提到Github Action了.

2. GitHub Action

不敢兴趣的可以直接跳转到第三节,开干
GitHub Actions 是一个持续集成和持续交付 (CI/CD) 平台,允许您自动化构建、测试和部署管道。您可以创建工作流程来构建和测试对存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。
GitHub Actions 不仅仅是 DevOps,还允许您在存储库中发生其他事件时运行工作流程。例如,您可以运行工作流程,以便在有人在您的仓库中创建新议题时自动添加相应的标签。
GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行您的工作流程,或者您可以在自己的数据中心或云基础设施中托管自己的自托管运行器。
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载

3. 开干

3.1 阿里云配置

3.1.1 创建阿里云命名空间

注意!!!, 我使用的是阿里云上海,各位如果是其他地域的话记得将url改为对应地域,之后的脚本及文章中不再提醒.
打开以下url,创建命名空间.(阿里云个人版ACR是免费的)

https://cr.console.aliyun.com/cn-shanghai/instance/namespaces

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
名字自己取,反正符合规则且不能冲突就可以
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载

3.1.2 设置访问凭证

再次提醒,不同地域换不同地址
访问url

https://cr.console.aliyun.com/cn-shanghai/instance/credentials

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
输入2次密码后选择确定.密码小本本记录下来后面还要用.
这里假设你的用户名密码如下:
假的别去试,肯定不行的,你替换成自己的记录下来.

用户名: zhangsan密码: zhang3333 

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
创建完了你可以尝试用这个命令验证一下
–username 后面跟用户名
-p 后面跟密码

docker login --username=zhangsan -p zhang3333 registry.cn-shanghai.aliyuncs.com

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
当你看到Login Succeeded 那么到这里都是成功的.
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载

3.2 Github

3.2.1 建仓库

打开以下url,创建仓库

https://github.com/new

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载

3.2.2 脚本

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载

3.2.2.1 脚本1

将以下内容贴入文件中,并提交
这里注意TARGET_NAMESPACE=后的内容改成你的名称空间名字

#!/bin/bashset -euxTARGET_REGISTRY=registry.cn-shanghai.aliyuncs.comTARGET_NAMESPACE=改成你的名称空间名字while IFS= read -r image || [[ -n \"$image\" ]]; do # 跳过空行和注释行(以#开头) [[ -z \"$image\" || \"$image\" == \\#* ]] && continue # 拉取镜像 docker pull \"$image\" # 分割镜像名称和tag if [[ \"$image\" == *\":\"* ]]; then name=\"${image%:*}\" tag=\"${image##*:}\" else name=\"$image\" tag=\"latest\" fi # 处理带路径的镜像名(虽然你的例子中没有) if [[ \"$name\" == *\"/\"* ]]; then # 提取最后一部分作为镜像名称 image_name=\"${name##*/}\" else image_name=\"$name\" fi targetFullName=\"${TARGET_REGISTRY}/${TARGET_NAMESPACE}/${image_name}\" # 打tag并推送 docker tag \"$image\" \"${targetFullName}:${tag}\" docker push \"${targetFullName}:${tag}\"done < images.txt

文件名需要是.sh结尾
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载

3.2.2.2 脚本2

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
这里就放你想要的镜像地址,每个一行.

nginx:1.21nginx:1.18pytorch/pytorch:2.6.0-cuda12.6-cudnn9-devellanggenius/dify-api:1.2.0

文件名为上一个文件末尾一行的 < 后面的文件名

done < images.txt

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载

3.2.2.3 脚本3

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
贴入代码

name: Sync Docker Imagerun-name: ${{ github.actor }} is running GitHub Actionson: [push]jobs: Sync-Docker-Image-Actions: runs-on: ubuntu-latest steps: - name: Check out repository code uses: actions/checkout@v4 - name: login to docker registry run: | docker login -u \"${{ secrets.DOCKER_USERNAME }}\" -p \"${{ secrets.DOCKER_PASSWORD }}\" registry.cn-shanghai.aliyuncs.com - name: execute syn.sh run: | bash \"${{ github.workspace }}/syn.sh\" - run: echo \"This job\'s status is ${{ job.status }}\"

这里的文件名为.github/workflows/syn.yaml

不清楚含义的就在文件名处依次输入

.github/workflows/syn.yaml

然后提交

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载

3.2.2.4 免密

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
创建秘钥
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
掏出小本本,找到刚才的用户名
name里面是DOCKER_USERNAME,secret里面填自己的用户名,别填张三的
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
再次填入密码
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
DOCKER_PASSWORD
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载

3.3 测试构建

其实是应该先做免密再写脚本的.但其实也一样.无所谓,我们再跑一次就可以了.

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
点击Re-run jobs , Re-run all jobs
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载

利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
等待结束
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
切刀阿里云ACR查看镜像
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
确认镜像版本
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载
至此利用GitHub Action彻底解决Docker镜像无法下载完成.
我们可以直接通过阿里云下载镜像了.

关注公众号:Linux云计算实战,回复暗号000,领取免费学习资料或题库

4. 后续

将项目放到了Idea上之后,每次直接在idea上修改然后提交代码.然后直接加上阿里云的前缀就能直接下载使用了.
利用GitHub Action彻底解决Docker镜像无法下载_github docker镜像下载