基於容器搭建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(可以用做jenkins構建的版本管理)

常用的有兩種方式:
    使用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 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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM