1. 程式人生 > 其它 >基於容器搭建Maven私服和Harbor倉庫

基於容器搭建Maven私服和Harbor倉庫

一、搭建Maven私服(Nexus)

1、簡介

1.1.1 Maven
    Maven是一個專案管理工具,它包含了一個專案物件模型 (Project Object Model),一組標準集合,一個專案生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來執行定義在生命週期階段(phase)中外掛(plugin)目標(goal)的邏輯。
    Maven能夠很方便的幫你管理專案報告,生成站點,管理JAR檔案
1.1.2 Maven用來幹嘛的 a).優秀的構建工具 通過簡單的命令,能夠完成清理、編譯、測試、打包、部署等一系列過程 b).依賴管理工具 專案依賴的第三方的開源類庫,都可以通過依賴的方式引入到專案中來 c).專案資訊管理工具 能夠管理專案描述、開發者列表、版本控制系統地址、許可證等一些比較零散的專案資訊
1.1.3 maven和nexus關係 依賴管理,通過在Pom中指定座標的形式將jar引入到專案中。 流程: maven通過倉庫來統一管理各種構件,maven倉庫分為本地和遠端倉庫
    當Maven根據座標尋找構件時,它首先會檢視本地倉庫,如果本地倉庫存在此構件,則直接使用;如果本地倉庫不存在此構件,或者需要檢視是否有更新的構件版本,Maven會去遠端倉庫查詢(預設找的是中央倉庫),發現需要的構件之後,下載到本地倉庫再使用。
   
    在區域網內架設一個私有的倉庫伺服器,用其代理所有外部的遠端倉庫。當本地Maven專案需要下載構件時,先去私服請求,如果私服沒有,則再去遠端倉庫請求,從遠端倉庫下載構件後,把構件快取在私服上。

1.1.4 使用maven私服的好處 節省自己的外網頻寬:利用私服代理外部倉庫後,對外的重複構件下載得以消除,即降低外網頻寬的壓力。 加速maven的構建:Maven的一些內部機制(如快照檢測)要求Maven在執行構建的時候不停地檢查遠端倉庫的資料。 部署第三方構建 提高穩定性,增強控制:私服後即使暫時沒有Internet連線Maven也可以正常執行,因為私服中快取了大量的構件 降低中央倉庫的負荷:數百萬的請求,儲存數T的資料,需要相相當大的財力。使用私服可以避免很多對中央倉庫的重複請求。

2、Docker安裝Nexus

docker pull sonatype/nexus3      #從dockerhub拉取nexus3映象
mkdir -vp /server/docker/nexus/nexus-data
chmod 777 /server/docker/nexus/nexus-data
docker run -p 8081:8081 --name nexus \
-v /server/docker/nexus/nexus-data:/nexus-data \
-v /etc/localtime:/etc/localtime:ro \
--restart=always \
-itd sonatype/nexus3
 

3、配置和使用Nexus

 https://www.jianshu.com/p/26ebddb1ff8c   #參考配置

1.3.1 訪問登入
  訪問:http://ip:port
  使用者:admin   密碼:臨時密碼 cat /server/docker/nexus/neuxs-data/admin.password
  登入後修改密碼
1.3.2 Nexus中倉庫的分類 nexus中有個預設自帶的倉庫列表,裡面包含了各種各樣的倉庫。 這些倉庫主要分為三類,代理倉庫、宿主倉庫和倉庫組。
    代理倉庫:代理倉庫主要是讓使用者通過代理倉庫來間接訪問外部的第三方遠端倉庫的。代理倉庫會從被代理的倉庫中下載構件,快取在代理倉庫中以供maven使用者使用。

    宿主倉庫: 宿主倉庫主要是給我們自己用的,主要有2點作用:
    將私有的一些構件通過nexus中網頁的方式上傳到宿主倉庫中給其他同事使用
    將自己開發好一些構件釋出到nexus的宿主倉庫中以供其他同事使用。
    倉庫組:(預設maven-public)倉庫組中可以有多個代理倉庫和宿主倉庫,而maven使用者只用訪問一個倉庫組就可以間接地訪問這個組內所有的倉庫,倉庫組中多個倉庫是有順序的,當maven使用者從倉庫組下載構件時,倉庫組會按順序依次在組內的倉庫中查詢元件,查詢到了立即返回給本地倉庫,所以一般情況我們會將速度快的放在前面。倉庫組內部實際上是沒有構件內容的,他只是起到一個請求轉發的作用,將maven使用者下載構件的請求轉發給組內的其他倉庫處理。
