本周Docker Hub服务宕机了,自建Docker Hub保证容器服务畅通无阻

在本周二,也就是15号的17:06到18:04,作为运维开发常用的Docker Hub华丽丽的宕机了,导致一些运维开发人员无法访问集中管理的Docker Hub注册服务,虽然在一个小时左右,服务恢复了,但是Docker公司一直没有给出一个明确的说法,只是一句:因为一个未知的问题,导致Hub注册表服务停机了而不了了之。然而在不久之后,连Docker的门户网站也相继出现了问题,最后虽然都恢复了正常,但是Docker公司还是没有给出一个明确的说法或者原因来解释这次出现的问题。

本周Docker Hub服务宕机了,自建Docker Hub保证容器服务畅通无阻

docker

但是最为运维开发人员来说,有人欢喜有人忧,有些运维人员一直在修复系统bug,正准备结束了一天的bug修复,上线服务后下班,关键时刻,Docker Hub宕机了,简直就是惊呆了有木有。而另外一些人,因为Docker Hub的宕机,从而获得了短暂的休息而非常的愉悦。

根据Docker公司网站的查询结果显示,上次的故障发生在今年的8月7号,当时的故障历时7个小时,虽然也是部分服务宕机,但是对于运维开发人员来说,影响还是非常大的。

本周Docker Hub服务宕机了,自建Docker Hub保证容器服务畅通无阻

自建Docker Hub

那么我们能不能建立自己的Docker Hub服务,来提高我们的Docker Hub服务的稳定性呢?答案当然是肯定的。下面我们就通过自建Docker Hub服务来管理我们的容器镜像。

首先我们要进行准备工作:

1、进行Linux的初始化,这里选用CentOS 7.6为例。

2、安装Docker Hub 需要的docker-registry服务

3、修改Docker配置,使之支持Https协议

4、重启Docker服务,安装完毕。

进行Linux的初始化

在进行CentOS系统的最小化安装后,我们需要对Linux系统进行初始化设置,以便更适合我们日后的运维环境:

yum install wget

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum install upgrade

yum install updata

yum clean all

yum makecache

yum install -y yum-utils device-mapper-persistent-data lvm2
##卸载旧版本的docker软件
yum remove docker \ 
 docker-client \
 docker-client-latest \
 docker-common \
 docker-latest \
 docker-latest-logrotate \
 docker-logrotate \
 docker-selinux \
 docker-engine-selinux \
 docker-engine
 

安装自建Docker Hub仓库所需要的docker-registry服务

在自建Docker Hub仓库之前,我们首先需要安装 docker-registry 服务,因为有了它,我们以后就不需要先进行PULL后在建立容器的操作了。

yum install -y docker* //这里使用docker*代替docker-registry,可以进行其他依赖的安装
vi /etc/docker/daemon.json //新版的 Docker 的Daemon配置
##这里我们使用网易的镜像地址
{
 "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

设置运行docker,并设置为开机启动

systemctl start docker
systemctl enable docker-registry
systemctl start docker-registry

查看我们的Docker端口是否已经起来,5000端口就是默认的 docker-registry 监听端口,可以根据自己喜欢进行端口的修改。

netstat -antup

当端口起来的时候,我们可以继续进行docker-registry服务的访问

curl "http://10.11.12.11:5000“

这时候我们就可以推送一个镜像到我们自建的Docker Hub服务器上进行测试

docker pull 10.11.12.11:5000/HelloWord

如果不出意外,到这一步会有一个报错

Using default tag: latest
Trying to pull repository 10.11.12.11:5000/HelloWord ...
unable to ping registry endpoint https://110.11.12.11:5000/v0/
v2 ping attempt failed with error: Get https://10.11.12.11:5000/v2/: EOF

这里报错的意思就是,我们默认使用的是Http协议,而docker-registry的默认协议为Https,所以这里我们还需要进一步的修改

vi /etc/sysconfig/docker

加入如下的配置

OPTIONS='--insecure-registry 10.11.12.11:5000'

保存后,我们重启docker-registry服务

systemctl restart docker docker-registry

这时候我们再次进行镜像的推送

docker pull 10.11.12.11:5000/HelloWord

就会发现顺利的执行完毕,到了这里,我就可以愉快的使用我们自建的Docker Hub仓库服务了,对于运维开发人员来说,建立私有的Docker Hub,可以免去我们因为Docker公司服务宕机所带来的不必要的麻烦。虽然Docker公司也不是经常性的出现问题,但是作为一个备用的方案,还是不错。如果说因为我们忙着修复系统Bug或者开发新的需求,没有第一时间知道Docker公司又在将来某一天出现问题,而那时候我们还在进行着容器的部署建立,完全可以想象那时候的心情。


分享到:


相關文章: