Docker Registry
适用场景:国内网络环境,官方 Docker Hub 镜像受限,想通过国外服务器自建代理 Registry 或做临时缓存。
1️⃣ 服务端部署#
1.1 创建数据目录#
选择服务器上一个适合存放 Registry 数据的目录(如 /opt/registry/data),并创建:
sudo mkdir -p /opt/registry/data1.2 启动 Docker Registry 容器#
使用官方 registry:2 镜像,搭建一个代理模式的 Registry:
sudo docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /opt/registry/data:/var/lib/registry \
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
registry:2说明:
-p 5000:5000:容器端口 5000 映射到宿主机。REGISTRY_PROXY_REMOTEURL:开启代理模式,将请求转发到 Docker Hub。--restart=always:服务器重启自动启动。

💡 如果你不希望缓存,可在客户端 pull 之后直接清理
/opt/registry/data,或者直接忽略缓存(详见清理策略)。
2️⃣ Nginx 反向代理配置#
为了让客户端通过 HTTPS 安全访问 Registry,可用 Nginx 做反向代理。
2.1 创建 Nginx 配置文件#
假设域名 hub.850899.xyz:
server {
listen 443 ssl;
server_name hub.850899.xyz;
ssl_certificate /etc/ssl/850899.xyz/fullchain.pem;
ssl_certificate_key /etc/ssl/850899.xyz/privkey.pem;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name hub.850899.xyz;
return 301 https://$host$request_uri;
}说明:
- 代理 HTTPS 流量到本地 Docker Registry。
- 自动跳转 HTTP 到 HTTPS。
- 使用官方或自签 SSL 证书保证安全。
2.2 测试并重载 Nginx#
sudo nginx -t
sudo nginx -s reload3️⃣ 数据清理与管理#
3.1 缓存清理策略#
如果你不想长期占用磁盘空间:
- 方法 1:每日定期清理 在
/etc/cron.daily/registry-gc创建脚本:
#!/bin/bash
docker exec registry registry garbage-collect /etc/docker/registry/config.yml
docker exec registry registry rm -f然后设置可执行权限:
sudo chmod +x /etc/cron.daily/registry-gc- 方法 2:手动清理 pull 完镜像后,可直接删除缓存文件夹(例如
/opt/registry/data/docker/registry/v2/blobs),只保留需要的镜像即可。
⚠️ 注意:不要随意删除
_manifests或_layers中的文件,否则 Registry 数据可能损坏。
4️⃣ 客户端 Docker 配置#
4.1 修改 daemon.json#
在国内客户端机器上配置:
{
"registry-mirrors": [
"https://hub.littlediary.cn",
"https://docker.m.daocloud.io"
],
"insecure-registries": [
"hub.850899.xyz:443"
]
}说明:
registry-mirrors:官方 Docker Hub 镜像加速源。insecure-registries:自建 Registry 或自签证书的 HTTPS Registry。- 支持未来追加新源,灵活扩展。
4.2 重启 Docker#
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart docker4.3 测试 pull#
# 官方镜像走加速源
docker pull nginx:latest
# 自建 Registry
docker pull hub.850899.xyz/library/nginx:latest
5️⃣ 使用场景与应用#
5.1 常见场景#
- 国内网络无法直接访问 Docker Hub
- 服务器先在国外 pull 镜像
- 国内客户端通过自建 Registry pull
- 缓存重要镜像,节省流量
- 服务器可作为镜像中心
- 客户端重复使用同一镜像无需再拉官方源
5.2 清理与维护#
- 定期清理缓存:避免占用过多磁盘空间
- 监控磁盘和带宽:尤其服务器存储有限
- 灵活扩展源:新增官方加速或自建 Registry
6️⃣ 总结#
通过以上配置,你可以实现:
- 国内客户端可安全访问 Docker 镜像,无需直连 Docker Hub。
- 可以选择是否缓存镜像,灵活控制服务器磁盘占用。
- 配置可扩展,方便未来新增加速源或 Registry。
- 结合 Nginx,保证 HTTPS 安全访问。
💡 提示:对于个人使用,完全不缓存也是可行的,服务器只作为临时 pull 跳板即可,节省存储空间。
📚 Digital Library