日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker 私有仓库与Harbor

發布時間:2024/9/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker 私有仓库与Harbor 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一: 搭建本地私有倉庫
    • 1.1 下載registry 鏡像,添加鏡像地址
      • 1.1.1 下載registry 鏡像
      • 1.1.2 在daemon.json 文件中添加私有鏡像倉庫地址
    • 1.2 運行registry 容器
    • 1.3 為鏡像打標簽,上傳及查看私有倉庫鏡像
      • 1.3.1 為鏡像打標簽,上傳
      • 1.3.2查看私有倉庫的鏡像和從私有倉庫下載鏡像
  • 二: Harbor 私有倉庫
    • 2.1 什么是harbor
    • 2.2 Harbor特性
    • 2.3 Harbor的構成
  • 三: Harbor部署
    • 3.1 部署Docker Compose
    • 3.2 部署Harbor服務
      • 3.2.1 下載軟件包
      • 3.2.2修改harbor安裝的配置文件
      • 3.2.3 關于Harbor.cfg配置文件的兩類參數
    • 3.3 啟動Harbor,查看Harbor啟動鏡像
      • 3.3.1 啟動harbor
      • 3.3.2 查看harbor啟動的鏡像
    • 3.4 創建一個新項目
    • 3.5 在其他客戶端上傳鏡像
      • 3.5.1 在Docker 客戶端配置操作
      • 3.5.2 下載鏡像,上傳鏡像測試
  • 四: 維護管理Harbor
    • 4.1通過Harbor Web創建項目
    • 4.2 創建 Harbor 用戶
    • 4.3 修改Harbor.cfg 配置文件
    • 4.4 移除Harbor服務容器,同時保留鏡像數據/數據庫,并進行遷移
      • 4.4.1 在Harbor 服務容器
        • (1) 移除Harbor服務容器
        • (2) 在項目中的鏡像數據進行打包
      • (3) 重新部署,需要先移除Harbor的服務容器全部數據

一: 搭建本地私有倉庫

1.1 下載registry 鏡像,添加鏡像地址

1.1.1 下載registry 鏡像

[root@host103 ~]# docker pull registry

1.1.2 在daemon.json 文件中添加私有鏡像倉庫地址

[root@host103 ~]# vim /etc/docker/daemon.json {"insecure-registries": ["192.168.23.103:5000"],"registry-mirrors": ["https://k0ki64fw.mirror.aliyuncs.com"] }[root@host103 ~]# systemctl restart docker

1.2 運行registry 容器

[root@host103 ~]# docker run -itd -v /data/registry:/var/lib/registry \ -p 5000:5000 --restart=always --name registry registry:latest

-itd: 在容器中打開一個偽終端進行交互操作,并在后臺運行
-v :把宿主機的/data/registry 目錄綁定到容器/var/lib/registtry 目錄(這個目錄是registry容器中存放鏡像的目錄),來實現數據的持久化
-p :映射端口,訪問宿主機的5000 端口,可以訪問到registry 容器的服務
–restart=always : 重啟策略,在容器退出時總是重啟容器
–name registry : 創建容器名為registry
registry:latest : 這是剛剛pull下來的鏡像

Docker 容器的重啟策略
no: 默認策略,在容器退出時不重啟容器
on-failure : 在容器非正常退出時(退出狀態值非0),才會重啟容器
on-failure:3 在容器非正常退出時,最多重啟3次容器
always :在容器退出時,總是重啟容器
unless-stopped : 在容器退出時,總是重啟容器。但是不考慮在Docker守護進程啟動時就已經停止了的容器

1.3 為鏡像打標簽,上傳及查看私有倉庫鏡像

1.3.1 為鏡像打標簽,上傳

私有倉庫的鏡像名稱格式:
倉庫的主機名或IP地址/項目名/鏡像名:標簽

#為鏡像打上標簽 [root@host103 ~]# docker tag centos:7 192.168.23.103:5000/centos:v1#上傳到私有倉庫 [root@host103 ~]# docker push 192.168.23.103:5000/centos:v1

