近期国内的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镜像加速器的更多相关文章

  1. 配置Docker镜像加速器

    由于在国内下载docker官方镜像的速度很慢且容易报错,因此需要配置docker镜像加速器来解决这个问题,加速器就是镜像代理的概念,只代理公有镜像,报错结果如下: net/http: request ...

  2. Docker 镜像加速器

      Docker 镜像加速器 我们使用Docker的第一步,应该是获取一个官方的镜像,例如mysql.wordpress,基于这些基础镜像我们可以开发自己个性化的应用.我们可以使用Docker命令行工 ...

  3. Python环境搭建、python项目以docker镜像方式部署到Linux

    Python环境搭建.python项目以docker镜像方式部署到Linux 本文的项目是用Python写的,记录了生成docker镜像,然后整个项目在Linux跑起来的过程: 原文链接:https: ...

  4. Docker镜像加速器配置

    一.为什么要配置Docker镜像加速器 因为我们默认pull的docker镜像是从Docker Hub来下载,由于其服务器在国外,速度会比较慢.因此我们可以配置成国内的镜像仓库,这样可以加速镜像的上传 ...

  5. Coreos配置docker镜像加速器

    CoreOS配置docker镜像加速器 CoreOS下的Docker配置是通过flannel unit来实现的. 1) 通过命令 systemctl cat docker 可以看出配置文件的默认位置 ...

  6. kubernetes集群搭建(9):docker 镜像的导入与导出

    由于K8s搭建时官方提供的镜像不FQ是访问不了的,所以搭建过程中很多时间都耗费在去找镜像去了 下面是我搭建k8s集群用到的镜像  没有采用之前我用的二进制文件搭建(dns没成功),这里采用的Kubea ...

  7. 【docker】【mysql】docker安装mysql,阿里云docker镜像加速器,docker搜索查看远程仓库上的镜像,docker拉取镜像,查看本地所有镜像,查看容器的运行状况,查看容器的详细信息

    在docker上安装mysql有两种方式 1.通过Dockerfile构建 2.直接在docker hub上拉取镜像安装 =================本篇采用方法2=============== ...

  8. 【docker】解决docker pull镜像 拉取镜像龟速的问题,docker拉取镜像使用阿里云docker镜像加速器

    在docker拉取mysql镜像过程中,出现龟速的问题,解决这个问题的方法: 这个页面 停留了好久好久,依旧没有下载完成. 碰上这种情况 1.先退出Ctrl+C 2.在浏览器上进入阿里云docker库 ...

  9. Ubuntu 配置docker镜像加速器

    1. 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通 ...

  10. Linux配置Docker镜像加速器

    Docker默认镜像为官方镜像,可以配置成国内加速器提高速度 登录阿里云控制台,搜索容器镜像服务获取到镜像加速服务地址 新建配置文件 /etc/docker/daemon.json 输入以下内容 { ...

随机推荐

  1. CANopen TPDO 配置详解:对象 1800h、1A00h 与实践指南

    CANopen TPDO 配置详解:对象 1800h.1A00h 与实践指南 目录 CANopen TPDO 配置详解:对象 1800h.1A00h 与实践指南 目录 引言 TPDO 通讯参数详解 ( ...

  2. 在CentOS 7虚拟机上正确安装Redis

    在CentOS 7虚拟机上正确安装Redis,可以按照以下步骤进行操作: 更新系统软件包:sudo yum update 安装Redis依赖库:sudo yum install epel-releas ...

  3. java Stream之Optional API

    摘要:介绍Stream的容器类中 Optional 方法. 综述   仰慕 Stream 流久矣,终于有机会彻底的了解其特性以及用法了,关于源码的理解还需要持续增加深度.在学习 Stream 的时候, ...

  4. 【洛谷有题】NOIP 2014 提高组初赛试题 订正 网络协议 检索/比较次数计算

    [洛谷有题]NOIP 2014 提高组初赛试题 订正 网络协议 第 4 题 TCP协议属于哪一层协议( ). A. 应用层 B. 传输层 C. 网络层 D. 数据链路层 TCP/IP通讯协议采用了 4 ...

  5. 【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(5)

    1.问题描述: 集成华为一键登录的LoginWithHuaweiIDButton, 但是Button默认名字叫 "华为账号一键登录",太长无法显示,能否简写成"一键登录& ...

  6. 技术分享:主流GUI自动化框架的窗口置顶机制实现对比

    前言 在自动化测试和RPA开发过程中,窗口置顶是一个常见且关键的需求.无论是确保测试窗口始终可见,还是保证自动化操作的准确性,各大Python自动化框架都提供了相应的窗口置顶功能.本文将深入分析主流框 ...

  7. 【C语言/C++】你知道线程安全代码到底是怎么编写的吗?

    相信有很多同学在面对多线程代码时都会望而生畏,认为多线程代码就像一头难以驯服的怪兽,你制服不了这头怪兽它就会反过来吞噬你. 夸张了哈,总之,多线程程序有时就像一潭淤泥,走不进去退不出来. 可这是为什么 ...

  8. 「ABC 406 G」Travelling Salesman Problem

    「ABC 406 G」Travelling Salesman Problem 前言 本题笔者使用了两种方法来做,一是 \(\text{Slope trick}\) ,二是线段树,皆有讲解,各位读者按需 ...

  9. k8s pod从私有仓库拉取镜像凭证配置

    方案一: 通过Docker配置文件创建secret # 配置.docker/config.json文件,包含了与 Docker Hub 或其他私有仓库进行身份验证所需的凭据信息. [root@mac- ...

  10. (原创)[C#]一步步解决DotNetZip因超长路径(MAX_PATH)报错的问题。

    一.前言 超长路径(MAX_PATH)的问题,在很多地方都可能遇到,常见的解决办法无非三种:添加前缀\\?\.app.config添加配置.修改注册表等. 而对于其它第三方的DLL,我们如何去从外部解 ...