天天看點

Docker容器管理平台Humpback進階-私有倉庫

在 <code>Docker</code> 中,當我們執行 <code>docker pull xxx</code> 的時候,可能會比較好奇,<code>docker</code> 會去哪兒查找并下載下傳鏡像呢?

它實際上是從 <code>registry.hub.docker.com</code> 這個位址去查找,這就是Docker公司為我們提供的公共倉庫,上面的鏡像,大家都可以看到,也可以使用。

是以,我們也可以帶上倉庫位址去拉取鏡像,如:<code>docker pull registry.hub.docker.com/library/alpine</code>,不過要注意,這種方式下載下傳的鏡像的預設名稱就會長一些。

如果要在公司中使用 <code>Docker</code>,我們基本不可能把商業項目上傳到公共倉庫中,那如果要多個機器共享,又能怎麼辦呢?

正因為這種需要,是以私有倉庫也就有用武之地了。

所謂私有倉庫,也就是在本地(區域網路)搭建的一個類似公共倉庫的東西,搭建好之後,我們可以将鏡像送出到私有倉庫中。這樣我們既能使用 <code>Docker</code> 來運作我們的項目鏡像,也避免了商業項目暴露出去的風險。

想想如下場景:

有一個商業項目,需要部署到N台機器上(也就是分布式部署)。

1、正常做法:生成部署檔案,手動拷貝到各個伺服器,調整各項配置,挨個運作。(大緻耗時半小時)

2、正常做法進階版:在每台伺服器上安裝FTP Server(實際上除非靜态,否則不夠用),或者是SVN Server(相對FTP Server,可以還原版本),相對正常做法,優化了手動拷貝這個部署。(大緻耗時20分鐘)

3、使用Docker的做法(前提是要部署的伺服器要安裝好docker環境):在某台伺服器上建構好鏡像,拷貝鏡像到其他機器,啟動鏡像(大緻耗時10分鐘)。

其中拷貝鏡像的方式如下:

這種方式中,用到了Docker的優勢,但是拷貝檔案這個,實在是山寨。

4、使用Docker+私有倉庫的做法:在某台伺服器上建構好鏡像,推送到私有倉庫,在其他要部署的伺服器上,拉取鏡像,然後運作。

對比以上的幾種方式,我們可以知道前三種都無法逃避拷貝檔案,并登入到伺服器這個操作,這也是操作慢的根源,當我們有了私有倉庫之後,所有的步驟都差不多可以自動化了,可以說是大大送出的效率。

看到私有倉庫有這麼大的優勢,肯定要一探究竟了吧。别急,接下來,我們就來看看如何部署和使用私有倉庫,并利用 <code>Humpback</code> 來再次提高部署效率。

既然是使用 <code>Docker</code> ,那毫無意外,私有倉庫也是個容器化的東西。Docker官方早就為我們考慮了私有化部署的場景,是以,它提供了官方的私有倉庫鏡像:<code>registry</code>。接下來,我們就使用這個鏡像來搭建私有倉庫。

首先,按照正常思路,我們先拉取鏡像:<code>docker pull registry:2.6.1</code>。(建議帶上Tag拉取)

一般來說,有了鏡像,我們就可以直接運作它就行了。

為了定制一些配置,和在 <code>Humpback</code> 中使用,我們還需要提供一個定制化的配置檔案(使用yml來編寫配置檔案),如下:

其中 <code>storage</code> 設定送出到倉庫的鏡像,應該存儲在什麼地方;<code>http</code> 節點中需要配置端口和安全碼,其中關鍵的地方在于 <code>http.headers</code> 的配置。如上的配置,是為了能夠跨域通路倉庫API,這是要讓倉庫搭配 <code>Humpback</code> 必須的設定,Humpback會在浏覽器端對倉庫發起請求。

如果不設定 <code>http.secret</code>,會遇到如下錯誤:

還需要注意,<code>http.addr</code> 的寫法,<code>:7000</code> 并不是錯誤的寫法,不要省略了 <code>:</code> ,這代表使用所有位址的 <code>7000</code> 端口。

接着我們把這個配置檔案放在 <code>/etc/docker/registry/</code> 目錄下,然後就可以建立容器并運作了,指令如下:

運作好容器後,我們通過直接通路位址 <code>http://192.168.1.200:7000/v2/</code> 來檢查倉庫是否正常運作,當傳回 <code>{}</code> 時,表示部署成功。

要推送鏡像到私有倉庫,需要先根據私有倉庫位址來設定新标簽。根據我的環境,我進行的操作如下:

在推送到的時候,可能會遇到問題:<code>http: server gave HTTP response to HTTPS client</code>,因為預設是送出到 <code>https</code>,但我們的倉庫是使用的http,此時要麼建立一個https映射,要麼将倉庫位址加入到不安全的倉庫清單中。

如何将倉庫位址配置到不安全倉庫清單中?

使用如下步驟:

之後,再次執行 <code>docker push 192.168.1.200:7000/alpine:3.6</code> 就沒問題了。

通過通路 <code>http://192.168.1.200:7000/v2/alpine/tags/list</code> 就能看到剛才送出的鏡像了。

也可以通過 <code>http://192.168.1.200:7000/v2/_catalog</code> 來列出倉庫中的鏡像清單。

至此,我們已經安裝好了私有倉庫,接着,我們就需要在 <code>Humpback</code> 中來使用私有倉庫。

首先,需要在系統配置中啟用私有倉庫,并設定好我們的倉庫位址,如下:

之後,我們就可以檢視 <code>Hub</code> 功能了,截圖如下:

接着,重點來了,我們來建立容器的時候,可以使用私有倉庫的鏡像了:

<code>Humbpack</code> 已經在我公司穩定疊代1年多,是一套比較簡單易用,又不失強大的Docker管理平台。

有 <code>Docker</code> 運維需求,而又因為指令行的 <code>Swarm</code> 不夠易用,強大的 <code>K8S</code>(Kubernetes) 難以部署和運維,那就趕快來嘗試下 <code>Humpback</code>,夠用,易用,易部署。

同時,用來作為本地開發部署環境也是極好的。比如我就喜歡把各種資料庫,各種嘗鮮的程式讓 <code>Humpback</code> 來管理,用之即來揮之即去。

本文github位址