天天看點

Docker——harbor私有倉庫部署Harbor概述Harbor部署

Harbor概述

Harbor的概念

  1. Harbor是VMware公司開源的企業級Docker Registry項目,其目标是幫助使用者迅速搭建一個企業級的Docker Registry服務
  2. Harbor以 Docker 公司開源的Registry 為基礎,提供了圖形管理UI、基于角色的通路控制(Role Based AccessControl)、AD/LDAP內建、以及審計日志(Auditlogging)等企業使用者需求的功能,同時還原生支援中文
  3. Harbor的每個元件都是以Docker 容器的形式建構的,使用docker-compose 來對它進行部署。用于部署Harbor 的docker- compose模闆位于harbor/ docker- compose.yml

Harbor的特性

1)基于角色控制:使用者和倉庫都是基于項目進行組織的,而使用者在項目中可以擁有不同的權限。

2)基于鏡像的複制政策:鏡像可以在多個Harbor執行個體之間進行複制(同步)。

3)支援 LDAP/AD:Harbor 可以內建企業内部已有的 AD/LDAP(類似資料庫的一張表),用于對已經存在的使用者認證和管理。

4)鏡像删除和垃圾回收:鏡像可以被删除,也可以回收鏡像占用的空間。

5)圖形化使用者界面:使用者可以通過浏覽器來浏覽,搜尋鏡像倉庫以及對項目進行管理。

6)審計管理:所有針對鏡像倉庫的操作都可以被記錄追溯,用于審計管理。

7)支援 RESTful API:RESTful API 提供給管理者對于 Harbor 更多的操控, 使得與其它管理軟體內建變得更容易。

8)Harbor和docker registry的關系:Harbor實質上是對docker registry做了封裝,擴充了自己的業務模闆。

Harbor的構成

Harbor 在架構上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六個元件。

Docker——harbor私有倉庫部署Harbor概述Harbor部署
Harbor元件 說明
Proxy Harbor 的 Registry、UI、Token 服務等元件,都處在 nginx 反向代理後邊。該代理将來自浏覽器、docker clients 的請求轉發到後端不同的服務上。
Registry 負責儲存 Docker 鏡像,并處理 Docker push/pull 指令。由于要對使用者進行通路控制,即不同使用者對 Docker 鏡像 有不同的讀寫權限,Registry 會指向一個 Token 服務,強制使用者的每次 Docker pull/push 請求都要攜帶一個合法的 Token, Registry 會通過公鑰對 Token 進行解密驗證。
Core services Harbor的核心功能,主要提供以下3個服務: 1)UI(harbor-ui): 提供圖形化界面,幫助使用者管理 Registry 上的鏡像(image), 并對使用者進行授權。 2)WebHook:為了及時擷取Registry 上image 狀态變化的情況,在Registry 上配置 Webhook,把狀态變化傳遞給 UI 子產品。 3)Token 服務:負責根據使用者權限給每個 Docker push/pull 指令簽發 Token。Docker 用戶端向 Registry 服務發起的請求, 如果不包含 Token,會被重定向到 Token 服務,獲得 Token 後再重新向 Registry 進行請求。
Database(harbor-db) 為core services提供資料庫服務,負責儲存使用者權限、審計日志、Docker 鏡像分組資訊等資料。
Job services 主要用于鏡像複制,本地鏡像可以被同步到遠端 Harbor 執行個體上。
Log collector(harbor-log) 負責收集其他元件的日志到一個地方。

Harbor 的每個元件都是以 Docker 容器的形式建構的,是以,使用 Docker Compose 來對它進行部署。

總共分為7個容器運作,通過在docker-compose.yml所在目錄中執行 docker-compose ps 指令來檢視, 名稱分别為:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。

其中 harbor-adminserver 主要是作為一個後端的配置資料管理,并沒有太多的其他功能。harbor-ui 所要操作的所有資料都通過 harbor-adminserver 這樣一個資料配置管理中心來完成。

Harbor部署

伺服器 IP位址 主要軟體
Harbor伺服器 192.168.163.143 docker-ce、docker-compose、harbor-offline-v1.2.2
client伺服器 192.168.163.142 docker-ce

案例需求

通過Harbor建立Docker私有倉庫

使用圖形化管理Docker私有倉庫鏡像

實驗準備

在服務端安裝docker和docker-compose

用戶端上安裝docker

關閉防火牆

修改主機名

1. 部署 Harbor 服務

Harbor 被部署為多個 Docker 容器,是以可以部署在任何支援 Docker 的 Linux 發行版上。

服務端主機需要安裝Docker 和 Docker Compose。

安裝Docker Compose如下

放入指令壓縮包
cp -p docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署

