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

Docker已經上市不少年,不是什麼新鮮事物了,不少企業或者開發同窗之前也很少很多有所接觸,可是有實操經驗的人很少,本系列教程主要偏重實戰,儘可能講乾貨,會根據本人理解去作闡述,具體官方概念能夠查閱官方教程,由於本系列教程對前一章節有必定依賴,建議先學習前面章節內容。html

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

教程目的:linux

  • 瞭解harbor是什麼&爲何要用
  • 瞭解harbor的搭建流程
  • 瞭解harbor的基本操做

Harbor基本概念

Harbor是什麼

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

簡單來講,Harbor就是一個開源的鏡像管理倉庫,相似Github同樣,可讓咱們存放一些鏡像文件git

更多詳細內容,能夠查看Harbor 官方文檔github

爲何要用

有動手跟着我前面教程練習的同窗應該都有感覺,以前的Springboot項目每次都須要在服務器建立鏡像,當我有多臺服務器須要用到這個鏡像,我還得重複在每臺服務器上建立一次,那有沒有一箇中間存儲服務幫咱們管理這些鏡像,讓全部的服務器能夠共享這個鏡像文件呢?Harbor的做用就是幫咱們管理鏡像,採用分佈式架構,讓咱們能夠在任意服務器拉去咱們構建好的鏡像文件。而後又會有人問咱們不是已經有docker hub或者 docker hub這些遠程倉庫了嗎?確實,可是當咱們須要搭建一些私有鏡像倉庫,不想把公司項目對外公開的時候,Harbor就頗有用了,就像不少公司也會在本身公司搭建私有的nexus服務器來管理公司內部的應用package。
redis


搭建Harbor鏡像倉庫

下載

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

上傳到服務器

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

[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倉庫拉取鏡像,不須要依賴本地服務器

相關文章
相關標籤/搜索