微服務探索之路03篇-docker私有倉庫Harbor搭建+Kubernetes(k8s)部署私有倉庫的鏡像
❝
目錄:
微服務探索之路01篇.net6.0項目本地win10系統docker到伺服器liunx系統docker的貫通 微服務探索之路02篇liunx ubuntu伺服器部署k8s(kubernetes)-kubernetes/dashboard ❞
1.簡介
第一篇提到的docker官方提供了鏡像倉庫是公共的,私有的是需要收費的,所以我們需要在自己的伺服器搭建私有鏡像倉庫,這樣也比較安全。docker官方提供的registry可以快速的搭建,但是它沒有介面管理和高級許可權控制,所以本文採用由 VMware 公司中國團隊為企業用戶設計的 Registry server 開源項目Harbor
2.安裝必須的依賴程式Docker Compose
-
執行 curl -L //get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
,下載Docker Compose到/usr/local/bin目錄下。 -
執行 chmod +x /usr/local/bin/docker-compose
,賦予文件可執行許可權 -
執行 docker-compose -v
,查看版本,如果正常出現版本號就是安裝成功了
以上三個步驟執行完如下圖:

3.安裝Harbor
-
打開//github.com/goharbor/harbor/releases,根據自己所需查找版本號下載相應的版本,這裡直接使用目前最新版本

複製出來的鏈接如://github.com/goharbor/harbor/releases/download/v1.10.10/harbor-offline-installer-v1.10.10.tgz
-
找個目錄下載上面找到的包,如切換到根目錄下 cd
,然後執行下載wget //github.com/goharbor/harbor/releases/download/v1.10.10/harbor-offline-installer-v1.10.10.tgz
;(如果下載速度很慢可以本地下載完再傳到伺服器) -
解壓 tar zxvf 壓縮包的名字
-
進入解壓後的目錄 cd harbor
-
,先備份一下主配置文件 cp harbor.yml harbor.yml.bak
,然後打開修改配置文件vim harbor.yml
;修改文件中的內容如下圖:
6. 執行安裝./install.sh
,出現如下介面就安裝成功了
7. 打開ip:埠進入Harbor登錄介面,帳號默認是admin
,密碼Harbor12345
密碼在上面的harbor.yml配置文件中可以找到,安裝的時候也可以直接修改掉。
-
創建私有倉庫,先創建系統用戶
然後添加項目成員名稱要對應
-
修改docker配置
vim /etc/docker/daemon.json
增加私有倉庫地址,插入一行:"insecure-registries": ["//ip:埠"]
-
重啟docker服務先執行
systemctl daemon-reload
再執行systemctl restart docker
,重啟docker服務後需要執行一下docker-compose up -d
啟動一下harbor
❝
溫馨提示:
以下涉及到的程式碼和鏡像需要結合第一篇里的怎麼打包鏡像和推送鏡像
❞
4.客戶端登錄及推送鏡像至私有倉庫
-
登錄 docker login //ip:埠 --username 用戶名 --password 密碼
,登錄遇到強制https錯誤,因為我們這邊沒有配置Harbor的https支援所以修改本地docker支援訪問http
本地docker重啟之後再重新執行登錄,提示登錄成功字樣Succeeded如下圖
2. 給鏡像加上私有倉庫標籤docker tag 鏡像名:版本號 ip:埠/項目名/鏡像名:版本號
,如圖
3. 執行推送docker push ip:埠/項目名/鏡像名:版本號
查看harbor鏡像倉庫可以看到剛才推送的鏡像了
5.kubernetes(k8s)部署鏡像
-
生成64位的Secret串
base64 -w 0 ~/.docker/config.json
(必須先執行登錄docker才會生成config.json文件,這邊我們是在伺服器執行一下登錄,因為本地的是win10登錄之後沒找到config.json在哪)
-
在k8s介面上直接創建新資源
上圖程式碼如下:
apiVersion: v1
kind: Secret
metadata:
name: wyb01
namespace: test
data:
.dockerconfigjson: ewoxxxxxxxxxxxxxxxxxxxxxxxTwq
type: kubernetes.io/dockerconfigjson
-
查看創建的Secret

-
創建部署的資源複製下面的配置根據需求修改
apiVersion: apps/v1
kind: Deployment
metadata:
name: wyb01
namespace: test
labels:
name: wyb01
spec:
replicas: 2
selector:
matchLabels:
name: wyb01
template:
metadata:
labels:
name: wyb01
spec:
imagePullSecrets:
- name: wyb01
containers:
- name: wyb01
image: ip:埠/wyb01/testzeta:1.0.0
ports:
- containerPort: 35678
imagePullPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
name: wyb01
namespace: test
spec:
type: NodePort
ports:
- port: 35678
targetPort: 35678
NodePort: 30002
selector:
name: wyb01
修改完之後上傳執行
執行成功後你會發現pods裡面多了兩個因為上面的配置文件里replicas這個設置為2了,這邊pod幾個就是根據這個參數生成的,可以根據需求自己調節

-
查看集群對外埠號,我們在配置里設置了30002,由於這個埠已經被佔用所以系統隨機給了一個如下圖訪問的時候以系統給的為準
//伺服器ip:對外埠
成功之後訪問自己的網站就可以看到網站內容了

本章結束
以下為遇到錯誤的記錄和解決方案如下:
-
部署成功了訪問的時候訪問不到,原因是部署yaml文件里埠設置錯誤,容器埠設置應該跟生成鏡像的Dockerfile里的埠保持一致,本文的dockerfile埠設置的是35678,所以配置里的埠都是35678;如果是從第一篇文章里複製的你可能就設置為3100,那yaml就得對應的設置為3100。
-
如果沒有裝Kubernetes Dashboard,可以直接創建yaml文件然後用
kubectl create -f xxxx.ymal
替代介面上創建資源的步驟 -
執行
docker ps -a
可能看到很多個狀態為exited的容器;如果都是沒用的就執行docker rm $(sudo docker ps -qf status=exited)
清理他們