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