1. 程式人生 > 實用技巧 >Docker之Harbor

Docker之Harbor

Docker之Harbor

接著上1、2、3、4章繼續研究docker

一:簡介

Harbor是一個用於儲存和分發Docker映象的企業級Registry伺服器。

映象的儲存harbor使用的是官方的docker registry(v2命名是distribution)服務去完成。harbor在docker distribution的基礎上增加了一些安全、訪問控制、管理的功能以滿足企業對於映象倉庫的需求。harbor以docker-compose的規範形式組織各個元件,並通過docker-compose工具進行啟停。

docker的registry是用本地儲存或者s3都是可以的,harbor的功能是在此之上提供使用者許可權管理、映象複製等功能,提高使用的registry的效率。Harbor的映象拷貝功能是通過docker registry的API去拷貝,這種做法遮蔽了繁瑣的底層檔案操作、不僅可以利用現有docker registry功能不必重複造輪子,而且可以解決衝突和一致性的問題。

二:Harbor架構


三:主要元件

Proxy:對應啟動元件nginx。它是一個nginx反向代理,代理Notary client(映象認證)、Docker client(映象上傳下載等)和瀏覽器的訪問請求(Core Service)給後端的各服務;
UI(Core Service):對應啟動元件harbor-ui。底層資料儲存使用mysql資料庫,主要提供了四個子功能:
UI:一個web管理頁面ui;
API:Harbor暴露的API服務;
Auth:使用者認證服務,decode後的token中的使用者資訊在這裡進行認證;auth後端可以接db、ldap、uaa三種認證實現;
Token服務(上圖中未體現):負責根據使用者在每個project中的role來為每一個docker push/pull命令issuing一個token,如果從docker client傳送給registry的請求沒有帶token,registry會重定向請求到token服務建立token。

Registry:對應啟動元件registry。負責儲存映象檔案,和處理映象的pull/push命令。Harbor對映象進行強制的訪問控制,Registry會將客戶端的每個pull、push請求轉發到token服務來獲取有效的token。
Admin Service:對應啟動元件harbor-adminserver。是系統的配置管理中心附帶檢查儲存用量,ui和jobserver啟動時候需要載入adminserver的配置;
Job Sevice:對應啟動元件harbor-jobservice。負責映象複製工作的,他和registry通訊,從一個registry pull映象然後push到另一個registry,並記錄job_log;
Log Collector:對應啟動元件harbor-log。日誌彙總元件,通過docker的log-driver把日誌彙總到一起;
Volnerability Scanning:對應啟動元件clair。負責映象掃描
Notary:對應啟動元件notary。負責映象認證
DB:對應啟動元件harbor-db,負責儲存project、 user、 role、replication、image_scan、access等的metadata資料。

四:安裝

部署環境(一臺主機即可):

centos-7.2

docker-engine-1.12.5

docker-compose-1.9.0

harbor-0.5.0

修改主機名和hosts檔案

# hostnamectl --static set-hostname docker-node1.com

# echo “192.168.91.134 docker-node1.com”> /etc/hosts

#sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

#systemctl stop firewalld.service

#systemctl disable firewalld.service

如果沒按docker安裝

4.1、下載所需的軟體包(以下需要-翻-牆-下載的地方你們自己解決吧......):

(1)下載docker-compose:

[root@docker-node1 ~]# curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 617 0 617 0 0 188 0 --:--:-- 0:00:03 --:--:-- 188

100 8280k 100 8280k 0 0 123k 0 0:01:07 0:01:07 --:--:-- 86789

[root@docker-node1 ~]# ll /usr/local/bin/docker-compose

-rw-r--r-- 1 root root 8479184 Aug 2 00:11 /usr/local/bin/docker-compose

[root@docker-node1 ~]# chmod +x /usr/local/bin/docker-compose

[root@docker-node1 ~]# docker-compose --version

docker-compose version 1.18.0, build 8dd22a9

(2)下載harbor:

[root@docker-node1 ~]# wgethttps://github.com/vmware/harbor/releases/download/0.5.0/harbor-offline-installer-0.5.0.tgz
#我下載的是offline離線包,這樣在後續的部署及安裝都會比較快,總共有300M左右的大小!

[root@docker-node1 ~]# tar zxvf harbor-offline-installer-0.5.0.tgz

(3)解壓,配置harbor:

[root@docker-node1 ~]#tarzxvf harbor-offline-installer-0.5.0.tgz

[root@docker-node1 ~]#cd harbor/

[root@docker-node1 harbor]# #vim harbor.cfg

