【自立更生】如何自建Docker镜像加速器

952 阅读2分钟

自建Docker镜像加速器主要涉及到搭建一个私有的Docker Registry,同时配置好反向代理和缓存机制,以实现加速拉取Docker镜像的目的。以下是一个基本的步骤指南,帮助你搭建Docker镜像加速器。

1. 准备工作

  • 服务器:确保你有一台可以访问互联网的服务器。
  • 域名(可选):如果需要通过域名访问你的Docker Registry,你需要准备一个域名并指向你的服务器IP。
  • Docker:在服务器上安装Docker。

2. 搭建Docker Registry

准备文件和目录

首先,按照以下结构准备文件和目录,这有助于组织你的配置文件和证书,确保Docker Compose能够正确加载它们。

# 文件路径
# /data/mirror# tree
.
├── docker-compose.yml
├── dockerhub
│   └── config.yml
└── nginx
    ├── conf.d
    │   └── dockerhub.conf
    └── ssl
        ├── stegai.com.crt
        └── stegai.com.key

以下为配置文件内容:

# docker-compose.yml
services:
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/ssl:/etc/nginx/ssl

  dockerhub:
    image: registry:2.8.3
    container_name: dockerhub
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - /etc/localtime:/etc/localtime
      - ./dockerhub/data:/var/lib/registry
      - ./dockerhub/config.yml:/etc/docker/registry/config.yml
# dockerhub/config.yml
version: 0.1
storage:
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
  maintenance:
    uploadpurging:
      enabled: true
      age: 168h
      dryrun: false
      interval: 1m
http:
  addr: 0.0.0.0:5000
proxy:
  remoteurl: https://registry-1.docker.io
# nginx/conf.d/dockerhub.conf 
server {
    listen 80;
    server_name mirrors.stegai.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name mirrors.stegai.com;

    ssl_certificate /etc/nginx/ssl/stegai.com.crt;
    ssl_certificate_key /etc/nginx/ssl/stegai.com.key;

    location ^~/docker.io/ {
        proxy_pass http://dockerhub: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;
    }
}
# SSL证书公钥
# nginx/ssl/stegai.com.crt
-----BEGIN CERTIFICATE-----
MIIF/DCCBOSgAwIBAgIQCbJ8lxt0C85mBcnEf/FKITANBgkqhkiG9w0BAQsFADBu
......
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
......
-----END CERTIFICATE-----

# SSL证书私钥
# nginx/ssl/stegai.com.key
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA5S/4k9g73LrOftE53rXyCUBxo2WoyX+SUjm3fWbizptvHVke
......
-----END RSA PRIVATE KEY-----

启动容器

docker compose up -d

3. 配置使用

为了确保Docker客户端和containerd能够通过加速器拉取镜像,需要在客户端机器上进行相应的配置。

docker配置加速

编辑/etc/docker/daemon.json文件,添加你的私有Registry作为镜像源。

# /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://mirrors.stegai.com/docker.io"
  ]
}

containerd 配置加速

对于使用containerd的系统,编辑/etc/containerd/config.toml/etc/containerd/cert.d/docker.io/hosts.toml文件,以指定镜像加速器的地址。

# 文件路径
# /etc/containerd# tree
.
├── cert.d
│   └── docker.io
│       └── hosts.toml
└── config.toml
# /etc/containerd/config.toml
[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
    ......
    # 确认存在以下两行
    [plugins."io.containerd.grpc.v1.cri".registry]
      config_path = "/etc/containerd/cert.d"
# /etc/containerd/cert.d/docker.io/hosts.toml
server = "https://registry-1.docker.io"
[host."https://mirrors.stegai.com/docker.io"]
  capabilities = ["pull", "resolve"]

4. 其他

推荐一个当前可用的镜像站:huecker.io

# /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://huecker.io"
  ]
}

更多镜像配置可参考:github.com/bboysoulcn/…