在CentOS上搭建自己的Docker镜像加速器
在CentOS上搭建自己的Docker镜像加速器
使用国内的Docker镜像加速源实在太憋屈了,比刚有互联网那会找代理服务器的IP地址还麻烦,于是决定自建Docker镜像加速器,这样玩转Docker会舒服一些。
在海外有个云服务器节点,是CentOS 7.9的操作系统,就选它了。
要在CentOS上搭建自己的Docker镜像加速器,可以使用Docker官方提供的Registry镜像缓存功能。这种方案允许我创建一个本地的镜像缓存服务器,它会从官方镜像源拉取镜像并缓存到本地,后续的拉取请求将直接从本地缓存获取,从而加速镜像下载过程。
一、环境准备
安装Docker
确保CentOS已安装Docker,若未安装,可执行以下命令:
1
2
3
4
5sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker开放端口
确保防火墙开放5000端口(Registry默认端口):
1
2sudo firewall-cmd --add-port=5000/tcp --permanent
sudo firewall-cmd --reload上面是基于firewalld的防火墙设置,如果你的系统用的还是iptables,使用以下命令打开端口:
1
2
3
4sudo iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
sudo service iptables save
sudo iptables --list如果找不到iptables服务,可能是指定目录了,修改以上命令:
1
2
3
4sudo /sbin/iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
sudo service iptables save
sudo /sbin/iptables --list
二、部署Registry缓存服务
使用Docker运行一个Registry容器作为缓存服务:
1 |
|
参数说明:
-p 5000:5000
:将容器的5000端口映射到宿主机的5000端口-v /data/docker_registry:/var/lib/registry
:将镜像缓存数据存储到宿主机的/data/registry
目录-e REGISTRY_PROXY_REMOTEURL
:指定上游镜像源为Docker官方镜像库
三、配置客户端使用本地镜像加速器
在需要使用该镜像加速器的Docker客户端上(包括本机),修改/etc/docker/daemon.json
配置文件:
1 |
|
其中your-server-ip
是运行Registry缓存服务的服务器IP地址。
配置完成后,重启Docker服务:
1 |
|
四、验证配置
检查镜像源配置
1
docker info | grep Mirrors
输出应显示:
1
Registry Mirrors: http://your-server-ip:5000/
测试拉取镜像
1
docker pull nginx
查看缓存数据
在Registry服务器上,检查缓存目录是否有内容:1
ls -la /data/registry/docker/registry/v2/repositories/
五、配置HTTPS(可选但推荐)
默认情况下,Docker要求镜像加速器使用HTTPS连接。若要启用HTTPS,可按以下步骤操作:
生成自签名证书
1
2
3
4
5
6
7
8
9mkdir -p /certs
openssl req \
-newkey rsa:4096 \
-nodes \
-sha256 \
-keyout /certs/domain.key \
-x509 \
-days 365 \
-out /certs/domain.crt重启Registry服务并启用HTTPS
1
2
3
4
5
6
7
8
9
10
11
12
13sudo docker stop registry-cache
sudo docker rm registry-cache
sudo docker run -d \
-p 443:5000 \
--restart=always \
--name registry-cache \
-v /data/registry:/var/lib/registry \
-v /certs:/certs \
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2更新客户端配置
将客户端的daemon.json
修改为:1
2
3{
"registry-mirrors": ["https://your-server-ip"]
}
六、高级配置选项
1. 限制缓存大小
在启动Registry时添加以下环境变量:
1
2
3-e REGISTRY_STORAGE_DELETE_ENABLED=true \ # 启用删除功能
-e REGISTRY_STORAGE_CACHE_BLOBDESCRIPTORS=inmemory \ # 缓存描述符
-e REGISTRY_STORAGE_FILESYSTEM_MAXSIZE=10737418240 \ # 限制最大10GB
2. 配置多镜像源
若需缓存多个镜像源(如Google Container Registry),可使用第三方工具如distribution/distribution
或mirrorbits
。
七、维护与监控
清理旧镜像
1
2
3
4
5
6
7
8# 停止Registry服务
sudo docker stop registry-cache
# 垃圾回收(删除未使用的层)
sudo docker run --rm -v /data/docker_registry:/var/lib/registry registry:2 garbage-collect /etc/docker/registry/config.yml
# 重启服务
sudo docker start registry-cache监控缓存使用情况
1
du -sh /data/docker_registry
通过以上步骤,您可以在CentOS上成功搭建自己的Docker镜像加速器,显著提高内部网络环境下的镜像拉取速度。