基于容器搭建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
作者:等风来~~
本博客所有文章仅用于学习、研究和交流目的,欢迎转载。
如果觉得文章写得不错,或者帮助到您了,请点个赞。
如果文章有写的不足的地方,请你一定要指出,因为这样不光是对我写文章的一种促进,也是一份对后面看此文章的人的责任。谢谢。