1.3.2查看私有倉庫的鏡像和從私有倉庫下載鏡像

#列出私有倉庫庫的所有鏡像 [root@host103 ~]# curl http://192.168.23.103:5000/v2/_catalog {"repositories":["centos","centos7"]}#列出私有倉庫的centos鏡像有哪些tag [root@host103 ~]# curl http://192.168.23.103:5000/v2/centos/tags/list {"name":"centos","tags":["v1","v2"]}#先刪除原有的centos的鏡像,在測試私有倉庫下載 [root@host103 ~]# docker rmi 192.168.23.103:5000/centos:v1 [root@host103 ~]# docker pull 192.168.23.103:5000/centos:v1

二: Harbor 私有倉庫

2.1 什么是harbor

  • Harbor 是 VMware 公司開源的企業級 Docker Registry 項目,其目標是幫助用戶迅速搭建一個企業級的 Docker Registry 服務。
  • Harbor以 Docker 公司開源的 Registry 為基礎,提供了圖形管理 UI 、基于角色的訪問控制(Role Based AccessControl) 、AD/LDAP 集成、以及審計日志(Auditlogging) 等企業用戶需求的功能,同時還原生支持中文。
  • Harbor 的每個組件都是以 Docker 容器的形式構建的,使用 docker-compose 來對它進行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。

2.2 Harbor特性

  • 基于角色控制:用戶和倉庫都是基于項目進行組織的,而用戶在項目中可以擁有不同的權限。
  • 基于鏡像的復制策略:鏡像可以在多個Harbor實例之間進行復制(同步)。
  • 支持 LDAP/AD:Harbor 可以集成企業內部已有的 AD/LDAP(類似數據庫的一張表),用于對已經存在的用戶認證和管理。
  • 鏡像刪除和垃圾回收:鏡像可以被刪除,也可以回收鏡像占用的空間。
  • 圖形化用戶界面:用戶可以通過瀏覽器來瀏覽,搜索鏡像倉庫以及對項目進行管理。
  • 審計管理:所有針對鏡像倉庫的操作都可以被記錄追溯,用于審計管理。
  • 支持 RESTful API:RESTful API 提供給管理員對于 Harbor 更多的操控, 使得與其它管理軟件集成變得更容易。
  • Harbor和docker registry的關系:Harbor實質上是對docker registry做了封裝,擴展了自己的業務模板。

2.3 Harbor的構成

Harbor 在架構上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六個組件。

  • Proxy: Harbor 的 Registry、UI、Token 服務等組件,都處在 nginx 反向代理后邊。該代理將來自瀏覽器、docker clients 的請求轉發到后端不同的服務上。
  • Registry: 負責儲存 Docker 鏡像,并處理 Docker push/pull 命令。由于要對用戶進行訪問控制,即不同用戶對 Docker 鏡像 有不同的讀寫權限,Registry 會指向一個 Token 服務,強制用戶的每次 Docker pull/push 請求都要攜帶一個合法的 Token, Registry 會通過公鑰對 Token 進行解密驗證。

Core services: Harbor的核心功能,主要提供以下3個服務:

  • UI(harbor-ui): 提供圖形化界面,幫助用戶管理 Registry 上的鏡像(image), 并對用戶進行授權
  • WebHook:為了及時獲取Registry 上image 狀態變化的情況,在Registry 上配置 Webhook,把狀態變化傳遞給 UI 模塊。
  • Token 服務:負責根據用戶權限給每個 Docker push/pull 命令簽發 Token。Docker 客戶端向 Registry 服務發起的請求, 如果不包含 Token,會被重定向到 Token 服務,獲得 Token 后再重新向 Registry 進行請求。
  • Database(harbor-db):為core services提供數據庫服務,負責儲存用戶權限、審計日志、Docker 鏡像分組信息等數據。
  • Job services: 主要用于鏡像復制,本地鏡像可以被同步到遠程 Harbor 實例上。
  • Log collector(harbor-log): 負責收集其他組件的日志到一個地方。
    Harbor 的每個組件都是以 Docker 容器的形式構建的,因此,使用 Docker Compose 來對它進行部署。
    總共分為7個容器運行,通過在docker-compose.yml所在目錄中執行 docker-compose ps 命令來查看, 名稱分別為:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。
    其中 harbor-adminserver 主要是作為一個后端的配置數據管理,并沒有太多的其他功能。harbor-ui 所要操作的所有數據都通過 harbor-adminserver 這樣一個數據配置管理中心來完成。

