自建Docker镜像站

故事背景:国内各大Docker镜像站纷纷停服,公司内部对Docker依赖又比较重,遂准备自建一个Docker内网镜像站,本文档主要依赖https://github.com/dqzboy/Docker-Proxy项目实现。

环境准备

  • Linux服务器一台

    • 配置足够的存储空间用于缓存镜像,具体空间根据实际情况增减

    • 内核最好大于4.9,可开启BBR加速

  • 域名及SSL证书

    • 可使用内网域名和自签名证书

  • 代理服务器或海外业务专线

    • 如果服务器已经在海外的话忽略

实现过程

1.一键部署脚本

# 国外环境
bash -c "$(curl -fsSL https://raw.githubusercontent.com/dqzboy/Docker-Proxy/main/install/DockerProxy_Install.sh)"
​
# 国内环境
bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/dqzboy/Docker-Proxy/install/DockerProxy_Install.sh)"
​
# 脚本中配置代理服务器地址

部署完成后访问Web页面查看

2.配置Nginx

## docker hub
server {
    listen       80;
    listen       443 ssl;
    ## 填写绑定证书的域名
    server_name  docker-hub.domain.com;
    ## 证书文件名称(填写你证书存放的路径和名称)
    ssl_certificate your_domain_name.crt;
    ## 私钥文件名称(填写你证书存放的路径和名称)
    ssl_certificate_key your_domain_name.key;
    ssl_session_timeout 1d;
    ssl_session_cache   shared:SSL:50m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_buffer_size 8k;
​
    proxy_connect_timeout 600;
    proxy_send_timeout    600;
    proxy_read_timeout    600;
    send_timeout          600;
​
    location / {
        proxy_pass   http://代理服务器地址:51000;
        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-Nginx-Proxy true;
        proxy_buffering off;
        proxy_redirect off;
    }
}

3.域名解析

4.Docker配置

{
    "registry-mirrors": [
        "https://docker-hub.domain.com"
    ]
}
​
# 或临时方案
​
# docker pull docker-hub.domain.com/library/nginx:1.19.6-alpine
  • 查看缓存镜像(默认缓存7d,可在脚本中自行设置)