Skip to content
Go back

自建 Docker 镜像加速和缓存服务

由于一些原因,Docker 官方进行无法正常拉取。

省事可以用一些免费公开的镜像加速服务,比如这个仓库收集的一些地址。

https://github.com/dongyubin/DockerHub

如果对于隐私,安全,稳定性要求高,也可以自建一个 Docker 镜像代理服务。

思路

利用 Docker Registry 的 pull through 模式,我们在国外的服务器(VPS)上部署 registry:2 服务。pull through 模式功能是如果当前registry不存在镜像,则从上游拉取,进行缓存。

接着我们通过 Caddy(当然也可以换成Nginx) 转发流量到 registry。

如图所示:

docker-registry-proxy

需要准备的

  1. 需要一个域名
  2. 一台国外服务器(VPS)

部署

代码已经写好了,放在仓库:https://github.com/byteroycai/docker-registry-proxy

下载下来放到服务器上备用。

1.初始化

域名配置

  1. 域名新增一条A记录指向服务器

  2. 更改caddy域名配置

在初始化之前,需要将 caddy/Caddyfile 中的 dm.teslamate.net 域名改为自己的。

dm.teslamate.net {
    reverse_proxy registry:5000

    log {
        output file /var/log/caddy/access.log
        format console
    }
}

自己选择一个目录安装,默认缓存10G,请确保磁盘容量够。

make init

make-init

2. 启动服务

需要先安装好 Docker 服务。

make up

make-up

看下容器启动情况

docker-ps

3. 维护选项

手动清理缓存

make cleanup

设置每日自动清理

make cron

停止服务

make down

验证

这里使用国内阿里云服务器验证。

vim /etc/docker/daemon.json

如文件不存在,自己手动建一个。

{
  "registry-mirrors": ["https://dm.teslamate.net"]
}

重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

docker-run-hello-world

至此,大功告成!

还有一个安全细节,由于 registry-mirrors 是公开的,如果你不想公开被别人使用,可以加个IP白名单做限制。

在服务器的安全组或者 Caddy 配置文件里。

示例文件:

dm.teslamate.net {
    @allowed_ips {
        remote_ip 192.168.1.0/24
        remote_ip 203.0.113.5
    }

    handle @allowed_ips {
        reverse_proxy registry:5000
    }

    handle {
        respond "Access Denied" 403
    }

    log {
        output file /var/log/caddy/access.log
        format console
    }
}

Share this post on:

Previous Post
SubGen — AI 字幕生成工具
Next Post
不写代码,用 AI 做应用?|Codex 3 分钟实测