前言

此篇不是搭建镜像私有仓的记录,而是提供 Docker Hub 的镜像缓存,方便快速拉取镜像(不支持push)。

关于registry mirror原理或以docker部署此镜像服务,请参考引用文章

本文仅记录了以systemd方式部署,系统是:中标麒麟V6,X86(= CentOS 7)。

部署

1.下载

请转至 docker distribution 选择一个版本下载打包好的压缩文件, 比如registry_2.8.1_linux_amd64.tar.gz

上传到服务器解压,将 registry 移动到 /sbin 下:

tar zxf registry_2.8.1_linux_amd64.tar.gz registry
mv registry /sbin

2.配置

建立systemd管理文件,编写registry配置文件(下述供参考,请根据实际修改):

cat > /lib/systemd/system/registry.service <<'EOF'
[Unit]
Description=DockerHub Registry Mirrors
Documentation=https://hub.docker.com
After=network.target

[Service]
User=nobody
ExecStart=/sbin/registry serve /data/registry/config.yml
Restart=on-failure
RestartSec=5s
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

mkdir -p /data/registry && chown -R nobody.nobody /data/registry
cat > /data/registry/config.yml <<'EOF'
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /data/registry
http:
  addr: 127.0.0.1:5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
proxy:
    remoteurl: https://registry-1.docker.io
EOF

3.启动服务

systemctl daemon-reload
systemctl start registry
systemctl enable registry

如无意外,应该可以看到端口监听和进程。

4.Nginx代理[可选]

镜像服务监听 5000 端口,可以用nginx代理下,直接用域名或80端口标准化访问:

location /v2/ {
    proxy_pass http://127.0.0.1:5000;
    proxy_set_header  Host      $http_host;   # required for docker client's sake
    proxy_set_header  X-Real-IP $remote_addr; # pass on real client's IP
    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_read_timeout 900;
}

使用

假设镜像地址是: http://docker-mirror.saintic.com

使用 upstart 的系统

如Ubuntu 14.04、Debian 7 Wheezy、CentOS 6,在 DOCKER_OPTS 中配置Hub地址:

DOCKER_OPTS="--registry-mirror=http://docker-mirror.saintic.com"

使用 systemd 的系统

如Ubuntu 16.04+、Debian 8+、CentOS 7, 在配置文件 /etc/docker/daemon.json 中加入:

{
  "registry-mirrors": ["http://docker-mirror.saintic.com"]
}

检查 Docker Hub 是否生效

在命令行执行 docker info ,如果从结果中看到了如下内容,说明配置成功。

Registry Mirrors:
    http://docker-mirror.saintic.com

引用