目錄
harbor的簡介
Harbor是一個用於存儲和分發Docker鏡像的企業級Registry服務器,通過添加一些企業必需的功能特性,例如安全、標識和管理等,擴展了開源Docker Distribution。作爲一個企業級私有Registry服務器,Harbor提供了更好的性能和安全。提升用戶使用Registry構建和運行環境傳輸鏡像的效率。Harbor支持安裝在多個Registry節點的鏡像資源複製,鏡像全部保存在私有Registry中, 確保數據和知識產權在公司內部網絡中管控。另外,Harbor也提供了高級的安全特性,諸如用戶管理,訪問控制和活動審計等。
Harbor特性
基於角色的訪問控制 :用戶與Docker鏡像倉庫通過“項目”進行組織管理,一個用戶可以對多個鏡像倉庫在同一命名空間(project)裏有不同的權限。
鏡像複製 : 鏡像可以在多個Registry實例中複製(同步)。尤其適合於負載均衡,高可用,混合雲和多雲的場景。
圖形化用戶界面 : 用戶可以通過瀏覽器來瀏覽,檢索當前Docker鏡像倉庫,管理項目和命名空間。
AD/LDAP 支持 : Harbor可以集成企業內部已有的AD/LDAP,用於鑑權認證管理。
審計管理 : 所有針對鏡像倉庫的操作都可以被記錄追溯,用於審計管理。
國際化 : 已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語言將會添加進來。
RESTful API : RESTful API 提供給管理員對於Harbor更多的操控, 使得與其它管理軟件集成變得更容易。
部署簡單 : 提供在線和離線兩種安裝工具, 也可以安裝到vSphere平臺(OVA方式)虛擬設備。
Harbor組件,Harbor在架構上主要由6個組件構成:
Proxy:Harbor的registry, UI, token等服務,通過一個前置的反向代理統一接收瀏覽器、Docker客戶端的請求,並將請求轉發給後端不同的服務。
Registry: 負責儲存Docker鏡像,並處理docker push/pull 命令。由於我們要對用戶進行訪問控制,即不同用戶對Docker image有不同的讀寫權限,Registry會指向一個token服務,強制用戶的每次docker pull/push請求都要攜帶一個合法的token, Registry會通過公鑰對token 進行解密驗證。
Core services: 這是Harbor的核心功能,主要提供以下服務:
UI:提供圖形化界面,幫助用戶管理registry上的鏡像(image), 並對用戶進行授權。
webhook:爲了及時獲取registry 上image狀態變化的情況, 在Registry上配置webhook,把狀態變化傳遞給UI模塊。
token 服務:負責根據用戶權限給每個docker push/pull命令簽發token. Docker 客戶端向Regiøstry服務發起的請求,如果不包含token,會被重定向到這裏,獲得token後再重新向Registry進行請求。
Database:爲core services提供數據庫服務,負責儲存用戶權限、審計日誌、Docker image分組信息等數據。
Job Services:提供鏡像遠程複製功能,可以把本地鏡像同步到其他Harbor實例中。
Log collector:爲了幫助監控Harbor運行,負責收集其他組件的log,供日後進行分析。
各個組件之間的關係如下圖所示:
harbor的安裝
安裝Harbor需要先安裝docker和docker-compose,docker安裝參考本作者前面的博客,
docker-compose的安裝,先下載二進制文件
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
賦予二進制文件可執行權限
chmod +x /usr/local/bin/docker-compose
測試是否安裝成功
[root@server1 ~]# docker-compose --version
docker-compose version 1.23.2, build 1110ad01
開始安裝harbor,安裝方式分爲在線安裝和離線安裝兩種方式這裏我們安裝v1.10.1版本的
(下載地址:https://github.com/goharbor/harbor/releases)
如果選擇在線安裝直接wget就可以,此處我們採用離線安裝(offline-installer),直接下載安裝包然後解壓
[root@server1 ~]# tar zxf harbor-offline-installer-v1.10.1.tgz
[root@server1 ~]# cd harbor/
[root@server1 harbor]# ls
common.sh harbor.v1.10.1.tar.gz harbor.yml install.sh LICENSE prepare
然後我們編輯harbor,yml文件,修改hostname、https證書路徑、admin密碼(管理員賬號和密碼)
hostname:reg.westos.org
certificate:/root/certs/reg.westos.org.crt
private_key:/root/certs/reg.westos.org.key
harbor_admin_password:Harbor12345
修改完成後編譯運行查看
[root@server1 harbor]# ./prepare
[root@server1 harbor]# ./install.sh
訪問測試
瀏覽器訪問https://reg.westos.org:
登錄成功後
新建一個項目,命名爲 westos,並設置訪問級別爲公開。
鏡像的上傳和拉取
修改文件 /etc/docker/daemon.json然後重啓
[root@server1 harbor]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://ioeo57w5.mirror.aliyuncs.com"]
}
{
"insecure-registries": ["reg.westos.org"]
}
systemctl daemon-reload
systemctl restart docker
- 製作鏡像(標記本地Ubuntu鏡像,將其歸入某一倉庫。)
docker tag ubuntu:latest reg.westos.org/westos/ubuntu:latest
進行本機上傳
首先登錄私有庫
[root@server1 harbor]# docker login reg.westos.org
Username: admin
Password:
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
然後上傳
[root@server1 harbor]# docker push reg.westos.org/westos/ubuntu
然後查看上傳結果
通過結果發現上傳成功
然後我們先刪除原先的鏡像直接拉取
[root@server1 harbor]# docker rmi reg.westos.org/westos/ubuntu
Untagged: reg.westos.org/westos/ubuntu:latest
Untagged: reg.westos.org/cl/ubuntu@sha256:e5dd9dbb37df5b731a6688fa49f4003359f6f126958c9c928f937bec69836320
[root@server1 harbor]# docker pull reg.westos.org/westos/ubuntu
Using default tag: latest
latest: Pulling from westos/ubuntu
Digest: sha256:e5dd9dbb37df5b731a6688fa49f4003359f6f126958c9c928f937bec69836320
Status: Downloaded newer image for reg.westos.org/westos/ubuntu:latest
reg.westos.org/westos/ubuntu:latest
然後我們準備另一臺主機server2
[root@server2 ~]# cat /etc/hosts
172.25.74.1 server1 reg.westos.org #做好解析
daemon文件配置
[root@server2 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://reg.westos.org"]
}
建立證書目錄
[root@server2 ~]# mkdir -p /etc/docker/certs.d/reg.westos.org
把crt證書放到/etc/docker/certs.d/harbor.dinginfo.com目錄下:
[root@server2 ~]# ls /etc/docker/certs.d/reg.westos.org
reg.westos.org.crt
然後,重啓docker
systemctl daemon-reload
systemctl restart docker
然後我們直接登錄
[root@server2 ~]# docker login reg.westos.org
Username: admin
Password:
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
上傳鏡像
[root@server2 ~]# docker tag nginx:latest reg.westos.org/westos/nginx
[root@server2 ~]# docker push reg.westos.org/westos/nginx
網頁端查看
說明上傳成功
測試下載:
[root@server2 ~]# docker pull reg.westos.org/westos/ubuntu
Using default tag: latest
latest: Pulling from westos/ubuntu
5bed26d33875: Pull complete
f11b29a9c730: Pull complete
930bda195c84: Pull complete
78bf9a5ad49e: Pull complete
Digest: sha256:e5dd9dbb37df5b731a6688fa49f4003359f6f126958c9c928f937bec69836320
Status: Downloaded newer image for reg.westos.org/westos/ubuntu:latest
reg.westos.org/westos/ubuntu:latest
harbor配置成功