三: Harbor部署

角色ip
Harbor 服務器192.168.23.103
client 服務器192.168.23.104

3.1 部署Docker Compose

#上傳下載好的docker-compose文件 [root@host103 ~]# ls docker-compose docker-compose [root@host103 ~]# chmod +x docker-compose [root@host103 ~]# mv docker-compose /usr/local/bin/docker-compose#或者從github下載 [root@host103 ~]# curl -L https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

3.2 部署Harbor服務

3.2.1 下載軟件包

#軟件包下載地址 https://github.com/goharbor/harbor/releases/download/ #上傳軟件包到/opt/目錄 [root@host103 opt]# ls harbor-offline-installer-v1.2.2.tgz harbor-offline-installer-v1.2.2.tgz#解壓到/usr/local/目錄 [root@host103 opt]# tar xf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

3.2.2修改harbor安裝的配置文件

[root@host103 opt]# vim /usr/local/harbor/harbor.cfg #第5行,修改,設置Harbor的IP地址或者域名。如果設置為域名,則需要做域名映射 5// hostname = 192.168.23.103 #59行,指定管理員的初始密碼的,默認的用戶名/密碼是 admin/Harbor12345 59// harbor_admin_password = Harbor12345

3.2.3 關于Harbor.cfg配置文件的兩類參數

1、所需參數:這些參數需要在配置文件 Harbor.cfg 中設置。如果用戶更新它們并運行 install.sh 腳本重新安裝 Harbour, 參數將生效。具體參數如下:

  • hostname:用于訪問用戶界面和 register 服務。它應該是目標機器的 IP 地址或完全限定的域名(FQDN),例如 192.168.80.10 或 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 時才應用。
  • secretkey_path:用于在復制策略中加密或解密遠程 register 密碼的密鑰路徑。
    2、可選參數:這些參數對于更新是可選的,即用戶可以將其保留為默認值,并在啟動 Harbor 后在 Web UI 上進行更新。如果進入 Harbor.cfg,只會在第一次啟動 Harbor 時生效,隨后對這些參數的更新,Harbor.cfg 將被忽略。
    注意:如果選擇通過 UI 設置這些參數,請確保在啟動 Harbor 后立即執行此操作。具體來說,必須在注冊或在 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 文件。

3.3 啟動Harbor,查看Harbor啟動鏡像

3.3.1 啟動harbor

因為harbor 會創建鏡像,并根據鏡像啟動容器,所以,在啟動harbor前,已有的容器名不可以占用以下容器名

  • harbor-jobservice
  • nginx
  • harbor-ui
  • harbor-db
  • registry
  • harbor-adminserver
  • harbor-log
[root@host103 opt]# cd /usr/local/harbor/ [root@host103 harbor]# ./install.sh .....

3.3.2 查看harbor啟動的鏡像

#harbor 需要以下的容器名, [root@host103 harbor]# docker ps | awk 'NR >=2{print $NF}' harbor-jobservice nginx harbor-ui harbor-db registry harbor-adminserver harbor-log[root@host103 harbor]# cd /usr/local/harbor/ [root@host103 harbor]# docker-compose psName Command State Ports ------------------------------------------------------------------------------------------------------------------------- harbor-adminserver /harbor/harbor_adminserver Up harbor-db docker-entrypoint.sh mysqld Up 3306/tcp harbor-jobservice /harbor/harbor_jobservice Up harbor-log /bin/sh -c crond && rm -f ... Up 127.0.0.1:1514->514/tcp harbor-ui /harbor/harbor_ui Up nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp,:::443->443/tcp, 0.0.0.0:4443->4443/tcp,:::4443->4443/tcp, 0.0.0.0:80->80/tcp,:::80->80/tcp registry /entrypoint.sh serve /etc/ ... Up 5000/tcp