1)下載下傳 Harbor 安裝程式

  • Harbor:192.168.163.143
//線上下載下傳
wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz

//如果在先下載下傳慢,可以使用上面的連結下載下傳,在拖入
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署

2)配置 Harbor 參數檔案

  • Harbor:192.168.163.143
vim /usr/local/harbor/harbor.cfg

//第5行
hostname = 192.168.163.143
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署

3)啟動 Harbor

  • Harbor:192.168.163.143
sh /usr/local/harbor/install.sh
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署

4)檢視 Harbor 啟動鏡像和容器

  • Harbor:192.168.163.143
#檢視鏡像
docker images

#檢視容器
docker ps -a
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署
  • 檢查服務容器是否開啟
cd /usr/local/harbor/
docker-compose ps
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署

5)在UI界面建立項目

真機

上圖檢查一切正常,此時可以打開浏覽器通路 http://192.168.163.143 的管理頁面,預設的管理者使用者名和密碼是 admin/Harbor12345。

Docker——harbor私有倉庫部署Harbor概述Harbor部署
  • 登入後的頁面
Docker——harbor私有倉庫部署Harbor概述Harbor部署
  • 添加項目并且填寫項目名稱
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署

6)在本地測試倉庫功能

  • Harbor:192.168.163.143

此時可使用 Docker 指令在本地通過 127.0.0.1 來登入和推送鏡像。預設情況下,Register 伺服器在端口 80 上偵聽。

1.登入

docker login -u admin -p Harbor12345 http://127.0.0.1
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署

2.下載下傳鏡像進行測試

docker pull nginx
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署

3.鏡像打标簽

docker tag nginx 127.0.0.1/testproject/nginx:v1
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署

4.上傳鏡像到Harbor

docker push 127.0.0.1/testproject/nginx:v1
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署

5.驗證是否上傳成功

Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署

7)在用戶端上傳鏡像

  • client:192.168.163.142

    上述操作都是在 Harbor 伺服器本地操作。如果其他用戶端上傳鏡像到 Harbor,就會報如下錯誤。出現這問題的原因 Docker Registry 互動預設使用的是 HTTPS,但是搭建私有鏡像預設使用的是 HTTP 服務,是以與私有鏡像互動時出現以下錯誤。

docker login  -u admin -p Harbor12345 http://192.168.163.143
#-------------------輸出内容------------------------------------------
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.163.143/v2/: dial tcp 192.168.163.143:443: connect: connection refused
           
  • 解決方法
vim /usr/lib/systemd/system/docker.service
#--------------------修改内容-----------------------------------
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.163.143 --containerd=/run/containerd/containerd.sock
#---------------------------------------------------------------

//重新開機服務
systemctl daemon-reload 
systemctl restart docker

//再次登入
docker login  -u admin -p Harbor12345 http://192.168.163.143
#----------------------輸出内容--------------------------------------------
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
#--------------------------------------------------------------------
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署
  • 檢視
docker pull tomcat

docker images

docker tag tomcat 192.168.163.143/testproject/tomcat:v2

docker push 192.168.163.143/testproject/tomcat:v2
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署

2. 維護管理Harbor

  • 可以使用 docker-compose 來管理 Harbor。一些有用的指令如下所示,必須在與docker-compose.yml 相同的目錄中運作。
  • 修改 Harbor.cfg 配置檔案所需選項的步驟

    要更改 Harbour 的配置檔案時,請先停止現有的 Harbor 執行個體并更新 Harbor.cfg;然後運作 prepare 腳本來填充配置;最後重新建立并啟動 Harbour 的執行個體。

1)停止現有的 Harbor 執行個體

cd /usr/local/harbor
docker-compose down -v
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署

2)修改配置檔案 Harbor.cfg

vim harbor.cfg
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署

3)運作 prepare 腳本來填充配置

./prepare
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署

4)重新開機服務

docker-compose up -d
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署

3.建立 Harbor 使用者

Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署
Docker——harbor私有倉庫部署Harbor概述Harbor部署
  • 删除之前打标簽的鏡像, 在用戶端上操作
docker rmi 192.168.163.143/testproject/tomcat:v2
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署
  • 測試建立的新使用者能否使用
//登出登入
docker logout 192.168.163.143

//使用新建立的使用者和密碼登入私有倉庫
docker login 192.168.163.143

//從私有倉庫下載下傳鏡像
docker pull 192.168.163.143/testproject/nginx:v1

//檢視鏡像
docker images
           
Docker——harbor私有倉庫部署Harbor概述Harbor部署

4.移除 Harbor 服務容器以及全部資料

docker-compose down -v
           
rm -rf /data/database/
rm -rf /data/registry/
           

繼續閱讀