今年由于众所周知的原因,我们在国内已经无法正常通过docker.io等站点直接拉取到docker容器镜像了,并且现在看来也无重新可用的可能性了。因此AI柠檬博主探索出了一条搭建自己的docker镜像源加速服务的道路。该方法对服务器配置的要求较低,仅需任意一台具有海外网络连接的服务器即可,也可搭建在自己的NAS上,而且docker本身需要做的配置就是换镜像源,与之前的方式完全一致,几乎适用于任何场景。
唯一需要注意的就是,如果你的服务器网络带宽是按流量计费的,或有流量限制,那么需要谨防被其他人盗用而产生费用损失,建议通过防火墙配置规则,仅开放给自己内部使用。
1 材料准备
- 必需:具有海外网络连接的服务器 *1
需要已安装好Linux操作系统和Docker服务。 - 必需:互联网域名 *1
偷懒做法是docker服务本地直接改hosts文件,那么任意域名都可用,与配置一致即可。
其实改hosts文件随意乱用一个名称都行,反正是你们内部的网络用,不影响公网。 - 必需:SSL证书 *1
考虑到Docker默认优先走HTTPS,因此需要域名对应的SSL证书。可以使用自签名证书,或私域签名证书,只要做好证书链的信任即可。 - 可选:内部网络异地接入用的组网服务器和设备 *1
将服务暴露于内网,而不是公网。 - 可选:了解Nginx、Docker和docker-compose的大脑 *1
需要你对Nginx、Docker和docker-compose有所了解。
如果有同学不了解这块也没关系,扫描博客下方的二维码,加博主微信,或者点击个人主页,发送邮件给博主,博主可以根据你的具体实际情况提供详细指导。
2 操作步骤
2.1 打开开源项目地址
https://github.com/bboysoulcn/registry-mirror
寻找你需要加速的镜像源的docker-compose配置,也可以直接加速所有支持的镜像源,该项目的ReadMe有指导。
如果需要加速全部镜像源,可以直接使用git clone 或者手工下载zip包到本地文件目录并解压。
git clone https://github.com/bboysoulcn/registry-mirror
2.2 将对应的docker-compose文件写入启动目录
可以直接复制粘贴网页中的docker-compose.yml文件和对应的配置文件,也可以通过cp命令将下载后的文件拷贝到启动目录。
此处略过具体操作,大家应该都会做。
2.3 启动容器
docker-compose -d up
此时,如果你的海外服务器网络是正常的话,那么就应该已经初步具备提供镜像加速服务的能力了。
2.4 配置Nginx反向代理
配置Nginx反向代理主要目的是为了用域名来访问,而不是数字IP地址加端口号,这样使得一些奇怪的bug问题少一点,否则在某些场景下容易出现不可预料的问题。
下面贴出AI柠檬博主自己用的配置:
server { server_name <需替换为你自己的域名>; location / { # 仅允许 GET 请求 limit_except GET { deny all; } proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_read_timeout 300; proxy_max_temp_file_size 4096m; proxy_pass http://172.18.0.2:5000; } listen 10.100.100.100:443 ssl http2; # 监听内网IP+端口 ssl_certificate /opt/sslcert/<你的ssl证书存放路径>/full_chain.pem; ssl_certificate_key /opt/sslcert/<你的ssl证书存放路径>/private.key; include /opt/sslcert/config/options-ssl-nginx.conf; client_max_body_size 10240M; fastcgi_buffers 64 4K; keepalive_timeout 300; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; }
其中:
/opt/sslcert/config/options-ssl-nginx.conf 文件内容为:
ssl_session_cache shared:le_nginx_SSL:1m; ssl_session_timeout 1440m; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";
2.5 重新加载Nginx配置
nginx -s reload
2.6 解析互联网域名
登录域名注册所在服务商的网站,例如阿里云、华为云、腾讯云,在域名解析处将域名解析为对应的IP。
例如 demo.com 域名,新增一个 A记录(IPv4)或者 AAAA记录(IPv6)的解析,名称为 docker,将上述服务器对应的IP填入,并设置TTL为10分钟,然后保存。
2.7 更换docker源
以docker hub为例,我们更换docker镜像源为我们自己的服务器。
编辑文件:/etc/docker/daemon.json
{ "registry-mirrors": [ "https://docker.demo.com" ] }
然后重启docker服务:
systemctl reload-daemon systemctl restart docker
3 执行结果验证
激动人心的时刻来了!我们即将使用上自己的docker镜像加速源!
尝试拉取几个docker镜像,例如:
docker pull alpine:latest
或
docker pull docker.demo.com/library/alpine:latest
并查看是否可以顺利完成拉取镜像。
其中,直接使用自己的域名作为前缀拉取官方镜像时需要在中间加“library”,这是dockerhub默认的官方镜像仓库。
使用下述命令查看拉取到的docker镜像:
docker images
4 相关问题说明和潜在的改进点
1.该操作本质上是转发了docker hub的请求流量,与其他加速源是相同的作用。由于基于http协议,理论上可以不需要docker-compose那步启动镜像仓服务容器,直接使用nginx反向代理docker hub。只是AI柠檬博主本人自己尝试逆向的过程中没有成功,也许是由于对相关原理理解不够导致配置不对,也许这种方式其实是不可行的,还是需要自己搭建中转加速服务。
2.如果有同学通过不使用域名甚至不使用Nginx而是直接对接docker-compose 启动后的服务的方式可以成功使用的话,请联系AI柠檬博主本人,我可以及时把操作方法和要点更新上来,并提供嘉奖😄。
3.如果搭建docker镜像加速源的服务能够不依赖具有海外网络连接的服务器,而是通过有梯子的服务器直接搭建加速服务的话,就更方便了。但是目前AI柠檬博主没有探索出该方式,如果有大神能够做到,也请联系我,真嘉奖,这个自建加速服务方式如果能成功也很关键。
4.真的球球别折腾国内的只想打工挣钱的开发者了,至少要折腾之前把替代方案做好,至少感知和体验上会好点,不需要说国粹。 (
版权声明本博客的文章除特别说明外均为原创,本人版权所有。欢迎转载,转载请注明作者及来源链接,谢谢。本文地址: https://blog.ailemon.net/2024/10/13/install-self-hosted-docker-images-acceleration-service/ All articles are under Attribution-NonCommercial-ShareAlike 4.0 |
“搭建自己的docker镜像源加速服务”上的4条回复
https://github.com/cmliu/CF-Workers-docker.io
cf直接搭建,有个域名就可以
cf搭建当下确实可以用。本文提供了一种更通用的方法,对第三方服务的依赖性更低,更灵活,只是会有一些服务器成本罢了
这不是为了折腾开发者,因为镜像网站的内容是不受控的,万一有人放入反动内容,谁负责?
理是这么个理,只是吧…大家都懂