搭建一个属于自己的docker镜像加速器
近期国内的docker镜像加速器已经失效,导致docker镜像拉不下来。
如图所示,阿里云镜像加速器已经失效了:

(有人可能会问我,为什么不直接自建harbor仓库把镜像包都放在harbor上,其实这也是种方法,但是本人很不喜欢harbor私服仓库的镜像名字一长串的写法,如 192.168.33.234:5000/harbor/neo4j:5.20.0-ubi9这种拉取镜像的方法看着就心烦。还是简简单单的neo4j:5.20.0-ubi9这种写法方便)。下面我们利用nginx的反向代理实现自建docker镜像加速服务器实现这种效果。先看我自己做的效果:

怎么样?成功拉取,和之前的一样的效果。上图的这个地址就是我自建的镜像加速器。
一、准备工作
首先,你必须有一台带公网IPv4的海外云服务器。我这里推荐你使用香港的云服务器(不是中国大陆的服务器就OK),尽可能离我们近,这样延时低响应快,新加坡韩国的也行吧。我自己使用的是一台阿里云香港轻量级应用服务器20-30块钱一个月,如果你觉得太贵可以和别人合买,大家一起用就是了。点击这里直接购买阿里云服务器

30M的带宽足够下载docker镜像了。
然后去买一个域名,就买那种最便宜的域名,大概是几块钱就能买一年的那种。点击这里购买域名
也可以去cloudflare购买域名。(反正怎么便宜怎么来)

二、服务器的准备工作
购买的阿里云海外轻量级服务器推荐安装centos系统
连接服务器,在阿里云安全面板里放行安全组端口,

连接服务器,centos系统运行如下命令安装宝塔面板:
yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec
如果你是安装的Ubuntu系统则执行如下命令安装宝塔面板:
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec
安装完成显示如下:

记得放开上图中的端口,80,22,443,8888,8080,8443等端口,最好是直接关闭防火墙。
浏览器中访问外网面板地址:
第一进入会推荐安装一些常用软件,我们这里就只安装nginx就好了:

在等待安装过程中我们先去把公网IPv4和域名绑定好。
三、绑定域名
在你买的域名下面找到DNS解析选项,添加一条A记录,名称自定义就行,如图我这里填写abc,
IP地址填你云服务器的公网ipv4地址,然后点击保存。我的是如图所示:

那么你服务器对应的域名就是你填写的名称加上你买的域名,例如我上图中红色框里的域名。其他的域名厂商买的域名也是类似的操作。例如namesilo家的域名操作页面如下所示

保存后我们看看能不能通过ping这个域名得到我们服务器的公网ipv4地址:
https://www.itdog.cn/ping/


等全国各地乃至全世界得到的响应都是绿色通过状态那么我们就可以进行下一步操作了。(这个过程可能需要10几分钟,慢一点可能需要几个小时,我是等了一个多小时才全部变绿色的)
四、使用服务器和域名搭建docker镜像加速器
回到我们的宝塔面板:
点击左侧网站按钮,点击添加站点,填入域名,点击确定保存。如下图所示:

点击域名站点右侧的未部署按钮,选择Let's Encrypt 选中域名并申请证书。稍等片刻,证书申请成功,如果失败可以多试几次。

证书申请成功如图所示。

然后我们设置nginx反向代理,点击配置文件,在原来的配置文件最后面的 } 之前插入如下配置:
location / {
proxy_pass https://registry-1.docker.io;
proxy_set_header Host registry-1.docker.io;
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;
proxy_buffering off;
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
proxy_intercept_errors on;
recursive_error_pages on;
error_page 301 302 307 = @handle_redirect;
}
location @handle_redirect {
resolver 1.1.1.1;
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}
如图所示:

这一步其实就是设置nginx的默认配置文件,确认以上无误,就可以点击保存,至此完成了nginx反代docker hub的配置。
五、测试并验证
如果你在浏览器里访问你的域名,会是404页面,这是正常的:
如果访问不通,看看是不是80和443端口没开放。

我们在docker里验证一下是否能拉取镜像了,修改docker的配置文件
vim /etc/docker/daemon.json
把镜像改为你的域名:
{
"registry-mirrors": ["https://你的域名地址"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "128m"
},
"storage-driver": "overlay2"
}
保存,然后重启docker验证是否有效:
systemctl daemon-reload
systemctl restart docker
尝试拉取一个dockerhub上的redis镜像,速度非常快。