3.4 創建一個新項目

(1)瀏覽器訪問:http://192.168.23.103 登錄 Harbor WEB UI 界面,默認的管理員用戶名和密碼是 admin/Harbor12345
(2)輸入用戶名和密碼登錄界面后可以創建一個新項目。點擊“+項目”按鈕
(3)填寫項目名稱為“myproject”,點擊“確定”按鈕,創建新項目
(4)此時可使用 Docker 命令在本地通過 127.0.0.1 來登錄和推送鏡像。默認情況下,Registry 服務器在端口 80 上偵聽。
//登錄 Harbor
docker login [-u admin -p Harbor12345] http://127.0.0.1
//下載鏡像進行測試
docker pull nginx
//將鏡像打標簽
格式:docker tag 鏡像:標簽 倉庫IP/項目名稱/鏡像名:標簽
docker tag nginx:latest 127.0.0.1/myproject/nginx:v1
//上傳鏡像到 Harbor
docker push 127.0.0.1/myproject/nginx:v1
(5)在 Harbor 界面 myproject 目錄下可看見此鏡像及相關信息

3.5 在其他客戶端上傳鏡像

以上操作都是在 Harbor 服務器本地操作。如果其他客戶端登錄到 Harbor,就會報如下錯誤。出現這問題的原因為Docker Registry 交互默認使用的是 HTTPS,但是搭建私有鏡像默認使用的是 HTTP 服務,所以與私有鏡像交互時出現以下錯誤。需要配置Docker的啟動參數或者配置/etc/docker/daemon.json
Error response from daemon: Get https://192.168.23.103/v1/users/: dial tcp 192.168.23.103:443: connect: connection refused

3.5.1 在Docker 客戶端配置操作

#方法一:修改daemon.json文件,加上私有倉庫地址 [root@host104 ~]# yum -y install docker [root@host104 ~]# vim /etc/docker/daemon.json {"registry-mirrors": ["https://k0ki64fw.mirror.aliyuncs.com"],"insecure-registries": ["192.168.23.103"] }[root@host104 ~]# systemctl restart docker#此時可以正常登錄 [root@host104 ~]# docker login -u admin -p Harbor12345 http://192.168.23.103 Login Succeeded

#方法二: [root@host104 ~]# echo '{}' > /etc/docker/daemon.json [root@host104 ~]# vim /usr/lib/systemd/system/docker.service #修改啟動項,添加項:--insecure-registry 192.168.23.103 13// ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.23.103 --containerd=/run/containerd/containe rd.sock[root@host104 ~]# systemctl daemon-reload [root@host104 ~]# systemctl restart docker #此時可以正常登錄 [root@host104 ~]# docker login -u admin -p Harbor12345 http://192.168.23.103

3.5.2 下載鏡像,上傳鏡像測試

#從Harbor倉庫下載鏡像 [root@host104 ~]# docker pull 192.168.23.103/myproject/nginx:v1 [root@host104 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.23.103/myproject/nginx v1 87a94228f133 6 days ago 133MB#拉取鏡像,修改標簽,上傳鏡像 [root@host104 ~]# docker pull cirros [root@host104 ~]# docker tag cirros:latest 192.168.23.103/myproject/cirros:v2 [root@host104 ~]# docker push 192.168.23.103/myproject/cirros:v2

四: 維護管理Harbor

4.1通過Harbor Web創建項目

在 Harbor 倉庫中,任何鏡像在被 push 到 regsitry 之前都必須有一個自己所屬的項目。單擊“+項目”,填寫項目名稱,項目級別若設置為"私有",則不勾選。如果設置為公共倉庫,則所有人對此項目下的鏡像擁有讀權限,命令行中不需要執行"Docker login"即可下載鏡像,鏡像操作與 Docker Hub 一致。

