Harbor是由VMware團隊爲企業用戶設計的Registry Server開源項目,用戶能夠利用Harbor搭建本身的私有鏡像倉庫。即便你是harbor小白,也能夠從本文快速從認識Harbor到利用Harbor搭建本身的企業級registry server。
mysql
Harbor實質上是對docker registry作了封裝,擴展了本身的業務模塊.下面展現一下docker registry和Harbor的架構圖用以說明。
nginx
Harbor認證過程
一、docker daemon從docker registry拉取鏡像。
二、若是docker registry須要進行受權時,registry將會返回401 Unauthorized響應,同時在響應中包含了docker client如何進行認證的信息。
三、docker client根據registry返回的信息,向auth server發送請求獲取認證token。
四、auth server則根據本身的業務實現去驗證提交的用戶信息是否存符合業務要求。
五、用戶數據倉庫返回用戶的相關信息。
六、auth server將會根據查詢的用戶信息,生成token令牌,以及當前用戶所具備的相關權限信息 。上述就是完整的受權過程.當用戶完成上述過程之後即可以執行相關的pull push操做。認證信息會每次都帶在請求頭中。
Harbor總體架構web
Harbor認證流程sql
A、首先,請求被代理容器監聽攔截,並跳轉到指定的認證服務器。
B、 若是認證服務器配置了權限認證,則會返回401。通知docker client在特定的請求中須要帶上一個合法的token。而認證的邏輯地址則指向架構圖中的core services。
C、 當docker client接受到錯誤code。client就會發送認證請求(帶有用戶名和密碼)到core services進行basic auth認證。
D、 當C的請求發送給ngnix之後,ngnix會根據配置的認證地址將帶有用戶名和密碼的請求發送到core serivces。
E、 core services獲取用戶名和密碼之後對用戶信息進行認證(本身的數據庫或者介入LDAP均可以)。成功之後,返回認證成功的信息。
從上面的docker registry 和 Harbor的架構圖、流程圖能夠看出Harbor的擴展部分爲core services。這部分實現了用戶的認證, 添加了UI模塊已經webhook。
docker
Harbor安裝有三種方式,這裏以online的方式爲例,另外兩種有興趣的童鞋能夠參考Harbor的官方文檔。
Harbor的安裝
一、下載安裝包
二、配置harbor.cfg文件
三、執行install.sh腳本安裝並啓動Harbor
用戶能夠到release頁下載相關文件,解壓tar xvf harbor-online-installer-<version>.tgz。
Harbor配置數據庫
e.g:
email_server =smtp.mydomain.com
email_server_port = 25
email_username=ample_admin@mydomain.com
email_password = abc
email_from = admin sample_admin@mydomain.com
email_ssl = falseswift
默認狀況下,Harbor是把鏡像存儲在本地文件系統中的。可是在生成環境中你可能會考慮到使用其餘的存儲方案來代替本地存儲。好比S三、Openstack Swift、Ceph等等。那麼這個時候你就須要更改templates/registry/config.yml中的存儲配置部分。例如:
storage:
swift:
username: admin
password: ADMIN_PASS
authurl: http://keystone_addr:35357/v3/auth
tenant: admin
domain: default
region: regionOne
container: docker_images
詳細配置能夠參考Registry Configuration Reference
完成安裝並啓動
sudo ./install.sh
登陸並建立本身的首個倉庫試試(初始用戶名/密碼 admin/Harbor12345)
$docker login reg.yourdomain.com
$dockerpushreg.yourdomain.com/myproject/myrepo:mytag
Harbor的生命週期管理 你可使用docker-compose來管理Harbor的生命週期,下面列舉一些有用的經常使用的命令。
Stop Harbor:
$ sudo docker-compose stop
Stopping harbor_proxy_1 ... done
Stopping harbor_ui_1 ... done
Stopping harbor_registry_1 ... done
Stopping harbor_mysql_1 ... done
Stopping harbor_log_1 ... done
Stopping harbor_jobservice_1 ... done
Restart Harbor after stopping:
$ sudo docker-compose start
Starting harbor_log_1
Starting harbor_mysql_1
Starting harbor_registry_1
Starting harbor_ui_1
Starting harbor_proxy_1
Starting harbor_jobservice_1
移除docker container 可是保留相關鏡像文件
sudo docker-compose rm
Going to remove harbor_proxy_1, harbor_ui_1, harbor_registry_1, harbor_mysql_1, harbor_log_1, harbor_jobservice_1
Are you sure? [yN] y
Removing harbor_proxy_1 ... done
Removing harbor_ui_1 ... done
Removing harbor_registry_1 ... done
Removing harbor_mysql_1 ... done
Removing harbor_log_1 ... done
Removing harbor_jobservice_1 ... done
詳細信息能夠參考Docker Compose command-line reference
持久化data和日誌文件 默認狀況下data是被存儲在Harbor host機的/data目錄.無論harbor container是刪除仍是從新建立這裏的數據都是一致存在的。另外harbor的日誌文件默認狀況下是存在/var/log/harbor/目錄下的。
自定義ngnix監聽端口 修改docker-compose.yml文件。
一、替換80端口爲任意存在未被佔用的端口 e.g 8899
proxy:
image: library/nginx:1.11.5
restart: always
volumes:
- ./config/nginx:/etc/nginx
ports:
- 8899:80
- 443:443
depends_on:
- mysql
- registry
- ui
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
二、修改templates/registry/config.yml文件
auth:
token:
issuer: registry-token-issuer
realm: $ui_url:8899/service/token
rootcertbundle: /etc/registry/root.crt
service: token-service
三、運行install.sh來更新並啓動Harbor
$ sudo docker-compose down
$ sudo install.sh
HTTPS 協議的修改和自定義監聽端口修改同樣的操做
Wise2C ∣一個有用的公衆號
服務器