Docker深入淺出系列 | 5分鐘搭建你的私有鏡像倉庫
- 2020 年 3 月 17 日
- 筆記
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選擇一個harbor
release版本下載
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?
需要先安裝Docker
和docker-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
- 查看現有的Image,這裡我在前面教程已經創建了一些image
[root@manager-node credit-facility]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE credit-facility-image latest 28948b936fac 2 days ago 130MB
- 這裡我選擇
credit-facility-image
打個標籤,新標籤為credit-facility:1.0
docker tag credit-facility-image:latest credit-facility:1.0
發布Image到Harbor
- 使用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到伺服器
- 我們先把之前在本地創建的鏡像刪除,以免後面操作產生混淆
[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
- 查看本地鏡像列表
[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倉庫拉取鏡像,不需要依賴本地伺服器