修改hostname = harbor (啟動harbor為主機名) 否則會報異常:
➜ Please set hostname and other necessary attributes in harbor.cfg first. DO NOT use localhost or 127.0.0.1 for hostname, because Harbor needs to be accessed by external clients.
Please set --with-notary if needs enable Notary in Harbor, and set ui_url_protocol/ssl_cert/ssl_cert_key in harbor.cfg bacause notary must run under https.
Please set --with-clair if needs enable Clair in Harbor

#這裡只是簡單的測試,所以只編輯這一行為本虛擬機器的ip,其他的預設不做修改;當然也可以根據你自己的實際情況做修改!

(4)執行安裝指令碼:

#會拉取好幾個映象下來,及檢查環境:

[root@docker-node1 harbor]# ./install.sh

(5)配置docker:

#因為docker預設使用的是https連線,而harbor預設使用http連線,所以需要修改docker配置標誌insecure registry不安全倉庫的主機!
#當然,harbor也可以設定為https,這個後續文章中再列出操作方法吧!

修改 /usr/lib/systemd/system/docker.service即可,三者選其一即可.

ExecStart=/usr/bin/dockerd-current \

--add-registry=192.168.91.134--insecure-registry=192.168.91.134

#在ExecStart=/usr/bin/dockerd-current出新增-add-registry和--insecure-registry引數.

#只加上--insecure-registry這個引數即可。


#重啟docker:
[root@docker-node1 harbor]# systemctl daemon-reload

[root@docker-node1 harbor]# systemctl restart docker.service

使用docker info驗證:

[root@docker-node1 harbor]# docker info

輸出最後一行有:

Registries: 192.168.91.134 (insecure), docker.io (secure)

Harbor容器的stop與start:

進入Harbor目錄執行如下命令即可:

[root@docker-node1 harbor]# docker-compose stop

[root@docker-node1 harbor]# docker-compose start

Starting log ... done

Starting ui ... done

Starting mysql ... done

Starting jobservice ... done

Starting registry ... done

Starting proxy ... done

[root@docker-node1 harbor]#

安裝完成後會生成如下6個容器:

[root@docker-node1 harbor]# docker ps

到此便安裝完成了,直接開啟瀏覽器登陸即可:

預設使用者密碼是:admin/Harbor12345

五、推送測試:將本地映象推送到docker私有倉庫:

1、向Harbor推一個映象:

首先登入Harbor的web介面並建立一個專案common.org

需要把專案設為公開

然後把需要上傳的映象命名為 ip:埠/專案名/映象名:版本號 必須謹記。

2.檢視本地的映象:

先pull一個centos映象:

[root@docker-node1 harbor]# docker pull docker.io/centos:latest

[root@docker-node1 harbor]# docker images

3.給centos映象打tag:

[root@docker-node1 harbor]# docker tag docker.io/centos:latest 192.168.91.134/common.org/centos7:latest

4、推送至Harbor:

[root@docker-node1 harbor]# docker push 192.168.91.134/common.org/centos7:latest

登入Harbor web頁面檢視common.org專案下的映象,如果common.org目錄下存在centos7映象,則說明推送成功.

三、從Harbor私有倉庫上拉取一個映象到客戶機.

如果其他主機要拉取harbor倉庫的映象,也需要修改docker的配置檔案,新增如下引數即可,並重啟服務,其中ip為harbor倉庫的地址.

# vim /etc/sysconfig/docker

OPTIONS='--insecure-registry=10.20.9.223'

在客戶端機器登陸harbor伺服器,如果認證成功,即可以上傳下載.

[root@dockr-client~]# docker login 10.20.9.223

Username (admin): admin

Password:

Login Succeeded

[root@dockr-client~]#

執行拉取映象命令:

[root@docker-node ~]# docker pull 10.20.9.223/common.org/centos7:latest

Trying to pull repository 10.20.9.223/common.org/centos7 ...

latest: Pulling from10.20.9.223/common.org/centos7

Digest: sha256:191c883e479a7da2362b2d54c0840b2e8981e5ab62e11ab925abf8808d3d5d44

Status: Image isup to date for10.20.9.223/common.org/centos7:latest

[root@docker-node ~]#

如果想檢視harbor倉庫的有哪些映象,直接在http://10.20.9.223/harbor 介面就可以搜尋到映象列表.

總結:

自己不小心使用docker rmi centos,等到想使用後發現沒有這個映象了(生產環境千萬不要用,用也要小心)。


解決:

就是從新pull一個唄。

如果遇到伺服器重啟後,docker-compose無法啟動。


解決方法:

重新初始化唄。(可能會出現傳輸關閉可能是網路不好,再多執行一個就可以了。)

[root@docker-node1 harbor]#./install.sh


————————————————
版權宣告:本文為CSDN博主「yongbang_yan」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/weixin_41515615/java/article/details/81370084