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

Docker私有倉庫

Docker 中,當咱們執行 docker pull xxx 的時候,可能會比較好奇,docker 會去哪兒查找並下載鏡像呢?node

它其實是從 registry.hub.docker.com 這個地址去查找,這就是Docker公司爲咱們提供的公共倉庫,上面的鏡像,你們均可以看到,也可使用。git

因此,咱們也能夠帶上倉庫地址去拉取鏡像,如:docker pull registry.hub.docker.com/library/alpine,不過要注意,這種方式下載的鏡像的默認名稱就會長一些。github

若是要在公司中使用 Docker,咱們基本不可能把商業項目上傳到公共倉庫中,那若是要多個機器共享,又能怎麼辦呢?docker

正由於這種須要,因此私有倉庫也就有用武之地了。數據庫

所謂私有倉庫,也就是在本地(局域網)搭建的一個相似公共倉庫的東西,搭建好以後,咱們能夠將鏡像提交到私有倉庫中。這樣咱們既能使用 Docker 來運行咱們的項目鏡像,也避免了商業項目暴露出去的風險。json

想一想以下場景:跨域

有一個商業項目,須要部署到N臺機器上(也就是分佈式部署)。瀏覽器

一、常規作法:生成部署文件,手動拷貝到各個服務器,調整各項配置,挨個運行。(大體耗時半小時)安全

二、常規作法高級版:在每臺服務器上安裝FTP Server(實際上除非靜態,不然不夠用),或者是SVN Server(相對FTP Server,能夠還原版本),相對常規作法,優化了手動拷貝這個部署。(大體耗時20分鐘)bash

三、使用Docker的作法(前提是要部署的服務器要安裝好docker環境):在某臺服務器上構建好鏡像,拷貝鏡像到其餘機器,啓動鏡像(大體耗時10分鐘)。

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

# 將docker鏡像保存爲tar文件。
docker save <image name> > <tar file address>
# 如
docker save node-test > /tmp/node-test.tar

# 拷貝這個tar文件到須要使用該鏡像的服務器上(FTP,SCP等等)

# 將tar文件文件加載爲鏡像
docker load < /tmp/node-test.tar

# 接下來就能夠經過鏡像運行容器了。

這種方式中,用到了Docker的優點,可是拷貝文件這個,實在是山寨。

四、使用Docker+私有倉庫的作法:在某臺服務器上構建好鏡像,推送到私有倉庫,在其餘要部署的服務器上,拉取鏡像,而後運行。

對比以上的幾種方式,咱們能夠知道前三種都沒法逃避拷貝文件,並登陸到服務器這個操做,這也是操做慢的根源,當咱們有了私有倉庫以後,全部的步驟都差很少能夠自動化了,能夠說是大大提交的效率。

看到私有倉庫有這麼大的優點,確定要一探究竟了吧。別急,接下來,咱們就來看看如何部署和使用私有倉庫,並利用 Humpback 來再次提升部署效率。

搭建私有倉庫

既然是使用 Docker ,那毫無心外,私有倉庫也是個容器化的東西。Docker官方早就爲咱們考慮了私有化部署的場景,因此,它提供了官方的私有倉庫鏡像:registry。接下來,咱們就使用這個鏡像來搭建私有倉庫。

首先,按照常規思路,咱們先拉取鏡像:docker pull registry:2.6.1。(建議帶上Tag拉取)

通常來講,有了鏡像,咱們就能夠直接運行它就好了。

爲了定製一些配置,和在 Humpback 中使用,咱們還須要提供一個定製化的配置文件(使用yml來編寫配置文件),以下:

# config.yml 內容
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :7000
  secret: docker-registry
  headers:
    X-Content-Type-Options: [nosniff]
    Access-Control-Allow-Headers: ['*']
    Access-Control-Allow-Origin: ['*']
    Access-Control-Allow-Methods: ['GET,POST,PUT,DELETE']
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

