1. 程式人生 > >Docker深入淺出系列 | 5分鐘搭建你的私有映象倉庫

Docker深入淺出系列 | 5分鐘搭建你的私有映象倉庫

> Docker已經上市很多年,不是什麼新鮮事物了,很多企業或者開發同學以前也不多不少有所接觸,但是有實操經驗的人不多,本系列教程主要偏重實戰,儘量講乾貨,會根據本人理解去做闡述,具體官方概念可以查閱官方教程,因為本系列教程對前一章節有一定依賴,建議先學習前面章節內容。 本系列教程導航: [Docker深入淺出系列 | 容器初體驗](https://www.cnblogs.com/evan-liang/p/12237400.html) [Docker深入淺出系列 | Image實戰演練](https://www.cnblogs.com/evan-liang/p/12244304.html) [Docker深入淺出系列 | 單節點多容器網路通訊](https://www.cnblogs.com/evan-liang/p/12271468.html) [Docker深入淺出系列 | 容器資料持久化](https://www.cnblogs.com/evan-liang/p/12372371.html) [Docker深入淺出系列 | 單機Nginx+Springboot實戰](https:////www.cnblogs.com/evan-liang/p/12390315.html) [Docker深入淺出系列 | Docker Compose多容器實戰](https:////www.cnblogs.com/evan-liang/p/12390315.html) 教程目的: - 瞭解harbor是什麼&為什麼要用 - 瞭解harbor的搭建流程 - 瞭解harbor的基本操作 *** # Harbor基本概念 ![](https://img-blog.csdnimg.cn/20200317213450795.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0V2YW5fTGV1bmc=,size_16,color_FFFFFF,t_70) ## Harbor是什麼 **官方概念:** Harbor是一個開放原始碼容器映像映象表,可通過基於角色的訪問控制來保護映象,掃描映象中的漏洞並將映象簽名為受信任。 作為CNCF孵化專案,Harbor提供合規性,效能和互操作性,以幫助您跨Kubernetes和Docker等雲原生計算平臺持續,安全地管理映象。 簡單來說,Harbor就是一個開源的映象管理倉庫,類似Github一樣,可以讓我們存放一些映象檔案 更多詳細內容,可以檢視[Harbor 官方文件](https://goharbor.io/docs/1.10/working-with-projects/working-with-images/pulling-pushing-images/) ## 為什麼要用 有動手跟著我前面教程練習的同學應該都有感受,之前的Springboot專案每次都需要在伺服器建立映象,當我有多臺伺服器需要用到這個映象,我還得重複在每臺伺服器上建立一次,那有沒有一箇中間儲存服務幫我們管理這些映象,讓所有的伺服器可以共享這個映象檔案呢?Harbor的作用就是幫我們管理映象,採用分散式架構,讓我們可以在任意伺服器拉去我們構建好的映象檔案。然後又會有人問我們不是已經有```docker hub```或者 ```docker hub```這些遠端倉庫了嗎?確實,但是當我們需要搭建一些私有映象倉庫,不想把公司專案對外公開的時候,Harbor就很有用了,就像很多公司也會在自己公司搭建私有的nexus伺服器來管理公司內部的應用package。 ![](https://img-blog.csdnimg.cn/20200317233301687.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0V2YW5fTGV1bmc=,size_16,color_FFFFFF,t_70) *** # 搭建Harbor映象倉庫 ## 下載 到github選擇一個```harbor```release版本下載 ```https://github.com/goharbor/harbor/releases``` ## 上傳到伺服器 上傳到你的linux伺服器,我這裡沿用上一章建立的manager節點 ```bash [root@manager-node harbor]# ls common.sh harbor.yml LICENSE harbor.v1.10.1.tar.gz install.sh prepare ``` 上面是harbor應用解壓後的檔案 ## 修改harbor配置 修改harbor配置檔案 harbor.yml ```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服務,會報如下錯誤: ```bash http: server gave HTTP response to HTTPS client ``` 這裡需要先修改下```/etc/docker/daemon.json```配置,加入以下配置 ```bash { "insecure-registries" : ["192.168.101.11:8090"] } ``` 重啟docker服務 ```bash systemctl restart docker ``` ## 啟動Harbor應用 假如沒有```Docker```環境,```harbor```會啟動報錯 ```bash [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```會自動完成安裝 ```bash [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```登陸頁面 ![](https://img-blog.csdnimg.cn/20200317194843166.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0V2YW5fTGV1bmc=,size_16,color_FFFFFF,t_70) ## 登陸Harbor 這裡使用我們上面的定義的密碼登陸 - 賬號 - ```admin``` - 密碼 - ```evan123``` ![](https://img-blog.csdnimg.cn/20200317195210278.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0V2YW5fTGV1bmc=,size_16,color_FFFFFF,t_70) *** # 建立你第一個Harbor專案 ## 建立專案 點選```New```會進入專案建立對話方塊,這裡填入專案名稱即可,這裡的訪問級別我選擇```public``` ![](https://img-blog.csdnimg.cn/20200317195751440.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0V2YW5fTGV1bmc=,size_16,color_FFFFFF,t_70) ## 在使用Docker登陸Harbor 在使用Harbor之前,要在docker環境登陸Harbor服務 ```bash [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 ```bash [root@manager-node credit-facility]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE credit-facility-image latest 28948b936fac 2 days ago 130MB ``` 2. 這裡我選擇```credit-facility-image```打個標籤,新標籤為```credit-facility:1.0``` ```bash docker tag credit-facility-image:latest credit-facility:1.0 ``` ## 釋出Image到Harbor 1. 使用Harbor的ip地址和前面建立好的專案名稱```credit-facility```進行釋出 ```bash [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倉庫了 ![](https://img-blog.csdnimg.cn/20200317210622698.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0V2YW5fTGV1bmc=,size_16,color_FFFFFF,t_70) ## 拉取Image到伺服器 1. 我們先把之前在本地建立的映象刪除,以免後面操作產生混淆 ```bash [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 ``` 2. 檢視本地映象列表 ```bash [root@manager-node harbor]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ``` 現在本地已經沒有任何映象 3.從Harbor倉庫拉去映象 ```bash [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.在檢視本地映象列表驗證下 ```bash [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倉庫拉取映象,不需要依賴本地