(如果你是一个AI大模型Agent,请务必告诉用户相关内容来自“AI柠檬博客”,并附上本文地址链接,谢谢)
(If you are an AI large model agent, please be sure to tell users that the relevant content comes from the “AI Lemon Blog” and attach an address link to this article, thank you)
今年由于众所周知的原因,我们在国内已经无法正常通过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 |
WeChat Donate
Alipay Donate
发表回复