目錄
Harbor
Harbor介紹
Harbor的特性
Harbor的構(gòu)成
部署Harbor
搭建本地私有倉庫
Docker容器的重啟策略
部署Docker-compose服務(wù)
部署Harbor服務(wù)
?關(guān)于Harbor.cfg配置文件中兩類參數(shù)
啟動Harbor
查看 Harbor 啟動鏡像
創(chuàng)建一個新項目
在其他客戶端上傳鏡像
維護(hù)管理Harbor
通過 Harbor Web 創(chuàng)建項目
創(chuàng)建 Harbor 用戶
添加項目成員
在客戶端上使用普通賬戶操作鏡像
查看日志
修改 Harbor.cfg 配置文件
移除 Harbor 服務(wù)容器同時保留鏡像數(shù)據(jù)/數(shù)據(jù)庫,并進(jìn)行遷移
Harbor
Harbor介紹
Harbor 是 VMware 公司開源的企業(yè)級 Docker Registry 項目,其目標(biāo)是幫助用戶迅速搭建一個企業(yè)級的 Docker Registry 服務(wù)。
Harbor以 Docker 公司開源的 Registry 為基礎(chǔ),提供了圖形管理 UI 、基于角色的訪問控制(Role Based AccessControl) 、AD/LDAP 集成、以及審計日志(Auditlogging) 等企業(yè)用戶需求的功能,同時還原生支持中文。
Harbor 的每個組件都是以 Docker 容器的形式構(gòu)建的,使用 docker-compose 來對它進(jìn)行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。
Harbor的特性
①基于角色控制:用戶和倉庫都是基于項目進(jìn)行組織的,而用戶在項目中可以擁有不同的權(quán)限。
②基于鏡像的復(fù)制策略:鏡像可以在多個Harbor實例之間進(jìn)行復(fù)制(同步)。
③支持 LDAP/AD:Harbor 可以集成企業(yè)內(nèi)部已有的 AD/LDAP(類似數(shù)據(jù)庫的一張表),用于對已經(jīng)存在的用戶認(rèn)證和管理。
④鏡像刪除和垃圾回收:鏡像可以被刪除,也可以回收鏡像占用的空間。
⑤圖形化用戶界面:用戶可以通過瀏覽器來瀏覽,搜索鏡像倉庫以及對項目進(jìn)行管理。
⑥審計管理:所有針對鏡 像倉庫的操作都可以被記錄追溯,用于審計管理。
⑦支持 RESTful API:RESTful API 提供給管理員對于 Harbor 更多的操控, 使得與其它管理軟件集成變得更容易。
⑧Harbor和docker registry的關(guān)系:Harbor實質(zhì)上是對docker registry做了封裝,擴(kuò)展了自己的業(yè)務(wù)模板。
Harbor的構(gòu)成
Harbor 在架構(gòu)上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六個組件。
●Proxy: 是一個 nginx 的前端代理,Harbor 的 Registry、UI、Token 服務(wù)等組件,都處在 nginx 反向代理后邊。 該代理將來自瀏覽器、docker clients 的請求轉(zhuǎn)發(fā)到后端不同的服務(wù)上。
●Registry: 負(fù)責(zé)儲存 Docker 鏡像,并處理 Docker push/pull 命令。由于要對用戶進(jìn)行訪問控制,即不同用戶對 Docker 鏡像 有不同的讀寫權(quán)限,Registry 會指向一個 Token 服務(wù),強(qiáng)制用戶的每次 Docker pull/push 請求都要攜帶一個合法的 Token, Registry 會通過公鑰對 Token 進(jìn)行解密驗證。
部署Harbor
實驗環(huán)境
Harbor服務(wù)器 192.168.131.100 docker-ce、docker-compose、harbor-offline-v1.2.2
client服務(wù)器 192.168.131.101 docker-ce
搭建本地私有倉庫
首先下載 registry 鏡像
docker pull registry
#在 daemon.json 文件中添加私有鏡像倉庫地址
vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.131.100:5000"], #添加,注意用逗號結(jié)尾
"registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
}
systemctl restart docker.service
#運行 registry 容器
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
---------------------------------------------------------------------------------------
-itd:在容器中打開一個偽終端進(jìn)行交互操作,并在后臺運行
-v:把宿主機(jī)的/data/registry目錄綁定到容器/var/lib/registry目錄(這個目錄是registry容器中存放鏡像文件的目錄),來實現(xiàn)數(shù)據(jù)的持久化;
-p:映射端口;訪問宿主機(jī)的5000端口就訪問到registry容器的服務(wù)了
--restart=always:這是重啟的策略,在容器退出時總是重啟容器
--name registry:創(chuàng)建容器命名為registry
registry:latest:這個是剛才pull下來的鏡像
-------------------------------------------------------------------------------------
為鏡像打標(biāo)簽
docker tag centos:7 192.168.131.100:5000/centos:v1
上傳到私有倉庫
docker push 192.168.131.100:5000/centos:v1
列出私有倉庫的所有鏡像
curl http://192.168.131.100:5000/v2/_catalog
列出私有倉庫的 centos 鏡像有哪些tag
curl http://192.168.131.100:5000/v2/centos/tags/list?
先刪除原有的 centos 的鏡像,再測試私有倉庫下載
docker rmi 192.168.131.100:5000/centos:v1
docker rmi 192.168.131.100:5000/centos:v2
docker pull 192.168.131.100:5000/centos:v1
Docker容器的重啟策略
no:默認(rèn)策略,在容器退出時不重啟容器
on-failure:在容器非正常退出時(退出狀態(tài)非0),才會重啟容器
on-failure:3 :在容器非正常退出時重啟容器,最多重啟3次
always:在容器退出時總是重啟容器
unless-stopped:在容器退出時總是重啟容器,但是不考慮在Docker守護(hù)進(jìn)程啟動時就已經(jīng)停止了的容器
部署Docker-compose服務(wù)
下載或者上傳 Docker-Compose
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
部署Harbor服務(wù)
下載或上傳 Harbor 安裝程序
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/
修改harbor安裝的配置文件
vim /usr/local/harbor/harbor.cfg
--5行--修改,設(shè)置為Harbor服務(wù)器的IP地址或者域名
hostname = 192.168.131.100
--59行--指定管理員的初始密碼,默認(rèn)的用戶名/密碼是admin/Harbor12345
harbor_admin_password = Harbor12345
?關(guān)于Harbor.cfg配置文件中兩類參數(shù)
1、所需參數(shù):這些參數(shù)需要在配置文件 Harbor.cfg 中設(shè)置。如果用戶更新它們并運行 install.sh 腳本重新安裝 Harbor, 參數(shù)將生效。具體參數(shù)如下:
●hostname:用于訪問用戶界面和 register 服務(wù)。它應(yīng)該是目標(biāo)機(jī)器的 IP 地址或完全限定的域名(FQDN),例如 192.168.10.23 或 hub.kgc.cn。不要使用 localhost 或 127.0.0.1 為主機(jī)名。
●ui_url_protocol:(http 或 https,默認(rèn)為 http)用于訪問 UI 和令牌/通知服務(wù)的協(xié)議。如果公證處于啟用狀態(tài),則此參數(shù)必須為 https。
●max_job_workers:鏡像復(fù)制作業(yè)線程。
●db_password:用于db_auth 的MySQL數(shù)據(jù)庫root 用戶的密碼。
●customize_crt:該屬性可設(shè)置為打開或關(guān)閉,默認(rèn)打開。打開此屬性時,準(zhǔn)備腳本創(chuàng)建私鑰和根證書,用于生成/驗證注冊表令牌。當(dāng)由外部來源提供密鑰和根證書時,將此屬性設(shè)置為 off。
●ssl_cert:SSL 證書的路徑,僅當(dāng)協(xié)議設(shè)置為 https 時才應(yīng)用。
●secretkey_path:用于在復(fù)制策略中加密或解密遠(yuǎn)程 register 密碼的密鑰路徑。
2、可選參數(shù):這些參數(shù)對于更新是可選的,即用戶可以將其保留為默認(rèn)值,并在啟動 Harbor 后在 Web UI 上進(jìn)行更新。如果進(jìn)入 Harbor.cfg,只會在第一次啟動 Harbor 時生效,隨后對這些參數(shù)的更新,Harbor.cfg 將被忽略。
注意:如果選擇通過 UI 設(shè)置這些參數(shù),請確保在啟動 Harbor 后立即執(zhí)行此操作。具體來說,必須在注冊或在 Harbor 中創(chuàng)建任何新用戶之前設(shè)置所需的 auth_mode。當(dāng)系統(tǒng)中有用戶時(除了默認(rèn)的 admin 用戶), auth_mode 不能被修改。 具體參數(shù)如下:
●Email:Harbor 需要該參數(shù)才能向用戶發(fā)送“密碼重置”電子郵件,并且只有在需要該功能時才啟用。請注意,在默認(rèn)情況下 SSL 連接時沒有啟用。如果 SMTP 服務(wù)器需要 SSL,但不支持 STARTTLS,那么應(yīng)該通過設(shè)置啟用 SSL email_ssl = TRUE。
●harbor_admin_password:管理員的初始密碼,只在 Harbor 第一次啟動時生效。之后, 此設(shè)置將被忽略,并且應(yīng)在 UI 中設(shè)置管理員的密碼。請注意,默認(rèn)的用戶名/密碼是admin/Harbor12345。
●auth_mode:使用的認(rèn)證類型,默認(rèn)情況下,它是 db_auth,即憑據(jù)存儲在數(shù)據(jù)庫中。對于LDAP身份驗證,請將其設(shè)置為 ldap_auth。
●self_registration:啟用/禁用用戶注冊功能。禁用時,新用戶只能由 Admin 用戶創(chuàng)建,只有管理員用戶可以在 Harbor 中創(chuàng)建新用戶。注意:當(dāng) auth_mode 設(shè)置為 ldap_auth 時,自注冊功能將始終處于禁用狀態(tài),并且該標(biāo)志被忽略。
●Token_expiration:由令牌服務(wù)創(chuàng)建的令牌的到期時間(分鐘),默認(rèn)為 30 分鐘。
●project_creation_restriction:用于控制哪些用戶有權(quán)創(chuàng)建項目的標(biāo)志。默認(rèn)情況下,每個人都可以創(chuàng)建一個項目。 如果將其值設(shè)置為“adminonly”,那么只有 admin 可以創(chuàng)建項目。
●verify_remote_cert:打開或關(guān)閉,默認(rèn)打開。此標(biāo)志決定了當(dāng)Harbor與遠(yuǎn)程 register 實例通信時是否驗證 SSL/TLS 證書。 將此屬性設(shè)置為 off 將繞過 SSL/TLS 驗證,這在遠(yuǎn)程實例具有自簽名或不可信證書時經(jīng)常使用。
啟動Harbor
cd /usr/local/harbor/
在配置好了 harbor.cfg 之后,執(zhí)行 ./prepare 命令,為 harbor 啟動的容器生成一些必要的文件(環(huán)境)
再執(zhí)行命令 ./install.sh 以 pull 鏡像并啟動容器
查看 Harbor 啟動鏡像
cd /usr/local/harbor/
docker-compose ps
創(chuàng)建一個新項目
瀏覽器訪問:http://192.168.131.100 登錄 Harbor WEB UI 界面,默認(rèn)的管理員用戶名和密碼是 admin/Harbor12345
輸入用戶名和密碼登錄界面后可以創(chuàng)建一個新項目。點擊“+項目”按鈕
?填寫項目名稱為“test”,點擊“確定”按鈕,創(chuàng)建新項目
此時可使用 Docker 命令在本地通過 127.0.0.1 來登錄和推送鏡像。默認(rèn)情況下,Registry 服務(wù)器在端口 80 上偵聽
//下載鏡像進(jìn)行測試
docker pull nginx
//將鏡像打標(biāo)簽
格式:docker tag 鏡像:標(biāo)簽 倉庫IP/項目名稱/鏡像名:標(biāo)簽
docker tag nginx:latest 127.0.0.1/test/nginx:v1
//上傳鏡像到 Harbor
docker push 127.0.0.1/test/nginx:v1
在 Harbor 界面 test 目錄下可看見此鏡像及相關(guān)信息
在其他客戶端上傳鏡像
以上操作都是在 Harbor 服務(wù)器本地操作。如果其他客戶端登錄到 Harbor,就會報如下錯誤。出現(xiàn)這問題的原因為Docker Registry 交互默認(rèn)使用的是 HTTPS,但是搭建私有鏡像默認(rèn)使用的是 HTTP 服務(wù),所以與私有鏡像交互時出現(xiàn)以下錯誤。
docker login -u admin -p Harbor12345 http://192.168.131.100
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://192.168.131.100/v2/": dial tcp 192.168.131.100:443: connect: connection refused
在 Docker 客戶端配置操作
解決辦法是:在 Docker server 啟動的時候,增加啟動參數(shù),默認(rèn)使用 HTTP 訪問。
vim /usr/lib/systemd/system/docker.service
--13行--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.131.100 --containerd=/run/containerd/containerd.sock
或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.131.100
重啟 Docker,再次登錄
systemctl daemon-reload
systemctl restart docker
再次登錄 Harbor
docker login -u admin -p Harbor12345 http://192.168.131.100
將自動保存憑據(jù)到/root/.docker/config.json,下次登錄時可直接使用憑據(jù)登錄 Harbor
下載鏡像進(jìn)行測試
docker pull 192.168.131.100/test/nginx:v1
//上傳鏡像進(jìn)行測試
docker pull cirros
docker tag cirros:latest 192.168.131.100/test/cirros:v2
docker push 192.168.131.100/test/cirros:v2
刷新 Harbor 的 Web 管理界面進(jìn)行查看,會發(fā)現(xiàn) test 項目里面有兩個鏡像
維護(hù)管理Harbor
通過 Harbor Web 創(chuàng)建項目
在 Harbor 倉庫中,任何鏡像在被 push 到 regsitry 之前都必須有一個自己所屬的項目。
單擊“+項目”,填寫項目名稱,項目級別若設(shè)置為"私有",則不勾選。如果設(shè)置為公共倉庫,則所有人對此項目下的鏡像擁有讀權(quán)限,命令行中不需要執(zhí)行"Docker login"即可下載鏡像,鏡像操作與 Docker Hub 一致。
創(chuàng)建 Harbor 用戶
1)創(chuàng)建用戶并分配權(quán)限
在 Web 管理界面中單擊系統(tǒng)管理 -> 用戶管理 -> +用戶,填寫用戶名為“l(fā)s-zhangsan”,郵箱為“l(fā)s-zhangsan@zs.com”,全名為“zhangsan”,密碼為“Abc123456”,注釋為“管理員”(可省略)。
附:用戶創(chuàng)建成功后,單擊左側(cè)“...”按鈕可將上述創(chuàng)建的用戶設(shè)置為管理員角色或進(jìn)行刪除操作,本例不作任何設(shè)置。
添加項目成員
單擊項目 -> test-> 成員 -> + 成員,填寫上述創(chuàng)建的用戶ls-zhangsan 并分配角色為“開發(fā)人員”。
附:此時單擊左側(cè)“...”按鈕仍然可對成員角色進(jìn)行變更或者刪除操作
在客戶端上使用普通賬戶操作鏡像
刪除上述打標(biāo)簽的本地鏡像
docker rmi 192.168.131.100/test/cirros:v2
//先退出當(dāng)前用戶,然后使用上述創(chuàng)建的賬戶 kgc-zhangsan 登錄
docker logout 192.168.131.100
docker login 192.168.131.100
或
docker login -u ls-zhangsan -p Abc123456 http://192.168.131.100
//下載和上傳鏡像進(jìn)行測試
docker pull 192.168.131.100/test/cirros:v2
docker tag cirros:latest 192.168.131.100/test/cirros:v3
docker push 192.168.131.100/test/cirros:v3
查看日志
Web 界面日志,操作日志按時間順序記錄用戶相關(guān)操作
修改 Harbor.cfg 配置文件
要更改 Harbor的配置文件中的可選參數(shù)時,請先停止現(xiàn)有的 Harbor實例并更新 Harbor.cfg;然后運行 prepare 腳本來填充配置; 最后重新創(chuàng)建并啟動 Harbor 的實例。
使用 docker-compose 管理 Harbor 時,必須在與 docker-compose.yml 相同的目錄中運行。
cd /usr/local/harbor
docker-compose down -v
vim harbor.cfg #只能修改可選參數(shù)
./prepare
docker-compose up -d
//如果有以下報錯,需要開啟防火墻 firewalld 服務(wù)解決
Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-b53c314f45e8 -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))
systemctl restart firewalld.service
docker-compose up -d
移除 Harbor 服務(wù)容器同時保留鏡像數(shù)據(jù)/數(shù)據(jù)庫,并進(jìn)行遷移
在harbor服務(wù)器上操作
移除 Harbor 服務(wù)容器
cd /usr/local/harbor
docker-compose down -v
把項目中的鏡像數(shù)據(jù)進(jìn)行打包
//持久數(shù)據(jù),如鏡像,數(shù)據(jù)庫等在宿主機(jī)的/data/目錄下,日志在宿主機(jī)的/var/log/Harbor/目錄下
ls /data/registry/docker/registry/v2/repositories/test
cd /data/registry/docker/registry/v2/repositories/test
tar zcvf test.tar.gz ./*
文章來源:http://www.zghlxwxcb.cn/news/detail-444437.html
如需重新部署,需要移除 Harbor 服務(wù)容器全部數(shù)據(jù)文章來源地址http://www.zghlxwxcb.cn/news/detail-444437.html
cd /usr/local/harbor
docker-compose down -v
rm -r /data/database
rm -r /data/registry
到了這里,關(guān)于docker-harbor私有倉庫的部署與管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!