本週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公司又在將來某一天出現問題,而那時候我們還在進行著容器的部署建立,完全可以想象那時候的心情。


分享到:


相關文章: