企業級Docker鏡像倉庫Harbor部署與使用

2021-02-23 DevOps技術棧

在實際生產運維中,往往需要把鏡像發布到幾十、上百臺或更多的節點上。這時單臺Docker主機上鏡像已無法滿足,項目越來越多,鏡像就越來越多,都放到一臺Docker主機上是不行的,我們需要一個像Git倉庫一樣系統來統一管理鏡像。這裡介紹的是一個企業級鏡像倉庫Harbor,將作為我們容器雲平臺的鏡像倉庫中心。

Habor是由VMWare公司開源的容器鏡像倉庫。事實上,Habor是在Docker Registry上進行了相應的企業級擴展,從而獲得了更加廣泛的應用,這些新的企業級特性包括:管理用戶界面,基於角色的訪問控制 ,AD/LDAP集成以及審計日誌等,足以滿足基本企業需求。 


官方地址:https://vmware.github.io

Github:https://github.com/goharbor/harbor

1、Harbor主要功能基於角色訪問控制(RBAC)

在企業中,通常有不同的開發團隊負責不同的項目,鏡像像代碼一樣,每個人角色不同需求也不同,因此就需要訪問權限控制,根據角色分配相應的權限。 
例如,開發人員需要對項目構建這就用到讀寫權限(push/pull),測試人員只需要讀權限(pull),運維一般管理鏡像倉庫,具備權限分配能力,項目經理具有所有權限。 

鏡像複製

可以將倉庫中的鏡像同步到遠程的Harbor,類似於MySQL主從同步功能。

LDAP

Harbor支持LDAP認證,可以很輕易接入已有的LDAP。

鏡像刪除和空間回收

Harbor支持在Web刪除鏡像,回收無用的鏡像,釋放磁碟空間。

圖形頁面管理

用戶很方面搜索鏡像及項目管理。

審計

對倉庫的所有操作都有記錄。

REST API

完整的API,方便與外部集成。

2、Harbor組件

組件功能harbor-adminserver配置管理中心harbor-dbMysql資料庫harbor-jobservice負責鏡像複製harbor-log記錄操作日誌harbor-uiWeb管理頁面和APInginx前端代理,負責前端頁面和鏡像上傳/下載轉發redis會話registry鏡像存儲3、Harbor部署

環境要求:

Harbor安裝有3種方式:

在線安裝:從Docker Hub下載Harbor相關鏡像,因此安裝軟體包非常小

離線安裝:安裝包包含部署的相關鏡像,因此安裝包比較大

OVA安裝程序:當用戶具有vCenter環境時,使用此安裝程序,在部署OVA後啟動Harbor

我們採用離線安裝,首先下載離線安裝包:https://github.com/vmware/harbor/releases

HTTP方式部署

基本配置:

# tar zxvf harbor-offline-installer-v1.7.5.tgz

# cd harbor

# vi harbor.cfg

hostname = 10.206.240.188 # IP位址或者域名訪問

ui_url_protocol = http

harbor_admin_password = Harbor12345 # Web登錄密碼

準備配置文件:

# ./prepare

安裝並啟動Harbor:

# ./install.sh

查看運行狀態:

# docker-compose ps

Name Command State Ports

---

harbor-adminserver /harbor/start.sh Up (healthy)

harbor-db /usr/local/bin/docker-entr ... Up (healthy) 3306/tcp

harbor-jobservice /harbor/start.sh Up

harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp

harbor-ui /harbor/start.sh Up (healthy)

nginx nginx -g daemon off; Up (healthy) 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp

redis docker-entrypoint.sh redis ... Up 6379/tcp

registry /entrypoint.sh serve /etc/ ... Up (healthy) 5000/tcp

部署完成,是不是很簡單呢! 
如果有非Up狀態,先看日誌:

# ls /var/log/harbor/

adminserver.log jobservice.log mysql.log proxy.log redis.log registry.log ui.log

HTTPS方式部署:

如果想以https加密方式提供服務可以參考這個免費的視頻教程:https://ke.qq.com/course/311382
或者參考官方文檔:https://github.com/vmware/harbor/blob/master/docs/configure_https.md 

4、登錄Web頁面


瀏覽器輸入:http://10.206.240.188

帳號:admin  

密碼:Harbor12345

這裡有4個項目,library是默認自帶的,通常用這個存儲一些公共的鏡像,這個項目下鏡像誰都可以pull,但不能push,push需要先登錄。其他3個項目是我自己創建的,請忽略。

5、library項目賦予新用戶push權限

先創建一個用戶:


進入library項目,將用戶加入這個成員:

這樣lizhenliang用戶就具備了對這個library項目的push權限。 
註:創建新項目賦予用戶權限同等方式。

7、上傳鏡像

接下來將剛才構建的鏡像推送到Harbor倉庫,先看看我們要推送的鏡像:

在推送之前,需要注意第一列,這個完整格式是:

registry.ctnrs.com/library/hello-world:latest

鏡像中心域名 項目名稱 名稱 版本

