Docker深入淺出系列 | 5分鍾搭建你的私有鏡像倉庫


Docker已經上市很多年,不是什么新鮮事物了,很多企業或者開發同學以前也不多不少有所接觸,但是有實操經驗的人不多,本系列教程主要偏重實戰,盡量講干貨,會根據本人理解去做闡述,具體官方概念可以查閱官方教程,因為本系列教程對前一章節有一定依賴,建議先學習前面章節內容。

本系列教程導航:
Docker深入淺出系列 | 容器初體驗
Docker深入淺出系列 | Image實戰演練
Docker深入淺出系列 | 單節點多容器網絡通信
Docker深入淺出系列 | 容器數據持久化
Docker深入淺出系列 | 單機Nginx+Springboot實戰
Docker深入淺出系列 | Docker Compose多容器實戰

教程目的:

  • 了解harbor是什么&為什么要用
  • 了解harbor的搭建流程
  • 了解harbor的基本操作

Harbor基本概念

Harbor是什么

官方概念: Harbor是一個開放源代碼容器映像鏡像表,可通過基於角色的訪問控制來保護鏡像,掃描鏡像中的漏洞並將鏡像簽名為受信任。 作為CNCF孵化項目,Harbor提供合規性,性能和互操作性,以幫助您跨Kubernetes和Docker等雲原生計算平台持續,安全地管理鏡像。

簡單來說,Harbor就是一個開源的鏡像管理倉庫,類似Github一樣,可以讓我們存放一些鏡像文件

更多詳細內容,可以查看Harbor 官方文檔

為什么要用

有動手跟着我前面教程練習的同學應該都有感受,之前的Springboot項目每次都需要在服務器創建鏡像,當我有多台服務器需要用到這個鏡像,我還得重復在每台服務器上創建一次,那有沒有一個中間存儲服務幫我們管理這些鏡像,讓所有的服務器可以共享這個鏡像文件呢?Harbor的作用就是幫我們管理鏡像,采用分布式架構,讓我們可以在任意服務器拉去我們構建好的鏡像文件。然后又會有人問我們不是已經有docker hub或者 docker hub這些遠程倉庫了嗎?確實,但是當我們需要搭建一些私有鏡像倉庫,不想把公司項目對外公開的時候,Harbor就很有用了,就像很多公司也會在自己公司搭建私有的nexus服務器來管理公司內部的應用package。


搭建Harbor鏡像倉庫

下載

到github選擇一個harborrelease版本下載
https://github.com/goharbor/harbor/releases

上傳到服務器

上傳到你的linux服務器,我這里沿用上一章創建的manager節點

[root@manager-node harbor]# ls
common.sh              harbor.yml  LICENSE
harbor.v1.10.1.tar.gz  install.sh  prepare

上面是harbor應用解壓后的文件

修改harbor配置

修改harbor配置文件
harbor.yml

#設置域名
hostname: 192.168.101.11

#設置http參數
# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 8090
  
#設置管理員密碼
harbor_admin_password: evan123

#屏蔽https
#https:
  # https port for harbor, default is 443
 # port: 443

上面修改了hostname為我虛擬機的ip,端口把默認80端口替換成8090,並且修改了管理員密碼為evan123。需要注意,我這里屏蔽了https,如果大家需要開啟https,需要配置證書和key到指定位置

開啟Docker Http訪問權限

Docker默認是不支持http訪問注冊表,否則后面使用docker去訪問harbor服務,會報如下錯誤:

http: server gave HTTP response to HTTPS client

這里需要先修改下/etc/docker/daemon.json配置,加入以下配置

{
  "insecure-registries" : ["192.168.101.11:8090"]
}

重啟docker服務

systemctl restart docker

啟動Harbor應用

假如沒有Docker環境,harbor會啟動報錯

[root@manager-node harbor]# sh install.sh 

[Step 0]: checking if docker is installed ...

Note: docker version: 19.03.7

[Step 1]: checking docker-compose is installed ...

Note: docker-compose version: 1.25.0

[Step 2]: loading Harbor images ...
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

需要先安裝Dockerdocker-compose組件,這里就不多說了,大家可以參考前面章節的安裝教程

