程式設計師都在學的docker--搭建harbor私有倉庫與管理
文章目錄
一、 harbor概述
Harbor是VMware公司的開源級的企業級DockerRegistry(倉庫)專案,專案地址為 https://github.com/vmware/harbor.
Harbor的目標是幫助使用者迅速搭建一個企業級的DockerRegistry服務。
Harbor以docker公司開源的registry為基礎,提供了管理UI,基於角色的訪問控制(Role Based Access Control),AD/LDAP整合,以及審計日誌(Auditlogging)等企業使用者需求的功能,同時還原生支援中文。
Harbor的每個元件都是以Docker容器的形式構建的,使用docker-compose來對它進行部署。用於部署Harbor的docker-compose模板位於/usr/local/bin/harbor/docker-compose.yml(自定義)
1.1 harbor的特性
1、基於角色控制:使用者與Docker映象倉庫通過"專案"進行組織管理,一個使用者可以對多個映象倉庫在統一名稱空間(projec)裡有不同的許可權
2、圖形化使用者介面:使用者可以通過瀏覽器來瀏覽,檢索當前Docker映象倉庫,管理專案和名稱空間
3、審計管理:所有這怒地映象倉庫的錯都可以被記錄追溯,用於審計管理
4、基於映象的複製策略:映象可以在多個Harbor例項之間進行復制。
5、支援LDAP認證:Harbor的使用者授權可以使用已經存在的使用者。
6、映象刪除和垃圾回收:image可以被刪除並且回收image佔用的空間。
7、簡單的部署功能:harbor提供了online、offline安裝,此外還提供了virtualappliance安裝
8、harbor和docker registry的關係:harbor實質上是對docker registry做了封裝,擴充套件了自己的業務模板。
1. Proxy: Harbor的registry、UI、token services等元件,都處在一個反向代理後邊。該代理將來自瀏覽器、docker clients的請求轉發到後端服務上。
2. Registry: 負責儲存Docker映象,以及處理Docker push/pull請求。因為Harbor強制要求對映象的訪問做許可權控制, 在每一次push/pull請求時,Registry會強制要求客戶端從token service那裡獲得一個有效的token。
3. Core services: Harbor的核心功能,主要包括如下3個服務:
4. UI: 作為Registry Webhook, 以影像使用者介面的方式輔助使用者管理映象。
1) WebHook是在registry中配置的一種機制, 當registry中映象發生改變時,就可以通知到Harbor的webhook endpoint。Harbor使用webhook來更新日誌、初始化同步job等。
2) Token service會根據該使用者在一個工程中的角色,為每一次的push/pull請求分配對應的token。假如相應的請求並沒有包含token的話,registry會將該請求重定向到token service。
3) Database 用於存放工程後設資料、使用者資料、角色資料、同步策略以及映象後設資料。
5. Job services: 主要用於映象複製,本地映象可以被同步到遠端Harbor例項上。
6. Log collector: 負責收集其他模組的日誌到一個地方
1.2 Harbor.cfg 配置檔案解析
Harbor.cfg 配置檔案中有兩類引數:所需引數和可選引數。
1)所需引數 這些引數需要在配置檔案 Harbor.cfg 中設定。
具體引數如下:
- hostname:用於訪問使用者介面和 register 服務。它應該是目標機器的 IP 地址或完全限定的域名(FQDN)
例如 192.168.195.128 或 hub.kgc.cn。不要使用 localhost 或 127.0.0.1 為主機名。
- ui_url_protocol:(http 或 https,預設為 http)用於訪問 UI 和令牌/通知服務的協議。如果公證處於啟用狀態,則此引數必須為 https。
- max_job_workers:映象複製作業執行緒。
- db_password:用於db_auth 的MySQL資料庫root 使用者的密碼。
- customize_crt:該屬性可設定為開啟或關閉,預設開啟。開啟此屬性時,準備指令碼建立私鑰和根證照,用於生成/驗證登錄檔令牌。當由外部來源提供金鑰和根證照時,將此屬性設定為 off。
- ssl_cert:SSL 證照的路徑,僅當協議設定為 https 時才應用。
- ssl_cert_key:SSL 金鑰的路徑,僅當協議設定為 https 時才應用。
- secretkey_path:用於在複製策略中加密或解密遠端 register 密碼的金鑰路徑。
(2)可選引數
這些引數對於更新是可選的,即使用者可以將其保留為預設值,並在啟動 Harbor 後在 Web UI 上進行更新。如果進入 Harbor.cfg,只會在第一次啟動 Harbor 時生效,隨後對這些引數 的更新,Harbor.cfg 將被忽略。
注意:如果選擇通過UI設定這些引數,請確保在啟動Harbour後立即執行此操作。具體來說,必須在註冊或在 Harbor 中建立任何新使用者之前設定所需的auth_mode。當系統中有使用者時(除了預設的 admin 使用者),auth_mode 不能被修改。具體引數如下:
- Email:Harbor需要該引數才能向使用者傳送“密碼重置”電子郵件,並且只有在需要該功能時才需要。
請注意,在預設情況下SSL連線時沒有啟用。如果SMTP伺服器需要SSL,但不支援STARTTLS,那麼應該通過設定啟用SSL email_ssl = TRUE。 - harbour_admin_password:管理員的初始密碼,只在Harbour第一次啟動時生效。之後,此設定將被忽略,並且應 UI中設定管理員的密碼。
請注意,預設的使用者名稱/密碼是 admin/Harbor12345。 - auth_mode:使用的認證型別,預設情況下,它是 db_auth,即憑據儲存在資料庫中。對於LDAP身份驗證,請將其設定為 ldap_auth。
- self_registration:啟用/禁用使用者註冊功能。禁用時,新使用者只能由 Admin 使用者建立,只有管理員使用者可以在 Harbour中建立新使用者。
注意:當 auth_mode 設定為 ldap_auth 時,自注冊功能將始終處於禁用狀態,並且該標誌被忽略。 - Token_expiration:由令牌服務建立的令牌的到期時間(分鐘),預設為 30 分鐘。
- project_creation_restriction:用於控制哪些使用者有權建立專案的標誌。預設情況下, 每個人都可以建立一個專案。
如果將其值設定為“adminonly”,那麼只有 admin 可以建立專案。 - verify_remote_cert:開啟或關閉,預設開啟。此標誌決定了當Harbor與遠端 register 例項通訊時是否驗證 SSL/TLS 證照。將此屬性設定為 off 將繞過 SSL/TLS 驗證,這在遠端例項具有自簽名或不可信證照時經常使用。
預設情況下,Harbour 將映象儲存在本地檔案系統上。在生產環境中,可以考慮使用其他儲存後端而不是本地檔案系統。如 S3、Openstack Swif、Ceph 等。但需要更新 common/templates/registry/config.yml 檔案。
二、 部署Harbor私有倉庫
實驗目的
實現私有倉庫的搭建、映象的上傳與下載、Harbor私有倉庫的管理
實驗環境
VMware虛擬機器centos7兩臺,一臺作為私有倉庫伺服器,另一臺作為客戶端。
實驗引數
主機名 | IP地址 | 所需軟體 |
---|---|---|
harbor | 14.0.0.87 | docker-ce、harbor、docker-compose |
client | 14.0.0.97 | docker-ce |
實驗過程
1. 安裝Harbor
將docker-compose檔案拷貝到當前目錄下
[root@localhost ~]# chmod +x docker-compose
[root@localhost ~]# mv docker-compose /usr/local/bin/
[root@localhost ~]# docker-compose -v ##檢視docker-compose版本
docker-compose version 1.21.1, build 5a3f1a3
將軟體包拷貝到當前目錄下
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg 模板 圖片 下載 桌面
harbor-offline-installer-v1.2.2.tgz 公共 視訊 文件 音樂
[root@localhost ~]# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/ ##解壓到/usr/local/目錄下
2. 修改配置檔案
[root@localhost ~]# cd /usr/local/harbor/
[root@localhost harbor]# vim harbor.cfg
3. 開始執行安裝指令碼
[root@localhost harbor]# sh install.sh
...
省略部分內容
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db ... done
Creating harbor-adminserver ... done
Creating registry ... done
Creating harbor-ui ... done
Creating nginx ... done
Creating harbor-jobservice ... done
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at http://14.0.0.87.
For more details, please visit https://github.com/vmware/harbor .
[root@localhost harbor]# docker ps -a ##檢視執行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
179db813fb24 vmware/harbor-jobservice:v1.2.2 "/harbor/harbor_jobs…" 45 seconds ago Up 43 seconds harbor-jobservice
f6031995c34b vmware/nginx-photon:1.11.13 "nginx -g 'daemon of…" 45 seconds ago Up 42 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx
aa9ced711056 vmware/harbor-ui:v1.2.2 "/harbor/harbor_ui" 45 seconds ago Up 44 seconds harbor-ui
c779546373a1 vmware/harbor-adminserver:v1.2.2 "/harbor/harbor_admi…" 47 seconds ago Up 45 seconds harbor-adminserver
c3cf63d0f940 vmware/harbor-db:v1.2.2 "docker-entrypoint.s…" 47 seconds ago Up 45 seconds 3306/tcp harbor-db
9c27195aeeb5 vmware/registry:2.6.2-photon "/entrypoint.sh serv…" 47 seconds ago Up 45 seconds 5000/tcp registry
0a591c89eb66 vmware/harbor-log:v1.2.2 "/bin/sh -c 'crond &…" 48 seconds ago Up 46 seconds 127.0.0.1:1514->514/tcp harbor-log
4. 登入Harbor
5. 新增專案
6. 上傳映象
上傳映象的步驟
- 登入
docker login -u admin -p Harbor12345 http://127.0.0.1 - 下載映象進行測試
docker pull cirros - 映象打標籤
docker tag cirros 127.0.0.1/myproject-dog/cirros:v1 - 上傳映象到Harbor
docker push 127.0.0.1/myproject-dog/cirros:v1
[root@localhost harbor]# docker login -u admin -p Harbor12345 http://127.0.0.1 ##使用docker命令進行本地登入
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
[root@localhost harbor]# docker pull nginx ##下載nginx映象,這裡是從官網下載
[root@localhost harbor]# docker tag nginx:latest 127.0.0.1/dog/nginx:v1 ##給nginx映象打標籤
[root@localhost harbor]# docker push 127.0.0.1/dog/nginx ##上傳nginx映象到Harbor倉庫
The push refers to repository [127.0.0.1/dog/nginx]
908cf8238301: Pushed
eabfa4cd2d12: Pushed
60c688e8765e: Pushed
f431d0917d41: Pushed
07cab4339852: Pushed
v1: digest: sha256:794275d96b4ab96eeb954728a7bf11156570e8372ecd5ed0cbc7280313a27d19 size: 1362
7. 其他客戶機登入私庫
如果使用登入Harbor的命令直接登入Harbor,就會出現以下的報錯資訊
在新的客戶端伺服器14.0.0.97
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# docker login -u admin -p Harbor12345 http://14.0.0.87
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://14.0.0.87/v2/: dial tcp 14.0.0.87:443: connect: connection refused
可以使用以下的辦法進行解決
第一種:
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service
[root@localhost ~]#
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.245.209 --containerd=/run/containerd/containerd.sock
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@docker ~]# vim /etc/docker/daemon.json
{
"insecure-registries": ["14.0.0.87:5000"]
}
然後進行登入
[root@localhost ~]# docker login -u admin -p Harbor12345 http://14.0.0.87
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
8. 客戶機上傳映象
[root@localhost ~]# docker pull centos:7 ##下載映象
7: Pulling from library/centos
75f829a71a1c: Pull complete
Digest: sha256:19a79828ca2e505eaee0ff38c2f3fd9901f4826737295157cc5212b7a372cd2b
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
[root@localhost ~]# docker tag centos:7 14.0.0.87/dog/centos:v1 ##打標籤
[root@localhost ~]# docker push 14.0.0.87/dog/centos:v1 ##上傳到私庫
The push refers to repository [14.0.0.87/dog/centos]
613be09ab3c0: Pushed
v1: digest: sha256:fe2347002c630d5d61bf2f28f21246ad1c21cc6fd343e70b4cf1e5102f8711a9 size: 529
9.下載映象
- 在harbor伺服器下載其他客戶機上傳的映象
[root@localhost harbor]# docker pull 127.0.0.1/dog/centos:v1 ##下載映象,用127.0.0.1是因為就在harbor伺服器本地下載
v1: Pulling from dog/centos
75f829a71a1c: Pull complete
Digest: sha256:fe2347002c630d5d61bf2f28f21246ad1c21cc6fd343e70b4cf1e5102f8711a9
Status: Downloaded newer image for 127.0.0.1/dog/centos:v1
127.0.0.1/dog/centos:v1
10. 使用者管理
在客戶端用新建的賬戶dogsheng登入
[root@localhost ~]# docker logout 14.0.0.87 ##首先退出之前的登入
Removing login credentials for 14.0.0.87
[root@localhost ~]# docker login 14.0.0.87 ##使用登入命令
Username: dogsheng ##輸入登入使用者名稱
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
當專案設為公開後,任何人都有此專案下映象的讀許可權。命令列使用者不需要“docker login”就可以拉取此專案下的映象。
11. Harbor的啟動與停止
如果需要修改Harbor的配置檔案harbor.cfg,因為Harbor是基於docker-compose服務編排的,我們可以使用docker-compose命令重啟Harbor。
啟動
[root@localhost harbor]# docker-compose up -d
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating registry ... done
Creating harbor-adminserver ... done
Creating harbor-db ... done
Creating harbor-ui ... done
Creating nginx ... done
Creating harbor-jobservice ... done
停止
[root@localhost harbor]# docker-compose down -v
Stopping harbor-jobservice ... done
Stopping nginx ... done
Stopping harbor-ui ... done
Stopping harbor-adminserver ... done
Stopping harbor-db ... done
Stopping registry ... done
Stopping harbor-log ... done
Removing harbor-jobservice ... done
Removing nginx ... done
Removing harbor-ui ... done
Removing harbor-adminserver ... done
Removing harbor-db ... done
Removing registry ... done
Removing harbor-log ... done
Removing network harbor_harbor
相關文章
- Docker搭建Harbor私有倉庫Docker
- Docker--harbor私有倉庫部署與管理Docker
- Docker-------私有倉庫 Harbor 的搭建Docker
- Docker搭建私有倉庫Registry&HarborDocker
- 【Harbor學習筆記】-教你快速搭建Docker私有倉庫筆記Docker
- 手把手教你搭建Docker私有倉庫HarborDocker
- Docker私有倉庫之Harbor神器Docker
- 搭建Harbor 映象倉庫
- 微服務探索之路03篇-docker私有倉庫Harbor搭建+Kubernetes(k8s)部署私有倉庫的映象微服務DockerK8S
- containerd 配置使用私有映象倉庫 harborAI
- Harbor-私有映象倉庫的安裝部署
- Docker倉庫之Registry私有映象倉庫的搭建與使用Docker
- Docker倉庫之Harbor企業級映象倉庫的搭建與使用Docker
- Harbor倉庫搭建及使用
- NPM 私有倉庫的搭建NPM
- 用Docker搭建cnpm私有倉庫以及私有倉庫的使用DockerNPM
- docker 私有倉庫搭建Docker
- 搭建python私有倉庫Python
- gitlab私有倉庫搭建Gitlab
- docker搭建私有倉庫Docker
- 容器技術之Docker私有映象倉庫harborDocker
- Docker 企業級映象倉庫 Harbor 的搭建與維護Docker
- 搭建私有的Composer倉庫
- 搭建私有YUM倉庫與內網映象站內網
- 部署docker-consul群集,Harbor構建Docker私有倉庫Docker
- Linux搭建私有軟體倉庫Linux
- 使用verdaccio 搭建npm私有倉庫NPM
- 使用 SVN 搭建 Composer 私有倉庫
- 使用verdaccio搭建私有npm倉庫NPM
- Kubernetes-5-2:Harbor倉庫的幾種高可用方案與搭建
- Docker入門-搭建docker私有倉庫Docker
- docker使用容器搭建本地私有倉庫Docker
- Docker基礎-搭建本地私有倉庫Docker
- 使用 docker + verdaccio 搭建npm私有倉庫DockerNPM
- 私有化輕量級持續整合部署方案--06-私有映象倉庫-Harbor
- 使用 Satis 搭建私有的 Composer 包倉庫
- 使用Github搭建Maven私有遠端倉庫GithubMaven
- Jenkins之Nexus搭建Maven私有倉庫教程JenkinsMaven