在本周二,也就是15号的17:06到18:04,作为运维开发常用的Docker Hub华丽丽的宕机了,导致一些运维开发人员无法访问集中管理的Docker Hub注册服务,虽然在一个小时左右,服务恢复了,但是Docker公司一直没有给出一个明确的说法,只是一句:因为一个未知的问题,导致Hub注册表服务停机了而不了了之。然而在不久之后,连Docker的门户网站也相继出现了问题,最后虽然都恢复了正常,但是Docker公司还是没有给出一个明确的说法或者原因来解释这次出现的问题。
但是最为运维开发人员来说,有人欢喜有人忧,有些运维人员一直在修复系统bug,正准备结束了一天的bug修复,上线服务后下班,关键时刻,Docker Hub宕机了,简直就是惊呆了有木有。而另外一些人,因为Docker Hub的宕机,从而获得了短暂的休息而非常的愉悦。
根据Docker公司网站的查询结果显示,上次的故障发生在今年的8月7号,当时的故障历时7个小时,虽然也是部分服务宕机,但是对于运维开发人员来说,影响还是非常大的。
那么我们能不能建立自己的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公司又在将来某一天出现问题,而那时候我们还在进行着容器的部署建立,完全可以想象那时候的心情。