1.反向代理取决于海外服务器的速度,所以如果服务器速度太慢,建议换个服务器,一般来说香港的服务器速度快点。
2.反向代理也需要消耗服务器的流量,但是一般情况下个人使用不会消耗太多,如果服务器成本太高,可以多个人合租也行。
3.不要随意把访问地址告诉他人,不然服务器被攻击或者被刷流量,损失的的是自己,并且建议做好防护措施。
最后欢迎大家在评论区留言讨论。
我的技术分享博客地址:CSDN@pkyit
搭建一个属于自己的docker镜像加速器的更多相关文章
- 配置Docker镜像加速器
由于在国内下载docker官方镜像的速度很慢且容易报错,因此需要配置docker镜像加速器来解决这个问题,加速器就是镜像代理的概念,只代理公有镜像,报错结果如下: net/http: request ...
- Docker 镜像加速器
Docker 镜像加速器 我们使用Docker的第一步,应该是获取一个官方的镜像,例如mysql.wordpress,基于这些基础镜像我们可以开发自己个性化的应用.我们可以使用Docker命令行工 ...
- Python环境搭建、python项目以docker镜像方式部署到Linux
Python环境搭建.python项目以docker镜像方式部署到Linux 本文的项目是用Python写的,记录了生成docker镜像,然后整个项目在Linux跑起来的过程: 原文链接:https: ...
- Docker镜像加速器配置
一.为什么要配置Docker镜像加速器 因为我们默认pull的docker镜像是从Docker Hub来下载,由于其服务器在国外,速度会比较慢.因此我们可以配置成国内的镜像仓库,这样可以加速镜像的上传 ...
- Coreos配置docker镜像加速器
CoreOS配置docker镜像加速器 CoreOS下的Docker配置是通过flannel unit来实现的. 1) 通过命令 systemctl cat docker 可以看出配置文件的默认位置 ...
- kubernetes集群搭建(9):docker 镜像的导入与导出
由于K8s搭建时官方提供的镜像不FQ是访问不了的,所以搭建过程中很多时间都耗费在去找镜像去了 下面是我搭建k8s集群用到的镜像 没有采用之前我用的二进制文件搭建(dns没成功),这里采用的Kubea ...
- 【docker】【mysql】docker安装mysql,阿里云docker镜像加速器,docker搜索查看远程仓库上的镜像,docker拉取镜像,查看本地所有镜像,查看容器的运行状况,查看容器的详细信息
在docker上安装mysql有两种方式 1.通过Dockerfile构建 2.直接在docker hub上拉取镜像安装 =================本篇采用方法2=============== ...
- 【docker】解决docker pull镜像 拉取镜像龟速的问题,docker拉取镜像使用阿里云docker镜像加速器
在docker拉取mysql镜像过程中,出现龟速的问题,解决这个问题的方法: 这个页面 停留了好久好久,依旧没有下载完成. 碰上这种情况 1.先退出Ctrl+C 2.在浏览器上进入阿里云docker库 ...
- Ubuntu 配置docker镜像加速器
1. 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通 ...
- Linux配置Docker镜像加速器
Docker默认镜像为官方镜像,可以配置成国内加速器提高速度 登录阿里云控制台,搜索容器镜像服务获取到镜像加速服务地址 新建配置文件 /etc/docker/daemon.json 输入以下内容 { ...
随机推荐
- SpringBoot中的拦截器江湖
前言 很多小伙伴在工作中遇到拦截需求就无脑写HandlerInterceptor,结果被复杂场景搞得鼻青脸肿. 作为一名有多年开发经验的程序员,今天领大家到SpringBoot的山头认认6把交椅: 这 ...
- Python基础 - 常用内置对象
数字.字符串.字节串.列表.元组.字典.集合.布尔型.空类型.异常.文件.可迭代对象.编程单元def.class.module 常量与变量 x = 3 type(x) # 查看变量类型 int typ ...
- VMware workstation 部署微软MDT系统
一.环境准备 1. VMware Workstation 虚拟机配置 新建虚拟机 类型:Microsoft Windows Server 2022 Standard 内存:4GB+ 硬盘:100GB( ...
- Elimination Game——LeetCode进阶路
原题链接https://leetcode.com/problems/elimination-game/ 题目描述 There is a list of sorted integers from 1 t ...
- SpringBoot3整合SpringSecurity6(四)添加用户、密码加密
写在前面 还记得在之前的文章中,我们在user表中手动插入了3条数据吗? 当时,大家就会有疑问.这一串密码是怎么来的呢,我们为啥要对密码进行加密? 带着这些疑问,我们继续上路.我们在开发一个应用系统, ...
- Java基于线程池和AQS模拟高并发
概述 <手写高并发下线程安全的单例模式>主要介绍使用枚举类实现JAVA单例模式,以及在高并发环境下验证此单例模式是线程安全的.本文借助ReentrantLock.CountDownLa ...
- Django Web应用开发实战第五章
视图类是通过定义和声明类的形式实现的,根据用途划分3部分:数据显示视图.数据操作视图和日期筛选视图. 数据显示视图:将后台数据显示在网页上,数据主要来自模型,有:RedirectView.Templa ...
- 为博客添加Live图
为博客添加Live图 Apple提供了很生动的Live实况图,在实际展示的过程中非常生动形象,在撰写博客的过程中,我自己也尝试将博客中嵌入实况图片 其实Apple提供的iCloud网页版为我们提供了很 ...
- Rtpengine 全面指南 (mr13.1.1.6):启动参数、配置详解及双网卡SBC部署实例
引言 本文档旨在为 rtpengine (版本 mr13.1.1.6) 用户提供一份详尽的参考指南.内容涵盖 rtpengine 的进程启动参数.rtpengine.conf 配置文件的主要参数说明, ...
- DRF之分页类源码分析
DRF之分页类源码分析 [一]分页类介绍 Django REST framework(DRF)是一个用于构建Web API的强大工具,它提供了分页功能,使你能够控制API响应的数据量. 在DRF中,分 ...