如果鏡像只放在本地存儲REPOSITORY寫什麼都可以,但推送到鏡像倉庫就必須指定倉庫中心地址。 
所以,先打重命名REPOSITORY,其實就是引用源鏡像標記了一個目標鏡像:

# docker image tag nginx-112 10.206.240.188/library/nginx-112

# docker push 10.206.240.188/library/nginx-112

The push refers to repository [10.206.240.188/library/nginx-112]

e1bad6a42a61: Layer already exists

9515f16f0627: Layer already exists

a422b28b5eeb: Preparing

bcc97fbfc9e1: Preparing

denied: requested access to the resource is denied

訪問拒絕,剛說過,push需先登錄:

# docker login 10.206.240.188

Username: lizhenliang

Password:

Login Succeeded

# docker push 10.206.240.188/library/nginx-112

The push refers to repository [10.206.240.188/library/nginx-112]

e1bad6a42a61: Layer already exists

9515f16f0627: Layer already exists

a422b28b5eeb: Pushed

bcc97fbfc9e1: Pushed

latest: digest: sha256:49db3f916abf883198b1fc4b90bae6a57bd5ed48ae4d597a07356a2e85106277 size: 1159

8、下載鏡像

其他Docker主機怎麼下載剛推送的鏡像呢? 
由於我們搭建的Harbor是以HTTP提供服務的,而Docker CLI默認以HTTPS 訪問倉庫,所以要先配置可信任,否則pull鏡像倉庫失敗。如果是HTTPS提供服務就不用配置這一步了。

# vi /etc/docker/daemon.json

{

"registry-mirrors": ["http://bc437cce.m.daocloud.io"],

"insecure-registries": ["10.206.240.188"]

}

# systemctl restart docker

# docker pull 10.206.240.188/library/nginx-112

pull的地址跟push時是一樣的。

推薦閱讀:

高級運維工程師打怪升級之路 【含視頻】

30個Linux Shell腳本經典案例(上)

30個Linux Shell腳本經典案例(中)

30個Linux Shell腳本經典案例(下)

最主流的DevOps技能體系

基於Kubernetes的DevOps流水線實戰 

年輕時偷的懶,遲早是要還的。點亮