1.3.3 建立倉庫
  Nexus倉庫列表中點選create repository按鈕
  

 

    

   我們建立一個maven代理倉庫:選擇"maven2(proxy)",輸入遠端倉庫資訊:(阿里雲倉庫)

    

      第一個紅框中輸入倉庫名稱:maven-aliyun       第二個紅框選擇:Release,表示從這個倉庫中下載穩定版的構件       第三個紅框輸入阿里雲倉庫地址:https://maven.aliyun.com/repository/public

   點選底部的create repository按鈕,建立完成。

   

1.3.4 配置倉庫組(maven-public)
  
  
  URL:本地的maven可以通過這個url來從倉庫組中下載構件至本地倉庫。
  Group Members:倉庫組成員,第1個是宿主的release版本倉庫,第2個是宿主的快照版本倉庫,第3個是代理倉庫(maven社群中央倉庫的代理)
  #可以將新增的maven-aliyun加入倉庫組,放到第3個位置,這個倉庫的速度比maven-central要快一些,能加速我們下載maven構件的速度。

 4、本地Maven從nexus下載構件(倆種方式)

獲取倉庫組對外的地址,點選下圖中的 copy 按鈕,獲取倉庫組的地址。
   
1.4.1 配置pom.xml的方式
  配置pom.xml的方式跟配置遠端倉庫類似,把遠端倉庫的URL改成倉庫組的URL。不同的是登入私服需要賬戶密碼,可以在maven配置檔案settings.xml中加入以下內容:
    maven-nexus
    admin
    admin123
  配置完成後,進入專案目錄,執行 mvn complie 命令

1.4.2 配置映象的方式
  修改Maven配置檔案settings.xml,加入以下內容:
    mirror-nexus
    *
    nexus映象
    http://10.48.14.50:8082/repository/maven-public/
    admin
    admin123
  上面mirror配置的*,說明遠端倉庫都通過該映象下載構件,url是倉庫組的地址
  配置完成後,進入專案目錄,執行 mvn complie 命令,就可以從nexus下載構件了。

5、本地構件釋出到nexus

常用的有兩種方式:
    使用maven部署構件到nexus私服
    手動部署第三方構件到nexus私服

1.5.1  使用maven部署構件到nexus私服
    修改pom.xml配置,加入以下內容:
        release-nexus
        http://10.48.14.50:8082/repository/maven-releases/
        #nexus私服中宿主倉庫->存放/下載穩定版本的構件

        snapshot-nexus
        http://10.48.14.50:8082/repository/maven-snapshots/
        #nexus私服中宿主倉庫->存放/下載快照版本的構件
    修改Maven配置檔案settings.xml,加入以下內容:
        release-nexus
        admin
        admin123

        snapshot-nexus
        admin
        admin123
    修改完成後,執行mvn deploy 命令,執行這個命令的時候,會對構件進行打包,然後上傳到私服中
    訪問私服快照版本倉庫地址:http://10.48.14.50:8082/repository/maven-snapshots/
    點選browse連線,就可以看見上傳成功了
    
    如果其他同事需要使用上面這個構件,只需要點選下圖中的pom檔案,右邊會顯示構件的座標,然後可以拿去使用了,如下圖:
    
    注意:snapshot屬於快照版本,同一個snapshot版本的構件可以重複部署到私服中,如果私服中已經存在了則會進行覆蓋掉,而release是穩定版本的構件,重複部署會報錯。

1.5.2 手動部署第三方構件到nexus私服
    手動上傳只支援釋出穩定版本的構件,操作如下:
       
    圖中第一行 maven-releases 宿主倉庫就是存放使用者自己構件的倉庫,點選上圖中列表中的第一行,進入上傳頁面,如下圖:
    
    上面頁面中點選 Browse 選擇本地的構件,然後輸入其他座標資訊,點選 Upload 完成上傳操作。
    
    訪問http://10.48.14.50:8082/#brose/browse:maven-releases,可以看到上傳好的構件,如下圖:
    

 

二、搭建Harbor倉庫

1、簡介

