文章

国内无法访问海外 Docker 镜像进阶优化方案

见字如面,与大家分享实践中的经验与思考。

之前写过一篇文章:国内无法拉取 Docker 镜像解决方案,通过 Github Actions 将镜像 mirror 到阿里云私有仓库中。

虽然解决了问题,但是每次需要修改 github 仓库中的 images.txt,然后再触发 Github Actions,不支持本地或者服务器执行。

工具介绍

这个工具用于将 Docker 镜像从公共仓库拉取并推送到阿里云容器镜像服务。支持本地运行和 GitHub Actions 集成。

主要功能

  • 支持从公共仓库拉取 Docker 镜像并推送到阿里云容器镜像服务

  • 支持处理重名镜像,自动添加命名空间前缀

  • 支持指定平台架构的镜像

  • 支持本地运行和 GitHub Actions 集成

  • 提供 Bash 脚本和 Python 两种实现方式

💡注意:

克隆代码可以直接执行,需要本地或者服务器支持魔法访问网络!没有的话,还是使用 Github Actions 执行吧。

工具使用

https://github.com/flyeric0212/docker-image-mirror

image-20250318下午83430480

01 云配置

阿里云镜像库和 Github Actions 密钥配置。具体参考代码仓库的 README.md 文档。

这步主要是为了获取到如下配置参数:

  • ALIYUN_REGISTRY: 阿里云容器镜像服务地址

  • ALIYUN_NAME_SPACE: 阿里云容器镜像命名空间

  • ALIYUN_REGISTRY_USER: 阿里云容器镜像服务用户名

  • ALIYUN_REGISTRY_PASSWORD: 阿里云容器镜像服务密码

02 本地配置

  1. 复制 .env.example 文件为 .env

cp .env.example .env
  1. 编辑 .env 文件,填入您的实际配置:

ALIYUN_REGISTRY=registry.cn-hangzhou.aliyuncs.com
ALIYUN_NAME_SPACE=your-namespace
ALIYUN_REGISTRY_USER=your-username
ALIYUN_REGISTRY_PASSWORD=your-password

将上述获取到的四个配置,配置到.env文件即可。

03 配置镜像列表

images.txt 文件中列出需要镜像的 Docker 镜像,每行一个。支持以下格式:

# 基本格式
nginx
mysql:8.0.37
​
# 带命名空间的镜像
halohub/halo:2.20
​
# 私有仓库镜像
k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.0.0
​
# 指定架构的镜像
--platform=linux/arm64 xiaoyaliu/alist

如果你要Github Actions运行的话,需要 fork 该项目,修改 images.txt 文件,替换成你想要 mirror 的 docker 镜像。

04 Bash 脚本执行

拉取源码,进入到项目目录中。

# 确保脚本有执行权限
chmod +x docker-mirror.sh
​
# 运行脚本
./docker-mirror.sh

image-20250318下午85451597

根据images.txt中镜像列表逐个执行,等待执行完毕即可。

05 Python 脚本执行

# 安装依赖,根据本地实际情况使用 pip 或者 pip3
pip3 install -r requirements.txt
​
# 运行脚本,根据本地实际情况使用 python 或者 python3
python3 docker_mirror.py

image-20250318下午90450092

06 Github Actions 执行

该工具已经集成到 GitHub Actions 工作流中。当推送到 main 分支或手动触发工作流时,将自动运行镜像任务。

image-20250318下午85023480

07 查看Mirror结果

image-20250318下午91408468

推荐阅读


欢迎关注我的公众号“Eric技术圈”,原创技术文章第一时间推送。

License:  CC BY 4.0