當啟動Docker后,執行install.sh會自動完成安裝

[root@manager-node harbor]# sh install.sh 
...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-portal ... done
Creating registry      ... done
Creating redis         ... done
Creating harbor-db     ... done
Creating registryctl   ... done
Creating harbor-core   ... done
Creating nginx             ... done
Creating harbor-jobservice ... done
✔ ----Harbor has been installed and started successfully.----

上面顯示已經安裝成功了

訪問Harbor應用

在瀏覽器輸入上面我們配置的ip和端口192.168.101.11:8090,就會看到harbor登陸頁面

登陸Harbor

這里使用我們上面的定義的密碼登陸

  • 賬號 - admin
  • 密碼 - evan123


創建你第一個Harbor項目

創建項目

點擊New會進入項目創建對話框,這里填入項目名稱即可,這里的訪問級別我選擇public

在使用Docker登陸Harbor

在使用Harbor之前,要在docker環境登陸Harbor服務

[root@manager-node harbor]# docker login 192.168.101.11:8090
Username: admin
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

對現有的Image打Tag

  1. 查看現有的Image,這里我在前面教程已經創建了一些image
[root@manager-node credit-facility]# docker images
REPOSITORY                            TAG                              IMAGE ID            CREATED             SIZE
credit-facility-image                 latest                           28948b936fac        2 days ago          130MB
  1. 這里我選擇credit-facility-image打個標簽,新標簽為credit-facility:1.0
docker tag credit-facility-image:latest credit-facility:1.0

發布Image到Harbor

  1. 使用Harbor的ip地址和前面創建好的項目名稱credit-facility進行發布
[root@manager-node harbor]# docker push 192.168.101.11:8090/credit-facility/credit-facility-image
The push refers to repository [192.168.101.11:8090/credit-facility/credit-facility-image]
21f243c9904f: Pushed 
edd61588d126: Pushed 
9b9b7f3d56a0: Pushed 
f1b5933fe4b5: Pushed 
latest: digest: sha256:86a6289143d0a8a4cc94880b79af36416d07688585f8bb1b09fd4d50cd166f46 size: 1159

從上面顯示結果可以看到,我們已經成功上傳鏡像到Harbor倉庫了

拉取Image到服務器

  1. 我們先把之前在本地創建的鏡像刪除,以免后面操作產生混淆
[root@manager-node harbor]# docker image rm 192.168.101.11:8090/credit-facility/credit-facility-image:latest 
Untagged: 192.168.101.11:8090/credit-facility/credit-facility-image:latest
Untagged: 192.168.101.11:8090/credit-facility/credit-facility-image@sha256:86a6289143d0a8a4cc94880b79af36416d07688585f8bb1b09fd4d50cd166f46
  1. 查看本地鏡像列表
[root@manager-node harbor]# docker images
REPOSITORY                            TAG                              IMAGE ID            CREATED             SIZE

現在本地已經沒有任何鏡像

3.從Harbor倉庫拉去鏡像

[root@manager-node harbor]# docker pull 192.168.101.11:8090/credit-facility/credit-facility-image:latest
latest: Pulling from credit-facility/credit-facility-image
Digest: sha256:86a6289143d0a8a4cc94880b79af36416d07688585f8bb1b09fd4d50cd166f46
Status: Downloaded newer image for 192.168.101.11:8090/credit-facility/credit-facility-image:latest
192.168.101.11:8090/credit-facility/credit-facility-image:latest

鏡像已經拉取成功

4.在查看本地鏡像列表驗證下

[root@manager-node harbor]# docker images
REPOSITORY                                                  TAG                              IMAGE ID            CREATED             SIZE
192.168.101.11:8090/credit-facility/credit-facility-image   latest                           28948b936fac        2 days ag

我們的鏡像已經成功安裝到本地了,這樣即便我們以后換了一台服務器,也可以隨時從Harbor倉庫拉取鏡像,不需要依賴本地服務器


有興趣的朋友,歡迎加我公眾號一起交流,有問題可以留言,平時工作比較忙,我也抽時間盡量回復每位朋友的留言,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM