自建 Docker hub 镜像加速器
介绍
6月6日,被广泛用到的中科大镜像库被关闭,随后国内其他镜像库、镜像加速器也纷纷反映无法正常使用,而在多年前,官方docker hub国内就已经无法访问了。各个技术群纷纷炸锅,寻找解决的方法,我在这里也给大家提供一个方法。
服务器信息
腾讯云轻量应用服务器,配置2c2G40G,香港属地,CentOS 7.6 系统
1. 安装 Docker
使用官方一键安装命令快速安装Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
- 启动Docker并设置开机自启
systemctl start docker && systemctl enable docker
2. 安装 Docker-compose
因为服务器是香港属地,在这里无需考虑Github网络问题,直接下载docker-compose即可
curl -L https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose
- 授权,查看docker-compose版本
chmod 755 /usr/bin/docker-compose
docker-compose version
3. 部署 Nexus3 私有仓库
这里采用docker-compose的方式进行部署,方便日后管理
mkdir /data/nexus -p && cd /data/nexus
vim docker-compose.yml
- docker-compose.yml 内容
version: '3.1'
services:
nexus3:
image: sonatype/nexus3:3.69.0
restart: always
container_name: nexus3
volumes:
- /etc/localtime:/etc/localtime
- ./data:/nexus-data
ports:
- 8081:8081
- 8082:8082
- 8083:8083
environment:
- INSTALL4J_ADD_VM_PARAMS=-Xms128m -Xmx512m -XX:MaxDirectMemorySize=512m -Djava.util.prefs.userRoot=/nexus-data/javaprefs
因为这台轻量服务器只有2G内存,所以要限制一下内存,不然无法正常启动
- 创建 nexus3 容器
chmod 777 -R data
docker-compose up -d
4. 云平台防火墙添加放行规则
8081 端口用于nexus管理页面,
8082 端口用于docer-proxy也就是镜像加速器服务,
8083 备用
4. 配置 Docker-proxy
此时访问 http://公网IP:8081 登录nexus管理页面,默认账号为 admin
默认密码可在服务器上通过 cat data/admin.password
命令查看
4.1 设置新密码
4.2 允许匿名访问
4.3 创建 Repositories
设置 --> Repository --> Repositories --> Create repository --> docker (proxy)
- Name: docker-proxy
- HTTP: 8082
- Allow anonymous docker pull : ✔
- Enable Docker V1 API: ✔
- Remote storage: https://registry-1.docker.io
4.4 配置安全领域
设置 --> Security --> Realms
Docker Bearer Token Realm 设置为 Active , 保存
4.5 访问测试
此时访问 http://公网IP:8082 出现 Error 400 Not a Docker request
即为正常
5. 客户端配置镜像加速器
5.1 配置镜像加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://公网IP:8082"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
5.2 拉取镜像测试
docker pull nginx:1.24.0
镜像拉取成功,拉取的速度就取决于服务器的带宽了
5.3 查看镜像缓存
确认拉取镜像正常后可关闭 8081 端口放行策略,只放行 8082 端口即可
写在最后
到这里部署已经完成了,nexus 是一个非常好用的工具,用于公司内部的私仓库管理,支持maven、npm、docker 和 helm 等类型仓库。对于 docker_group 的功能 ,可以通过 docker_group 绑定 docker 仓库和 k8s 仓库、私有仓库和公共仓库,优先拉取私有仓库,没有再去拉公共仓库,拉过的公共镜像缓存在本地,既能提高效率,也能应对当前环境下的不确定性。