自建 Docker 镜像加速服务
内存泄漏
2026年8月19日 23:34
辽宁
在小说阅读器读本章
去阅读
以下文章来源于重构一切有为法
,作者罗道义
重构一切有为法
.
代码有生灭,架构有兴衰。一切有为法,应作如是观。
如果你手上有多台机器,或者经常重装环境,Docker 拉镜像慢这件事迟早会烦到你。我的做法是直接自建一个镜像代理服务。原文里的配置比较完整,这里保留真正需要抄的部分。
1. 可选:先做账号密码
如果你想给镜像代理加认证,可以先生成一个 htpasswd 文件:
mkdir -p /opt/registry-proxy && cd $_
htpasswd -Bbn username password > ./htpasswd
把 username 和 password 换成你自己的。
2. docker-compose.yaml
核心就是起两个服务:
- 一个 registry 代理 Docker Hub
- 一个 UI 方便看状态
services:
dockerhub:
container_name:reg-docker-hub
image:dqzboy/registry:latest
restart:always
environment:
-OTEL_TRACES_EXPORTER=none
# 如果需要代理,取消下面注释
#- http_proxy=http://host:port
#- https_proxy=http://host:port
volumes:
-./registry/data:/var/lib/registry
-./registry-hub.yml:/etc/distribution/config.yml
#- ./htpasswd:/auth/htpasswd
ports:
-51000:5000
networks:
-registry-net
registry-ui:
container_name:registry-ui
image:dqzboy/docker-registry-ui:latest
environment:
-DOCKER_REGISTRY_URL=http://reg-docker-hub:5000
-SECRET_KEY_BASE=9f1824...01b2
-ENABLE_DELETE_IMAGES=true
-NO_SSL_VERIFICATION=true
restart:always
ports:
-50000:8080
networks:
-registry-net
networks:
registry-net:
注意两点:
- 如果你启用认证,就把
htpasswd挂载取消注释 SECRET_KEY_BASE要自己生成,不要直接抄示例
3. registry-hub.yml
这个文件才是代理 Docker Hub 的关键:
version: 0.1
log:
fields:
service:registry
storage:
filesystem:
rootdirectory:/var/lib/registry
delete:
enabled:true
cache:
blobdescriptor:inmemory
blobdescriptorsize:10000
maintenance:
uploadpurging:
enabled:true
age:168h
interval:24h
dryrun:false
readonly:
enabled:false
http:
addr::5000
headers:
X-Content-Type-Options: [nosniff]
Access-Control-Allow-Origin: ['*']
Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control']
Access-Control-Max-Age: [1728000]
Access-Control-Allow-Credentials: [true]
Access-Control-Expose-Headers: ['Docker-Content-Digest']
#auth:
# htpasswd:
# realm: basic-realm
# path: /auth/htpasswd
health:
storagedriver:
enabled:true
interval:10s
threshold:3
proxy:
remoteurl:https://registry-1.docker.io
username:
password:
ttl:168h
如果你做其他镜像源代理,主要就是改 proxy.remoteurl。
4. 启动
docker compose up -d
# 检查是否起来
docker ps
5. 客户端接入
最后在 Docker 的 daemon.json 里把镜像源改过去:
{
\"registry-mirrors\": [\"https://hub.your_domain_name\"],
\"log-opts\": {
\"max-size\": \"100m\",
\"max-file\": \"5\"
}
}
然后重启 Docker:
systemctl restart docker
6. 什么时候值得自己搭
这套方案比较适合:
- 多台机器重复拉相同镜像
- 你想少依赖临时公共镜像源
- 你想自己掌控可用性和速度
如果你只是偶尔 docker pull 一次,确实没必要上来就折腾。
最后
这套东西最值的地方不是技术多炫,而是它真的能长期省时间。尤其机器一多之后,你会明显感觉到:自己有个稳定镜像代理,比到处找临时镜像源靠谱得多。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。







评论