Harbor私有倉庫的搭建及使用

一、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的代理程序,Harbor的registry、UI、token等服務,通過一個前置的反向代理統一
    接收瀏覽器、Docker客戶端的請求,並將請求轉發給後端不同的服務處理。
Registry:負責存儲Docker的鏡像,並處理docker的pull/push命令。由於我們要對用戶進行訪問
     控制,即不同用戶對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客戶端向Registry服
     務發起的請求,如果不包含token,會被重定向到這裏,獲得token後再重新向Registry進
     行請求。
Database:爲core services提供數據庫服務器,負責存儲用戶權限、審計、Docker image分組信
     息等數據。
Job Services:提供鏡像遠程複製功能,可以把本地鏡像同步到其他Harbor實例中。
Log collector:爲了幫助監控Harbor運行,負責收集其他組件的log,供日後進行分析。

各組件之間的關係如圖所示:
在這裏插入圖片描述

四、Harbor的安裝

環境名稱 版本
系統版本 CentOS Linux release 7.5.1804
docker-ce 19.03.1
Harbor版本 harbor-offline-installer-v1.5.0.tgz
docker-compose版本 1.24.1

1)docker-compose的安裝

#配置阿里的base源和epel源
[root@docker ~]# cat /etc/yum.repos.d/CentOS-Base.repo | grep -v "^#" 
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/os/$basearch/
gpgcheck=0

[root@docker ~]# cat /etc/yum.repos.d/epel.repo 
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
enabled=1
gpgcheck=0

#安裝Python-pip
[root@docker ~]# yum install python2-pip -y
............................................


#升級Python-pip
[root@docker ~]# pip install --upgrade pip

#安裝docker-compose
[root@docker ~]# pip install docker-compose
.................................
ERROR: Cannot uninstall 'requests'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
如果報一上的錯誤我們需要執行以下命令"pip install docker-compose --ignore-installed requests"


#查看docker-compose版本
[root@docker ~]# docker-compose -v
docker-compose version 1.24.1, build 4667896

2)安裝harbor

#下載1.5.0離線安裝包
wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.0.tgz

#解壓並修改配置文件、安裝
[root@docker ~]# cd /application/
[root@docker application]# ls
harbor-offline-installer-v1.5.0.tgz
[root@docker application]# 
[root@docker application]# tar xf harbor-offline-installer-v1.5.0.tgz 
[root@docker application]# cat harbor.cfg |grep -v ^$|grep -v ^#

_version = 1.5.0

hostname = docker #需要寫IP地址或者域名

ui_url_protocol = http

max_job_workers = 50

customize_crt = on

ssl_cert = /data/cert/server.crt #沒有目錄需要創建

ssl_cert_key = /data/cert/server.key #沒有目錄需要創建

secretkey_path = /data

admiral_url = NA

log_rotate_count = 50

log_rotate_size = 200M

http_proxy =

https_proxy =

no_proxy = 127.0.0.1,localhost,ui

email_identity =

email_server = smtp.mydomain.com

email_server_port = 25

email_username = [email protected]

email_password = abc

email_from = admin <[email protected]>

email_ssl = false

email_insecure = false

harbor_admin_password = 12345 #harbor登錄密碼

auth_mode = db_auth

ldap_url = ldaps://ldap.mydomain.com

ldap_basedn = ou=people,dc=mydomain,dc=com

ldap_uid = uid

ldap_scope = 2

ldap_timeout = 5

ldap_verify_cert = true

ldap_group_basedn = ou=group,dc=mydomain,dc=com

ldap_group_filter = objectclass=group

ldap_group_gid = cn

ldap_group_scope = 2

self_registration = on

token_expiration = 30

project_creation_restriction = everyone

db_host = mysql

db_password = root123

db_port = 3306

db_user = root

clair_db_host = postgres

clair_db_password = password

clair_db_port = 5432

clair_db_username = postgres

clair_db = postgres

uaa_endpoint = uaa.mydomain.org

uaa_clientid = id

uaa_clientsecret = secret

uaa_verify_cert = true

uaa_ca_cert = /path/to/ca.pem

registry_storage_provider_name = filesystem

registry_storage_provider_config =


#安裝並啓動
#安裝之前需要啓動docker,如果docker服務重啓了harbor程序也必須要重新啓動
[root@docker harbor]# ./install.sh
..............................................

4)訪問harbor的web界面
啓動完成後,可以直接訪問harbor的IP地址。啓動的是80端口。
賬號爲admin;密碼爲Harbor12345
在這裏插入圖片描述
在這裏插入圖片描述

五、使用Harbor上傳下載鏡像
1)連接登錄harbor

# docker login 192.168.126.155
輸入用戶名admin/Harbor12345
Login Succeeded #顯示此字段說明登錄成功可以上傳下載鏡像

#連接報錯解決
Error response from daemon: Get https://docker/v2/: dial tcp 192.168.13.129:443: connect: connection refused

#報錯分析
Docker自從1.3.X之後docker registry交互默認使用的是HTTPS,但是我們搭建私有鏡像默認使用的是HTTP服務,所以與私有鏡像交時出現以上錯誤。

#解決辦法:
#修改docker的主配置文件
[root@docker harbor]# vim /etc/docker/daemon.json 
{
        "registry-mirrors":["https://registry.docker-cn.com"],
        "insecure-registries":["192.168.126.155"]    #添加信任的IP地址信息
}

#重啓docker服務和harbor應用程序
[root@docker ~]# systemctl daemon-reload 
[root@docker ~]# systemctl restart docker
[root@docker ~]#docker-compose down
[root@docker harbor]# docker-compose up


#再次嘗試登錄
[root@docker ~]# docker login 192.168.126.155
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

2)上傳鏡像
在Harbor上新創建一個項目供上傳使用
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

給本地鏡像打標籤

[root@docker ~]# docker tag  httpd:latest  192.168.126.155/test/httpd:v0.1
[root@docker ~]# docker image ls 192.168.126.155/test/httpd
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
192.168.126.155/test/httpd   v0.1                7d85cc3b2d80        10 days ago         154MB

推送鏡像到遠程倉庫harbor上

[root@docker ~]# docker   push   192.168.126.155/test/httpd:v0.1 
The push refers to repository [192.168.126.155/test/httpd]
9e0ab3afff15: Pushed 
7a0960d9b679: Pushed 
8b16516271d6: Pushed 
5bcb93651a74: Pushed 
1c95c77433e8: Pushed 
v0.1: digest: sha256:90cca2f9c32ad25afa180da6b14f35de9990cb02b9007350a5bccef4cac1e1c9 size: 1367

在這裏插入圖片描述

3)拉取鏡像

[root@docker ~]# docker image rm  192.168.126.155/test/httpd:v0.1 
Untagged: 192.168.126.155/test/httpd:v0.1
Untagged: 192.168.126.155/test/httpd@sha256:90cca2f9c32ad25afa180da6b14f35de9990cb02b9007350a5bccef4cac1e1c9
[root@docker ~]# docker  pull   192.168.126.155/test/httpd:v0.1 
v0.1: Pulling from test/httpd
Digest: sha256:90cca2f9c32ad25afa180da6b14f35de9990cb02b9007350a5bccef4cac1e1c9
Status: Downloaded newer image for 192.168.126.155/test/httpd:v0.1
192.168.126.155/test/httpd:v0.1
[root@docker ~]# docker image ls 192.168.126.155/test/httpd:v0.1 
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
192.168.126.155/test/httpd   v0.1                7d85cc3b2d80        10 days ago         154MB

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章