相關焦點

  • Harbor企業級私有Docker鏡像倉庫部署
    Harbor介紹與安裝部署,並實現通過http和https協議【自籤發SSL證書】訪問,客戶端如何通過Harbor鏡像倉庫實現鏡像的上傳
  • 企業級Docker倉庫-Harbor
    Harbor是一個用於存儲和分發Docker鏡像的企業級Registry伺服器,由VMware中國研發的團隊負責開發。通過添加一些企業必需的功能特性,例如安全、標識和管理等,擴展了開源Docker Distribution。作為一個企業級私有Registry伺服器,Harbor提供了更好的性能和安全。提升用戶使用Registry構建和運行環境傳輸鏡像的效率。
  • 進階 | 使用 Docker Harbor 部署私有倉庫
    除了把鏡像上傳到 Docker Hub 私有庫和用 Registry 搭建私有鏡像倉庫外,我們還可以用 Docker Harbor 部署私有倉庫
  • 巧用Docker鏡像倉庫Harbor部署私有Mirror服務
    它提供了管理UI, 基於角色的訪問控制(Role Based Access Control),AD/LDAP集成、以及審計日誌(Audit logging) 等企業用戶需求的功能,同時還原生支持中文。Harbor的每個組件都是以Docker容器的形式構建的,使用Docker Compose來對它進行部署。
  • 企業級Docker Registry——Harbor實踐
    、審計、管理界面、自我註冊、HA等企業必需的功能,同時針對中國用戶的特點,設計鏡像複製和中文支持等功能功能特點雲原生倉庫: 憑藉對容器鏡像和 Helmcharts 的支持,Harbor可以作為容器運行時和業務流程平臺等雲原生環境的倉庫 基於角色的訪問控制:用戶和存儲庫通過「項目」進行組織,並且用戶可以對項目下的鏡像或Helm charts具有不同的權限
  • 基於 Harbor 搭建 Docker 私有鏡像倉庫
    第一次使用這個的時候是剛進公司處理的第一個任務的時候,發現 Harbor 就是一個用於存儲和分發 Docker 鏡像的企業級Registry 伺服器。網上找到一個 Harbor 的架構圖:Harbor 是 VMware 公司開源的企業級 DockerRegistry 項目,項目地址為 https://github.com/vmware/harbor。其目標是幫助用戶迅速搭建一個企業級的 Docker registry 服務。
  • Harbor鏡像倉庫(含clair鏡像掃描) - 完整部署記錄
    四、部署Harbor鏡像倉庫1)HTTPS證書自籤如果線上環境有已購買好的HTTPS證書可以直接拿過來用,如果沒有,就在Harbor本機進行HTTPS證書自籤。/[root@k8s-harbor01 ~]# cp 172.16.60.238.key /data/cert/ 2)轉換 172.16.60.238.crt 為172.16.60.238.cert,供Docker使用。
  • Docker和Harbor的使用
    容器是完全使用沙箱機制,相互之間不會有任何接口,更重要的是容器性能開銷極低。Harbor:Docker容器應用的開發和運行離不開可靠的鏡像管理,雖然Docker官方也提供了公共的鏡像倉庫,但是從安全和效率等方面考慮,部署私有環境內的Registry也是非常必要的。
  • ​Kubernetes 集群倉庫 harbor Helm3 部署
    一、簡介Harbor 是一個用於存儲和分發 Docker 鏡像的企業級 Registry 伺服器,通過添加一些企業必需的功能特性,例如安全、標識和管理等,擴展了開源 Docker Distribution。作為一個企業級私有 Registry 伺服器,Harbor 提供了更好的性能和安全。
  • 容器鏡像倉庫之選:企業級容器registry Harbor實踐(上)
    容器雲對應基礎設施層中的容器層。容器目前採用的是Docker, 平臺管理用了谷歌的kubernetes, 容器網絡目前是用的flannel,dns用的skydns, 平臺系統使用的是coreos。容器鏡像倉庫,容器雲的前兩個小版本,我們使用的是開源的Docker Registry,配合nginx搭建容器鏡像私庫,使用還比較穩定,但也發現了它的一些不足。
  • Docker高級篇之Harbor鏡像私服-雲原生核心
    本文給大家介紹下Docker中的常用的鏡像私服倉庫,DockerHub,阿里雲倉庫和Harbor鏡像私服倉庫。在這裡插入圖片描述將鏡像推送到阿里雲鏡像倉庫$ docker login --username=dpb2****83842 registry.cn-hangzhou.aliyuncs.com$ docker
  • Harbor部署-Docker Compose方式
    證書信息)[root@K8S-HARBOR cert]# cfssl certinfo -cert harbor.pem查看CSR(證書籤名請求)信息[root@K8S-HARBOR cert]# cfssl certinfo -csr harbor.csr部署Harbor不建議在
  • 運維(8) Harbor部署和docker推送/拉取鏡像
    一、前言本文將基於docker和docker-compose環境簡單部署Harbor,並通過docker推送/拉取鏡像操作Docker version 20.10.8, build 3967b7ddocker-compose version 1.29.2, build 5becea4c二、部署Harbor# 進入自己的安裝目錄
  • 如何在騰訊雲TKE上搭建Harbor倉庫
    是Docker Registry的更高級的版本,除了提供友好的可視化界面,還能基於角色、用戶進行訪問控制、鏡像漏洞掃描、行為審計、與企業LDAP集成等等。相比起Docker Hub、Registry提供的簡單存儲功能,Harbor的出現可以說是解決企業級別對於鏡像倉庫的功能需求。這裡還有個有趣的說法,harbor是港灣的意思,把容器比喻成貨櫃,貨櫃放在港灣,生動又形象。
  • Harbor2.0快速部署,不怕存儲大爆炸
    默認是用docker-compose部署的當然也可以部署到kubernetes中,本文安裝在docker-compose上,所有需要安裝docker和docker-compose#安裝docker[root@192-168-0-110 ~]#yum install yum-utils [root@192-168-0-110 ~]#yum-config-manager
  • Docker Registry 遷移至 Harbor(4種方法)
    另一臺機器運行著 harbor,假設域名為 harbor.k8s.li。現在 docker registry 中存放了五千個鏡像。harbor 是剛剛部署的,裡面還沒有鏡像。在磁碟和網絡沒有限制的情況下,如何高效地將 docker registry 中的鏡像遷移到 harbor 中呢?
  • 4 種方法將 Docker Registry 遷移至 Harbor
    另一臺機器運行著 harbor,假設域名為 harbor.k8s.li。現在 docker registry 中存放了五千個鏡像。harbor 是剛剛部署的,裡面還沒有鏡像。在磁碟和網絡沒有限制的情況下,如何高效地將 docker registry 中的鏡像遷移到 harbor 中呢?
  • 將 Docker Registry 遷移至 Harbor 的 4 種方法
    另一臺機器運行著 Harbor,假設域名為 harbor.k8s.li。現在 docker registry 中存放了五千個鏡像。Harbor 是剛剛部署的,裡面還沒有鏡像。在磁碟和網絡沒有限制的情況下,如何高效地將 docker registry 中的鏡像遷移到 harbor 中呢?
  • 生產級harbor可用的搭建
    Harbor簡介Harbor是一個用於存儲和分發Docker鏡像的企業級Registry伺服器,通過添加一些企業必需的功能特性,例如安全、標識和管理等,擴展了開源Docker Distribution。作為一個企業級私有Registry伺服器,Harbor提供了更好的性能和安全。
  • Harbor 2.0的飛躍: OCI 兼容的工件倉庫
    :Operator  開源鏡像倉庫 Harbor 2.0 正式發布了!Harbor 2.0 成為符合 OCI(Open Container Initiatives)規範的開源鏡像倉庫,能夠存儲多種雲原生工件(Artifacts),例如,容器鏡像、Helm Chart、OPA、Singularity 等等。