1、Harbor是構建企業級私有docker映象的倉庫的開源解決方案,它是Docker Registry的更高階封裝,它除了提供友好的Web UI介面,角色和使用者許可權管理,使用者操作審計等功能外,它還整合了K8s的外掛(Add-ons)倉庫,即Helm通過chart方式下載,管理,安裝K8s外掛,而chartmuseum可以提供儲存chart資料的倉庫【注:helm就相當於k8s的yum】。另外它還整合了兩個開源的安全元件,一個是Notary,另一個是Clair,Notary類似於私有CA中心,而Clair則是容器安全掃描工具,它通過各大廠商提供的CVE漏洞庫來獲取最新漏洞資訊,並掃描使用者上傳的容器是否存在已知的漏洞資訊,這兩個安全功能對於企業級私有倉庫來說是非常具有意義的。

2、簡單來說harbor就是VMWare公司提供的一個docker私有倉庫構建程式,功能非常強大.
支援多租戶簽名和認證 支援安全掃描和風險分析 這次日誌審計 基於角色的訪問控制 支援可擴充套件的API和GUI Image replication between instances 國際化做的很好(目前僅支援英文和中文)

2、Docker-compose搭建Harbor倉庫

2.2.1 安裝docker
    cd /etc/yum.repos.d
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install docker-ce  -y
    systemctl start docker

2.2.2 安裝docker-compose
    推薦使用pip安裝docker-compose,因為pip可以為你自動對應版本問題
        yum -y install epel-release
        yum install gcc-c++ -y
        yum install python-devel     安裝python-dev庫
        yum -y install python-pip    安裝pip
        pip --version
 
        pip install --upgrade pip    //更新pip
        pip install docker-compose
        docker-compose version  檢視docker-compose版本
    (注:pip操作命令:  pip list    //列出已安裝的包
        pip uninstall 包名     //解除安裝安裝包
        pip install --upgrade 包名   //升級安裝包)
    或下載二進位制檔案直接執行docker-compose
        curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
        
2.2.3 安裝harbor
    線上下載:wget  --continue https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-online-installer-v1.8.1.tgz
    離線下載:harbor官網:https://goharbor.io/
    
    建立harbor安裝目錄,將安裝包移動到安裝目錄並解壓
        mkdir /usr/local/harbor && cd /usr/local/harbor
        wget  --continue https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-online-installer-v1.8.1.tgz
    
tar -zxf harbor-online-installer-v1.8.1.tgz
     cd harbor
    修改配置檔案:harbor.yml
        hostname: 10.48.14.50
      #根據自己的情況修改:
        hostname  目標主機的主機名,用於訪問Portal和登錄檔服務。修改為我們的主機ip即可
        harbor_admin_password:管理員的初始密碼
        data_volume: 儲存  harbor  資料的位置。
    執行./prepare
    執行:./install.sh
    檢視啟動情況
        docker-compose ps
    
    使用——配置免https:修改/etc/docker/daemon.json
        {
        "insecure-registries": ["10.249.29.29:8888"]
        }
    需要重啟docker和harbor
        systemctl daemon-reload
        systemctl restart docker
    重啟harbor倉庫
        docker-compose stop         停止
        docker-compose up -d        啟動

3、瀏覽器訪問登入

訪問:http://10.48.14.50:8888
    

注:使用者名稱和密碼在配置檔案中,登入後可以修改,或者啟動之前就修改配置檔案
    預設使用者名稱密碼:admin     Harbor12345

4、上傳、下載映象

建立專案:
  
在Linux系統登入harbor倉庫
    docker login -u admin -p 10.48.14.50:8888
修改待上傳映象的tag:
  docker tag nginx:1.16.0 10.48.14.50:8888/common/nginx:1.16.0
上傳映象:
  docker push 10.48.14.50:8888/common/nginx:1.16.0
下載映象
    docker pull 10.48.14.50:8888/common/nginx:1.16.0    

5、Harbor安裝指令碼

ip=10.48.14.50

curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

mkdir /usr/local/harbor && cd /usr/local/harbor
wget --continue https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-online-installer-v1.8.1.tgz
tar -zxf harbor-online-installer-v1.8.1.tgz
cd harbor
sed -i 's/hostname: reg.mydomain.com/hostname: '$ip'/g' harbor.yml
./prepare
./install.sh
docker-compose ps

#配置免https驗證
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://uvbz951q.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "insecure-registries": ["10.48.14.50:8888"]
}
EOF

systemctl daemon-reload
systemctl restart docker
docker-compose stop
docker-compose up -d