> 适用场景:国内网络环境,官方 Docker Hub 镜像受限,想通过国外服务器自建代理 Registry 或做临时缓存。
—
## 1️⃣ 服务端部署
### 1.1 创建数据目录
选择服务器上一个适合存放 Registry 数据的目录(如 `/opt/registry/data`),并创建:
“`bash
sudo mkdir -p /opt/registry/data
“`
### 1.2 启动 Docker Registry 容器
使用官方 `registry:2` 镜像,搭建一个代理模式的 Registry:
“`bash
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`:
“`nginx
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
“`bash
sudo nginx -t
sudo nginx -s reload
“`
—
## 3️⃣ 数据清理与管理
### 3.1 缓存清理策略
如果你**不想长期占用磁盘空间**:
* **方法 1:每日定期清理**
在 `/etc/cron.daily/registry-gc` 创建脚本:
“`bash
#!/bin/bash
docker exec registry registry garbage-collect /etc/docker/registry/config.yml
docker exec registry registry rm -f
“`
然后设置可执行权限:
“`bash
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
在国内客户端机器上配置:
“`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
“`bash
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart docker
“`
### 4.3 测试 pull
“`bash
# 官方镜像走加速源
docker pull nginx:latest
# 自建 Registry
docker pull hub.850899.xyz/library/nginx:latest
“`
—
## 5️⃣ 使用场景与应用
### 5.1 常见场景
1. **国内网络无法直接访问 Docker Hub**
* 服务器先在国外 pull 镜像
* 国内客户端通过自建 Registry pull
2. **缓存重要镜像,节省流量**
* 服务器可作为镜像中心
* 客户端重复使用同一镜像无需再拉官方源
### 5.2 清理与维护
* **定期清理缓存**:避免占用过多磁盘空间
* **监控磁盘和带宽**:尤其服务器存储有限
* **灵活扩展源**:新增官方加速或自建 Registry
—
## 6️⃣ 总结
通过以上配置,你可以实现:
* 国内客户端可安全访问 Docker 镜像,无需直连 Docker Hub。
* 可以选择是否缓存镜像,灵活控制服务器磁盘占用。
* 配置可扩展,方便未来新增加速源或 Registry。
* 结合 Nginx,保证 HTTPS 安全访问。
> 💡 提示:对于个人使用,完全不缓存也是可行的,服务器只作为临时 pull 跳板即可,节省存储空间。