Harbor介紹
harbor是一個docker私有鏡像倉庫,雖然docker官方提供了公共的鏡像倉庫(Docker Hub),但是從安全和效率等方面考慮,部署私有環境內的Registry也是非常必要的。Harbor是由VMware公司開源的企業級的Docker Registry管理項目。
docker官方提供了一個私有鏡像倉庫 docker Registry,安裝部署容易,安裝一個Registry容器就可以使用了。
但是Registry有以下缺點:
# 沒有圖形界面
# 沒有項目管理
# 沒有用戶權限控制
# 看不到鏡像操作記錄
Harbor的優勢:
圖形管理界面。
按項目管理鏡像。
獨立的用戶管理,不同用戶可以操作不同鏡像,細粒度的權限控制,包含create、push 、pull、delete。
鏡像管理。
標簽管理。
操作日志管理。
【Harbor 安裝步驟】:
第1步:安裝harbor前期做准備
使用harbor要先安裝docker及docker-compose, docker及docker-compose安裝教程請參考 【centos 7使用國內源安裝docker及docker-compose】
docker與docker-compose安裝教程地址:https://www.cnblogs.com/yyee/p/12905165.html
第2步:下載 Harbor離線安裝包
從harbor官網下載離線安裝包,下載地址:https://github.com/goharbor/harbor/releases
下載當前最新版本harbor 1.10.1,離線包大小為658M 。
下載完離線包之后,將離線安裝包【harbor-offline-installer-v1.10.1.tgz】上傳到centos服務器。比如將文件上傳到 centos的 /tools/harbor/harbor-offline-installer-v1.10.1.tgz
第3步,創建https證書
# 創建證書目錄,並賦予權限 mkdir -p /cert/harbor chmod -R 777 /cert/harbor cd /cert/harbor # whereis openssl 檢查是否有安裝openssl,如果沒有先安裝openssl組件,如果有就不用安裝了 whereis openssl yum install openssl # 創建服務器證書密鑰文件harbor.key openssl genrsa -des3 -out harbor.key 2048 # 輸入密碼,確認密碼,自己隨便定義,但是要記住,后面會用到。 # 創建服務器證書的申請文件harbor.csr openssl req -new -key harbor.key -out harbor.csr # 輸入密鑰文件的密碼, 然后一路回車 # 備份一份服務器密鑰文件 cp harbor.key harbor.key.org # 去除文件口令 openssl rsa -in harbor.key.org -out harbor.key # 輸入密鑰文件的密碼 # 創建一個自當前日期起為期十年的證書 harbor.crt openssl x509 -req -days 3650 -in harbor.csr -signkey harbor.key -out harbor.crt
第4步,解壓軟件包,修改配置文件
先進入harbor離線包上傳的目錄,解壓離線包到/usr/local/harbor下
tar zxf /tools/harbor/harbor-offline-installer-v1.10.1.tgz -C /usr/local/ ls /usr/local/harbor
解壓軟件包之后有這些文件及目錄:
配置harbor.yml 文件
vi /usr/local/harbor/harbor.yml
主要修改以下地方:
# 將hostname改成本機IP或域名,不要用localhost,127.0.0.1或0.0.0.0,冒號后面都有一個空格 hostname: 192.168.0.101
ui_url_protoc0l: https
# 將http端口改成10080,因為默認用的80端口已經被占用,http可以指定任意端口 http: port: 10080 # 配置https的端口,只能使用443端口,更改證書路徑,證書路徑為剛剛生成的https證書的實際路徑 https: port: 443 certificate: /cert/harbor/harbor.crt private_key: /cert/harbor/harbor.key # 修改后台管理密碼 harbor_admin_password: harbor12345 # harbor的內部數據庫密碼 database: password: root123 # 修改harbor數據存儲路徑與日志存儲路徑,目錄要先創建好並賦予777權限 data_volume: /data/harbor-data # 修改日志存放路徑,默認路徑為/var/log/harbor log: local: localtion: /data/harbor-log
第5步,安裝harbor
執行harbor安裝腳本
cd /usr/local/harbor ./install.sh
安裝的時候如果出現下面的異常,是因為關閉防火牆導致,需要重啟docker
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-61f0da3c6876 -j RETURN: iptables: No chain/target/match by that name.
出現上面這種錯誤,要重啟docker,然后重新安裝harbor
systemctl daemon-reload systemctl restart docker.service cd /usr/local/harbor ./install.sh
安裝成功后輸出下面的信息:
在瀏覽器地址輸入:https://192.168.0.101:10443,打開harbor登錄頁面
用戶名:admin,密碼:harbor12345
登錄成功后進入后台主頁:
第6步,docker信任配置
要讓docker可以訪問harbor,需要將harbor域名或IP設置為docker的受信任倉庫,修改配置文件 /etc/docker/daemon.json ,增加docker受信任IP或域名。
vi /etc/docker/daemon.json
追加內容:
{ "insecure-registries": ["192.168.0.101:10080"] }
拷貝https證書文件harbor.crt到 /etc/docker/certs.d/serverIp 文件夾。每個docker都要拷貝證書文件。
mkdir –p /etc/docker/certs.d/192.168.0.101 cp /cert/harbor/harbor.crt /etc/docker/certs.d/192.168.0.101/ca.crt #注意,拷貝過去的證書文件名為 ca.crt
重啟docker
#重啟docker systemctl daemon-reload systemctl restart docker.service
重啟harbor
cd /usr/local/harbor ./prepare docker-compose down docker-compose up -d
第7步,將本地業務鏡像push到harbor
首先在harbor中新建一個項目,項目名稱為【eshop】
用docker登錄harbor
docker login 192.168.0.101:10080 -u 用戶名 -p 密碼
登錄成功輸出以下信息:
給本地鏡像打上tag標記,打標記的時候要加上項目名稱。
# docker tag 本地鏡像名:版本號 ip:port/項目名稱/遠程鏡像名:版本號,如果不加版本號表示最新版本 docker tag demo1.mvcone:v1.0.1 192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1 # 上傳鏡像到harbor docker push 192.168.0.101:10080/eshop/demo1.mvconev:v1.0.1
push成功輸入以下信息:
在harbor后台管理中查看eshop項目下的鏡像
點擊鏡像名稱,查看鏡像版本號
【上傳鏡像遇到的坑: 】
如果不在harbor中新建項目,或者創建tag的時候不加項目名稱,在上傳鏡像時會發生錯誤:received unexpected HTTP status: 500 Internal Server Error ,所以docker tag 打標簽的時候要一定要加上項目名稱。
#push不加項目名稱的鏡像出現錯誤,下面是錯誤方法: # docker tag 本地鏡像名:v1.0.1 ip:port/遠程鏡像名:v1.0.1 docker tag demo1.mvcone:v1.0.1 192.168.0.101:10080/demo1.mvcone:v1.0.1
docker push 192.168.0.101:10080/demo1.mvcone:v1.0.1
#應該這樣寫
docker tag demo1.mvcone:v1.0.1 192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1 # 上傳鏡像到harbor docker push 192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1
這樣在push鏡像時出現500 Internal Server Error錯誤:
第8步,為剛才上傳到harbor的鏡像創建一個容器
eshop/demo1.mvcone鏡像已經上傳到harbor,現在要用eshop/demo1.mvcone鏡像創建一個容器,測試一下容器是否跑得起來。
步驟:
(1) 刪除本地鏡像 192.168.0.101:10080/eshop/demo1.mvcone
docker rmi 192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1
(2)從harbor上 拉取eshop/demo1.mvcone 鏡像到本地
docker pull 192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1 #從harbor上拉取像鏡要寫全路徑, IP地址:端口/項目名稱/鏡像名:版本號
(3) 創建 192.168.0.101:10080/eshop/demo1.mvcone 鏡像的容器,以8001端口運行
docker run -d --name my.eshop.demo1.mvcone -p 8001:50001 -v /appdata/mvcone 192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1
--name 容器名
-d 后台運行容器
-p 參數:8001是docker對外暴露的端口,可以任意指定,50001是Dockerfile文件配置的docker內部運行端口,不可以隨意指定。
-v 參數,數據卷,容器的數據存放路徑。
192.168.0.101:10080/eshop/demo1.mvcone:v1.0.1 是鏡像名
(4) 查看docker中是否運行着剛剛創建的容器
docker ps
從截圖上可以看出 my.ehop.demo1.mvcone 容器已經創建並於處運行狀態。
(5) 用瀏覽器驗證容器運行項目的效果
第9步,harbor停止/重啟/御載
重啟harbor:
cd /usr/local/harbor docker-compose down ./prepare #配置文件有改動時需要執行 docker-compose up -d
關閉harbor
cd /usr/local/harbor docker-compose down -v
# 或者
docker-compose stop
卸載Harbor
cd /usr/local/harbor docker-compose stop rm -rf /usr/local/harbor