搭建私有的镜像代理服务
在 Kubernetes 和 Docker 的使用场景中,经常需要从各种公共镜像仓库(如 k8s.gcr.io
, docker.io
等)拉取镜像。然而,由于网络问题或镜像仓库访问限制,直接拉取可能会失败。这里介绍一个轻量级镜像代理服务 DaoCloud/crproxy,帮助你快速搭建自己的镜像代理,解决镜像拉取难题。
注意:当前方案适用于少量用户的场景。如果用户量较大,可能会出现性能瓶颈。作者项目中已包含适用于大规模场景的代码,但尚未完善文档。如果你有兴趣,欢迎提交 PR 贡献代码和文档!
前提条件
-
准备一台访问网络畅通的服务器;
-
准备一个域名(无需备案)并做好 DNS 解析:添加两条解析记录
@
记录 和*
记录到准备好的服务器的 IP;如果想使用二级域名,如
cr.aluopy.cn
,则可以将cr
和*.cr
解析到服务器 IP。 -
安装好 docker 和 docker-compose。
开始部署
本文使用的域名为 cr.aluopy.cn
# 拉取代码
git clone https://github.com/DaoCloud/crproxy.git
# 进入项目目录
cd crproxy/examples/default
# 修改域名
# 将cr.aluopy.cn换成你自己的域名
sed -i "s,m.daocloud.io,cr.aluopy.cn,g" start.sh
# 启动服务
./start.sh
如果出现了报错大概率是申请 ssl 证书时,ca 机构检查到没有将域名解析到当前服务器导致的。
如果刚刚添加了域名解析,等解析生效后重新执行
./start.sh
即可。
如果一切正常这时候你就可以通过添加前缀的方式拉取镜像了。
使用方法
1. 增加前缀 (推荐方式)
注意事项
适用于所有 Registry
使用方式
映射关系如下:
k8s.gcr.io/coredns/coredns:v1.8.6 => cr.aluopy.cn/k8s.gcr.io/coredns/coredns:v1.8.6
拉取镜像:
docker pull cr.aluopy.cn/k8s.gcr.io/coredns/coredns:v1.8.6
2. 前缀替换
注意事项
此方式只支持已配置域名别名的 Registry,如果有需要可以再添加。
使用方式
映射关系如下:
k8s.gcr.io/coredns/coredns:v1.8.6 => k8s-gcr.cr.aluopy.cn/coredns/coredns:v1.8.6
拉取镜像:
docker pull k8s-gcr.cr.aluopy.cn/coredns/coredns:v1.8.6
已配置别名的 Registry
目前已配置的 Registry 域名别名如下:
源站 | 别名 |
---|---|
cr.l5d.io | l5d.kubesre.xyz |
docker.elastic.co | elastic.kubesre.xyz |
docker.io | docker.kubesre.xyz |
gcr.io | gcr.kubesre.xyz |
ghcr.io | ghcr.kubesre.xyz |
k8s.gcr.io | k8s-gcr.kubesre.xyz |
registry.k8s.io | k8s.kubesre.xyz |
mcr.microsoft.com | mcr.kubesre.xyz |
nvcr.io | nvcr.kubesre.xyz |
quay.io | quay.kubesre.xyz |
registry.jujucharms.com | jujucharms.kubesre.xyz |
3. 透明拉取
注意事项
通过这种方式只能加速 docker hub
的镜像,对于其他镜像仓库,比如 k8s.gcr.io
, quay.io
等,需要使用前面的方式进行加速。
使用方式
Ubuntu14.04、Debian7Wheezy
对于使用 upstart 的系统而言,编辑 /etc/default/docker
文件,在其中的 DOCKER_OPTS 中配置加速器地址:
DOCKER_OPTS="--registry-mirror=https://docker.cr.aluopy.cn"
Ubuntu16.04+、Debian8+、CentOS7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json
中写入如下内容(如果文件不存在请新建该文件):
{
"registry-mirrors": [
"https://docker.cr.aluopy.cn"
]
}
镜像拉取
以上配置完成后,直接输入镜像原地址拉取即可:
docker pull mysql:5.7
扩展
新增前缀替换支持的 Registry
以 k8s.gcr.io
镜像仓库为例。
添加别名
# 设置环境变量
GETEWAY=cr.aluopy.cn
# 设置别名
./setup-alias.sh k8s-gcr.${GETEWAY} k8s.gcr.io ${GETEWAY}
为别名申请证书
./update-tls.sh k8s-gcr.${GETEWAY}
重启 nginx 服务
./reload.sh
不出意外这时候你就可以使用前缀替换方式拉取 k8s.gcr.io
的镜像了。