Docker搭建私有缓存镜像加速仓库教程

2025-07-03 / 15 阅读 / 经验
首先要加速的有能访问到docker hub的代理地址,或外网服务器,否则只能作为普通的私有仓库。

第一步:配置本地 Docker 使用代理(以便拉 registry 镜像)

mkdir -p /etc/systemd/system/docker.service.d

创建 /etc/systemd/system/docker.service.d/proxy.conf

[Service]
Environment="HTTP_PROXY=http://192.168.88.113:8080"
Environment="HTTPS_PROXY=http://192.168.88.113:8080"
Environment="NO_PROXY=localhost,127.0.0.1,::1"

然后重新加载并重启 Docker:

systemctl daemon-reexec
systemctl daemon-reload
systemctl restart docker

第二步:拉取 registry 镜像

docker pull registry:2
成功后继续下一步。

第三步:准备 registry 配置文件

mkdir -p /opt/registry
cat > /opt/registry/config.yml <<EOF
version: 0.1
proxy:
  remoteurl: https://registry-1.docker.io

log:
  fields:
    service: registry

storage:
  filesystem:
    rootdirectory: /var/lib/registry

http:
  addr: 0.0.0.0:5000
  headers:
    X-Content-Type-Options: [nosniff]
EOF

第四步:启动 registry 容器(通过代理 + host 网络)

docker run -d \
  --name registry \
  --network=host \
  -v /opt/registry/config.yml:/etc/docker/registry/config.yml \
  -v registry-data:/var/lib/registry \
  -e HTTP_PROXY=http://192.168.88.113:8080 \
  -e HTTPS_PROXY=http://192.168.88.113:8080 \
  registry:2

解释:

  • --network=host:因为你提到容器下 HTTP 有限制,必须 host 网络

  • -e HTTP_PROXY=...:让 registry 容器能通过代理访问 Docker Hub

  • proxy.remoteurl:启用缓存代理(pull-through cache)


第五步:配置 LXC 容器内的 Docker 客户端使用本地 registry 镜像加速

编辑 /etc/docker/daemon.json

{
  "registry-mirrors": ["http://localhost:5000"]
}

然后重启 Docker:

systemctl restart docker

第六步:测试加速效果

docker pull alpine

如果成功:

  • 第一次拉取走 registry 容器代理,并缓存

  • 第二次就从 registry 本地直接返回

你还可以执行:

验证 registry 是否缓存了镜像。

curl http://192.168.88.103:5000/v2/_catalog
{"repositories":["library/alpine"]}

验证 registry 是否缓存了镜像。


第七步(可选):registry 容器设置自启动

docker update --restart=always registry

或者下次运行加上 --restart=always

相关推荐