其中 storage 設置提交到倉庫的鏡像,應該存儲在什麼地方;http 節點中須要配置端口和安全碼,其中關鍵的地方在於 http.headers 的配置。如上的配置,是爲了可以跨域訪問倉庫API,這是要讓倉庫搭配 Humpback 必須的設置,Humpback會在瀏覽器端對倉庫發起請求。

若是不設置 http.secret,會遇到以下錯誤:

No HTTP secret provided - generated random secret.

還須要注意,http.addr 的寫法,:7000 並非錯誤的寫法,不要省略了 : ,這表明使用全部地址的 7000 端口。

接着咱們把這個配置文件放在 /etc/docker/registry/ 目錄下,而後就能夠建立容器並運行了,命令以下:

# -p映射端口,格式爲:主機端口:容器內部端口
# -v映射volumn(目錄或者文件),格式爲:主機目錄:容器內目錄
# --name 設置容器名稱
# 最後的 `registry:2.6.1` 則是鏡像名稱
docker run -d -p 7000:7000 --restart=always \
 -v /var/lib/registry/:/var/lib/registry/ \
 -v /etc/docker/registry/config.yml:/etc/docker/registry/config.yml \
 --name humpback-registry \
 registry:2.6.1

運行好容器後,咱們經過直接訪問地址 http://192.168.1.200:7000/v2/ 來檢查倉庫是否正常運行,當返回 {} 時,表示部署成功。

推送鏡像到私有倉庫

要推送鏡像到私有倉庫,須要先根據私有倉庫地址來設定新標籤。根據個人環境,我進行的操做以下:

# pull image from docker hub(從官方倉庫拉取一個鏡像)
docker pull alpine:3.6

# 根據私有倉庫,設定標籤(必須) 
# 爲鏡像 `alpine:3.6` 建立一個新標籤 `192.168.1.200:7000/alpine:3.6`
docker tag alpine:3.6 192.168.1.200:7000/alpine:3.6

# 推送到私有倉庫中
docker push 192.168.1.200:7000/alpine:3.6

在推送到的時候,可能會遇到問題:http: server gave HTTP response to HTTPS client,由於默認是提交到 https,但咱們的倉庫是使用的http,此時要麼建立一個https映射,要麼將倉庫地址加入到不安全的倉庫列表中。

如何將倉庫地址配置到不安全倉庫列表中?

使用以下步驟:

# 編輯 /etc/docker/daemon.json
vi /etc/docker/daemon.json
# 增長配置項
{
  ... # 其餘配置項
  "insecure-registries":[ # 關鍵配置項,將倉庫將入到不安全的倉庫列表中
    "192.168.1.200:7000"
  ]
}
# 重啓Docker服務(CentOS 7.2)
systemctl restart docker

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

經過訪問 http://192.168.1.200:7000/v2/alpine/tags/list 就能看到剛纔提交的鏡像了。

也能夠經過 http://192.168.1.200:7000/v2/_catalog 來列出倉庫中的鏡像列表。

Humpback中使用私有倉庫

至此,咱們已經安裝好了私有倉庫,接着,咱們就須要在 Humpback 中來使用私有倉庫。

首先,須要在系統配置中啓用私有倉庫,並設置好咱們的倉庫地址,以下:

啓用倉庫

以後,咱們就能夠查看 Hub 功能了,截圖以下:

查看私有倉庫

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

從私有倉庫拉取鏡像

結語

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

Docker 運維需求,而又由於命令行的 Swarm 不夠易用,強大的 K8S(Kubernetes) 難以部署和運維,那就趕快來嘗試下 Humpback夠用,易用,易部署

同時,用來做爲本地開發部署環境也是極好的。好比我就喜歡把各類數據庫,各類嚐鮮的程序讓 Humpback 來管理,用之即來揮之即去。

最後:Humpback開源免費,Github地址是:https://github.com/humpback/humpback,要是喜歡,還望不吝給個 Star;若是以爲很差用,或者不夠用,也歡迎給咱們提 Issue,固然,可以有 PR 那就更好了。

本文github地址

相關文章
相關標籤/搜索