4.2 創建 Harbor 用戶

(1)創建用戶并分配權限
在 Web 管理界面中單擊系統管理 -> 用戶管理 -> +用戶,
填寫用戶名為“kgc-zhangsan”,郵箱為“kgc-zhangsan@kgc.com”,全名為“zhangsan”,密碼為“Abc123456”,注釋為“管理員”(可省略)。
附:用戶創建成功后,單擊左側“…”按鈕可將上述創建的用戶設置為管理員角色或進行刪除操作,本例不作任何設置。
(2)添加項目成員
單擊項目 -> myproject-kgc-> 成員 -> + 成員,填寫上述創建的用戶 kgc-zhangsan 并分配角色為“開發人員”。
附:此時單擊左側“…”按鈕仍然可對成員角色進行變更或者刪除操作
(3)在客戶端上使用普通賬戶操作鏡像

//刪除上述打標簽的本地鏡像docker rmi 192.168.23.103/myproject/cirros:v2//先退出當前用戶,然后使用上述創建的賬戶 zhangsan 登錄 docker logout 192.168.23.103docker login 192.168.23.103 或 docker login -u zhangsan -p Abc123456 http://192.168.23.103//下載和上傳鏡像進行測試 docker pull 192.168.23.103/myproject/cirros:v2docker tag cirros:latest 192.168.23.103/myproject/cirros:v3 docker push 192.168.23.103/myproject/cirros:v3

4.3 修改Harbor.cfg 配置文件

要更改 Harbour的配置文件中的可選參數時,請先停止現有的 Harbour實例并更新 Harbor.cfg;然后運行 prepare 腳本來填充配置; 最后重新創建并啟動 Harbour 的實例。

[root@host103 ~]# cd /usr/local/harbor/ [root@host103 harbor]# docker-compose down -v

[root@host103 harbor]# pwd /usr/local/harbor#可以對可選參數進行修改。修改完畢后,要運行prepare [root@host103 harbor]# vim harbor.cfg[root@host103 harbor]# ./prepare

[root@host103 harbor]# docker-compose up -d

//如果有以下報錯,需要開啟防火墻 firewalld 服務解決
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))

4.4 移除Harbor服務容器,同時保留鏡像數據/數據庫,并進行遷移

4.4.1 在Harbor 服務容器

(1) 移除Harbor服務容器

[root@host103 harbor]# cd /usr/local/harbor/ [root@host103 harbor]# docker-compose down -v

(2) 在項目中的鏡像數據進行打包

//持久數據,如鏡像,數據庫等在宿主機的/data/目錄下,日志在宿主機的/var/log/Harbor/目錄下[root@host103 harbor]# ls /data/registry/docker/registry/v2/repositories/myproject/ cirros nginx [root@host103 harbor]# cd !$ cd /data/registry/docker/registry/v2/repositories/myproject/ [root@host103 myproject]# tar zcvf /opt/myproject.tar.gz ./*

(3) 重新部署,需要先移除Harbor的服務容器全部數據

[root@host103 myproject]# cd /usr/local/harbor/ [root@host103 harbor]# docker-compose down -v [root@host103 harbor]# rm -rf /data/database [root@host103 harbor]# rm -rf /data/registry#此時容器都被刪除了 [root@host103 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@host103 ~]# mkdir -p /data/registry/docker/registry/v2/repositories/myproject/[root@host103 ~]# tar xf /opt/myproject.tar.gz -C /data/registry/docker/registry/v2/repositories/myproject/#在web 界面重新創建同名的項目,然后重服務[root@host103 harbor]# pwd /usr/local/harbor #重啟服務 [root@host103 harbor]# docker-compose up -d [root@host103 harbor]# docker-compose down -v [root@host103 harbor]# docker-compose up -d

總結

以上是生活随笔為你收集整理的docker 私有仓库与Harbor的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。