分类
NAS专区 综合技术

搭建自己的docker镜像源加速服务

今年由于众所周知的原因,我们在国内已经无法正常通过docker.io等站点直接拉取到docker容器镜像了,并且现在看来也无重新可用的可能性了。因此AI柠檬博主探索出了一条搭建自己的docker镜像源加速服务的道路。该方法对服务器配置的要求较低,仅需任意一台具有海外网络连接的服务器即可,也可搭建在自己的NAS上,而且docker本身需要做的配置就是换镜像源,与之前的方式完全一致,几乎适用于任何场景。

唯一需要注意的就是,如果你的服务器网络带宽是按流量计费的,或有流量限制,那么需要谨防被其他人盗用而产生费用损失,建议通过防火墙配置规则,仅开放给自己内部使用。

1 材料准备

  1. 必需:具有海外网络连接的服务器 *1
    需要已安装好Linux操作系统和Docker服务。
  2. 必需:互联网域名 *1
    偷懒做法是docker服务本地直接改hosts文件,那么任意域名都可用,与配置一致即可。
    其实改hosts文件随意乱用一个名称都行,反正是你们内部的网络用,不影响公网。
  3. 必需:SSL证书 *1
    考虑到Docker默认优先走HTTPS,因此需要域名对应的SSL证书。可以使用自签名证书,或私域签名证书,只要做好证书链的信任即可。
  4. 可选:内部网络异地接入用的组网服务器和设备 *1
    将服务暴露于内网,而不是公网。
  5. 可选:了解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

关注“AI柠檬博客”微信公众号,及时获取你最需要的干货。


“搭建自己的docker镜像源加速服务”上的4条回复

cf搭建当下确实可以用。本文提供了一种更通用的方法,对第三方服务的依赖性更低,更灵活,只是会有一些服务器成本罢了

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

20 − 16 =

如果您是第一次在本站发布评论,内容将在博主审核后显示,请耐心等待