Docker從入門到實戰系列之Dockerhub&私有化倉庫Harbor搭建及使用
前言
在前面的文章中,我們介紹了如何定制鏡像、容器編排,但仿佛對鏡像管理并沒有提及,那么鏡像文件我們是否可以像管理代碼一樣實現push、pull的操作呢?答案是有的,docker-hub就是一款公共倉庫,在上面可以搜索到別人創建好的各種各樣的鏡像,以及管理自己的鏡像;Harbor是一款私有化鏡像倉庫,我們可以把鏡像上傳上去,同一內網下的其他用戶均可以下載使用,因為是部署在自己的服務器,因此對于安全性這方面更有保障。docker-hub和Harbor的關系我們可以類比成GitHub和Gitlab。
一、公共鏡像倉庫Docker-hub
1.docker-hub簡介
公共鏡像倉庫一般是 Docker 官方或者其他第三方組織(阿里云,騰訊云,網易云等)提供的,允許所有人注冊和使用的鏡像倉庫。Docker Hub 是全球最大的鏡像市場,目前已經有超過 10w 個容器鏡像。
2.提交鏡像到倉庫
具體步驟:注冊賬號>>登錄>>創建倉庫>>>linux命令行docker登錄>>修改鏡像名稱(保持與倉庫名稱一致)>>提交鏡像到倉庫
① 創建鏡像倉庫
類似于github上創建代碼倉庫,分為public(公開的,互聯網可見)和private(受保護的,僅自己可見)兩種。
② Linux命令行登錄Docker賬號
③ 修改鏡像名稱,保持與鏡像倉庫一致
④ 提交鏡像到公共倉庫
⑤ 查看鏡像倉庫
二、私有化鏡像倉庫Harbor
1.Harbor簡介
Harbor是由VMware公司開源的企業級的Docker Registry管理項目,它包括權限管理(RBAC)、LDAP、日志審核、管理界面、自我注冊、鏡像復制和中文支持等功能。
作為一個企業級私有 Registry 服務器,Harbor 提供了更好的性能和安全。提升用戶使用 Registry 構建和運行環境傳輸鏡像的效率。Harbor 支持安裝在多個 Registry 節點的鏡像資源復制,鏡像全部保存在私有 Registry 中, 確保數據和知識產權在公司內部網絡中管控。另外,Harbor 也提供了高級的安全特性,諸如用戶管理,訪問控制和活動審計等。
- 基于角色的訪問控制 - 用戶與 Docker 鏡像倉庫通過 “項目” 進行組織管理,一個用戶可以對多個鏡像倉庫在同一命名空間(project)里有不同的權限。
- 鏡像復制 - 鏡像可以在多個 Registry 實例中復制(同步)。尤其適合于負載均衡,高可用,混合云和多云的場景。
- 圖形化用戶界面 - 用戶可以通過瀏覽器來瀏覽,檢索當前 Docker 鏡像倉庫,管理項目和命名空間。
- AD/LDAP 支持 - Harbor 可以集成企業內部已有的 AD/LDAP,用于鑒權認證管理。
- 審計管理 - 所有針對鏡像倉庫的操作都可以被記錄追溯,用于審計管理。
- 國際化 - 已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語言將會添加進來。
- RESTful API - RESTful API 提供給管理員對于 Harbor 更多的操控,使得與其它管理軟件集成變得更容易。
- 部署簡單 - 提供在線和離線兩種安裝工具, 也可以安裝到 vSphere 平臺 (OVA 方式) 虛擬設備。
gitee地址:??https://gitee.com/project_harbor/harbor?utm_source=alading&utm_campaign=repo??
2.Harbor搭建
安裝說明: Harbor的所有服務組件都是在Docker中部署的,所以官方安裝使用Docker-compose快速部署,所以需要安裝 Docker、Docker-compose。由于Harbor是基于Docker Registry V2版本,所以就要求Docker版本不小于1.10.0, Docker-compose版本不小于1.6.0。
① 下載并解壓安裝包
在線下載:
② 編輯配置文件
按照如下內容編輯:
- hostname改為本機ip
- 端口默認80,可以改為其他指定端口
- 注釋掉https的相關配置
③ 準備安裝環境
執行完成后,本地會多一個docker-compose.yml文件和common目錄
④ 安裝harbor
安裝過程中會自動下載harbor鏡像并啟動相關容器。
⑤ 訪問harbor
安裝成功后,即可訪問harbor:http://192.168.1.122:8087,其中:ip為本機ip,端口為配置文件harbor.yml中配置的端口。默認賬號和密碼為:admin Harbor12345
harbor.yml文件中可查看或修改密碼
⑥ 安裝過程中常見問題及解決
- 報錯redis容器重復
原因:本地已存在redis容器,harbor無法啟動redis容器
解決辦法:修改harbor目錄下docker-compose.yml中的redis容器名稱,重新啟動
查看harbor各個容器狀態:
- 報錯registry容器重復
若本地之前已存在registry容器時,harbor安裝過程會報錯,解決方案:刪除原registry容器,重新執行./install.sh進行安裝;若此方式仍報錯,則執行docker-compose up -d啟動各個服務;
3.推送本地鏡像到Harbor
① 創建項目
② Docker登錄
由于之前登錄過docker-hub,所以再次使用“docker login”命令登錄時,默認登錄的還是docker-hub的地址。因此,如果想要登錄harbor,需要在登錄時指定登錄地址。
首次登錄,根據提示輸入harbor用戶名及密碼即可,與前端登錄使用的賬號密碼一致。
由于我前面登錄過一次這個地址,本地會保存認證記錄,因此再次登錄時無需輸入用戶名密碼即可登錄成功。
如遇以下報錯:
則要在/etc/docker/daemon.json文件中將本機ip(端口非80時需要帶上端口號)加入到insecure-registries列表中,并重載配置。
再次登錄后登錄成功:
③ 本地鏡像打tag
鏡像名稱需要命名為:ip:端口號/項目名稱/鏡像名:tag名,才能上傳到該指定項目下,例如rabbitmq鏡像,則名稱為:
192.168.1.122:8087/harbor/rabbitmq:5.7.33
為了方便測試,我直接復制本地的一個鏡像,并重新命名:
④ 推送本地鏡像到Harbor
查看名為harbor的項目下,存在rabbitmq:3.7-management,測試成功。
⑤ 從Harbor拉取鏡像
- 拉取鏡像
從下圖可以看出,MySQL鏡像已經拉取成功
同時,Harbor管理端也能看到最新的拉取時間:
- 基于拉取的鏡像創建容器
進入MySQL容器,登錄MySQL
至此,即完成了"登錄harbor后臺>>創建倉庫>>>docker命令行登錄harbor>>修改鏡像名稱(保持與倉庫名稱一致)>>提交鏡像到倉庫>>拉取鏡像>>基于拉取的鏡像創建容器>>查看容器"這一系列完整的操作。