自建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/…