国内无法访问海外 Docker 镜像进阶优化方案
见字如面,与大家分享实践中的经验与思考。
之前写过一篇文章:国内无法拉取 Docker 镜像解决方案,通过 Github Actions
将镜像 mirror 到阿里云私有仓库中。
虽然解决了问题,但是每次需要修改 github 仓库中的 images.txt
,然后再触发 Github Actions
,不支持本地或者服务器执行。
工具介绍
这个工具用于将 Docker 镜像从公共仓库拉取并推送到阿里云容器镜像服务。支持本地运行和 GitHub Actions 集成。
主要功能:
支持从公共仓库拉取 Docker 镜像并推送到阿里云容器镜像服务
支持处理重名镜像,自动添加命名空间前缀
支持指定平台架构的镜像
支持本地运行和 GitHub Actions 集成
提供 Bash 脚本和 Python 两种实现方式
💡注意:
克隆代码可以直接执行,需要本地或者服务器支持魔法访问网络!没有的话,还是使用 Github Actions 执行吧。
工具使用
01 云配置
阿里云镜像库和 Github Actions
密钥配置。具体参考代码仓库的 README.md
文档。
这步主要是为了获取到如下配置参数:
ALIYUN_REGISTRY
: 阿里云容器镜像服务地址ALIYUN_NAME_SPACE
: 阿里云容器镜像命名空间ALIYUN_REGISTRY_USER
: 阿里云容器镜像服务用户名ALIYUN_REGISTRY_PASSWORD
: 阿里云容器镜像服务密码
02 本地配置
复制
.env.example
文件为.env
:
cp .env.example .env
编辑
.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
根据images.txt
中镜像列表逐个执行,等待执行完毕即可。
05 Python 脚本执行
# 安装依赖,根据本地实际情况使用 pip 或者 pip3
pip3 install -r requirements.txt
# 运行脚本,根据本地实际情况使用 python 或者 python3
python3 docker_mirror.py
06 Github Actions 执行
该工具已经集成到 GitHub Actions 工作流中。当推送到 main 分支或手动触发工作流时,将自动运行镜像任务。
07 查看Mirror结果
推荐阅读
欢迎关注我的公众号“Eric技术圈”,原创技术文章第一时间推送。