Docker入门到精通《Nexus的搭建与使用》

一、什么是私有镜像仓库?

镜像仓库(Docker Registry)有公有和私有的两种形式:

  • 公共仓库:例如Docker官方的Docker Hub,国内也有一些云服务商提供类似于Docker Hub的公开服务,比如网易云镜像服务、DaoCloud镜像服务、阿里云镜像服务等。
  • 除了使用公开仓库外,用户还可以在本地搭建私有Docker Registry。企业自己的镜像最好是采用私有Docker Registry来实现。比如Nexus 、Harbor 、等。

二、私有仓库能做什么?

  • 可以存储公司私有镜像,避免暴露到外网。
  • 快速交付:当应用程序开发完成后,可以直接打包成一个镜像,将镜像上传到私有仓库后,可以在任何装有Doker的机器上下载该镜像,并运行为一个容器。

三、Nexus 、Harbor的区别

  • Harbor :可以自建文件夹进行分组这点就非常好。其实说实话,作为一个私有的镜像仓库,Harbor已经做得很好的了,唯一的缺点是它无法帮你下载镜像。因为在kubernetes环境下,你肯定有去公网拉镜像的需求,无论是官方还是非官方。你不可能因为这个而特地给你的所有node节点开通外网访问吧,这样风险太多且不可控。在我看来,整个kubernetes集群都不能访问外网。
  • Nexus :当你需要拉公网镜像的时候,你只要向它发起请求,它如果本地没有,就会自动去你配置的镜像仓库下载,下载完成之后先在本地缓存一份,然后发送给你。你甚至不用给Nexus开通外网,只需要在一台可以访问外网的机器上搭建一个代理服务就行,让Nexus通过代理去下载。

四、Nexus的搭建

4.1 Docker安装Nexus

yaml 复制代码
# Step 1:保证服务器对Nexus端口开放

# Step 2:创建/opt/docker/nexus文件夹。
# -p: 没有就创建。
mkdir -p /opt/docker/nexus

# Step 3:放给最高权限,方便使用
chmod 777 -R /opt/docker

# Step 4:运行 nexus3 容器
docker run -d --restart=always -p 8081:8081 --name nexus_container -v /opt/docker/nexus:/nexus-data sonatype/nexus3

# Step 5:日志查看
docker logs -f nexus_container

五、Nexus的使用

5.1 登录Nexus

yaml 复制代码
# Step 1:安装完成后可访问Nexus管理平台:http:ip:端口

# Step 2:登录Nexus,默认管理员用户名:admin 密码:admin123,如果提示密码不对,需要到容器里面查看管理员admin密码。
# cat /home/nexus/data/admin.password


# Step 3:第一次登陆之后,一般提示修改密码!修改密码之后,重新登录!

5.2 配置Nexus

Nexus默认创建了几个仓库,如下:

5.2.1 仓库名称

仓库名称 说明
maven-central Nexus 对 Maven 中央仓库的代理,默认从repo1.maven.org/maven2/拉取ja...
maven-releasse Nexus 默认创建,供开发人员部署自己 jar 包的宿主仓库,私库发行版jar,初次安装请将Deployment policy设置为Allow redeploy要求 releasse 版本
maven-snapshots Nexus 默认创建,供开发人员部署自己 jar 包的宿主仓库,要求 snapshots 版本
maven-public Nexus 默认创建,仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml或项目pom.xml中使用

5.2.2 仓库类型

仓库类型 说明
proxy 代理仓库:它们被用来代理远程的公共仓库,如maven中央仓库。
hosted 本地仓库:通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
group 仓库组:用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

5.3 创建 Nexus仓库

除了自带的仓库,有时候我们需要单独创建自己的仓库,按照默认创建的仓库类型来创建我们自己的仓库。点击Create Repository

选择如下三种类型的仓库。

5.3.1 Hosted 仓库

输入仓库名,点击创建即可。

5.3.2 Proxy仓库

输入仓库名以及被代理仓库的URL,这里我输入阿里云的仓库地址,默认为中央仓库。

5.3.3 Group仓库

根据group仓库的解释,group仓库是其他仓库的集合,所以需要将其他创建的仓库添加到组里。

上面的仓库创建好之后就可以在首页看到了。

5.4 通过 Nexus 下载 jar 包

5.4.1 创建一个新仓库

Nexus私服搭建好之后就可以通过Nexus下载jar包了。为了方便演示我在本地创建了一个空的仓库:new-repo

5.4.2 修改Maven的配置,将新仓库作为默认仓库

5.4.3 修改镜像配置(这里我们之前都是配置的阿里云仓库,现在改为我们自己的Nexus仓库)

xml 复制代码
     <mirror>
       <id>maven-public</id>
       <mirrorOf>central</mirrorOf>
       <name>Maven public</name>
       <url>http://192.168.11.164:8090/repository/maven-public/</url>  
     </mirror>

这里的 url 标签是这么来的: 把上图中看到的地址复制出来即可。如果我们在前面允许了匿名访问,到这里就够了。但如果我们禁用了匿名访问,那么接下来我们还要继续配置settings.xml

xml 复制代码
  <server>
   <id>maven-public</id>
   <username>admin</username>
   <password>admin</password>
  </server>

注意:server 标签内的 id 标签值必须和 mirror 标签中的 id 值一样,用户名和密码是修改之后的。

5.4.4 验证

我们新建一个Maven项目然后引入一个依赖(这里我用fastjson2举例)来验证jar包是否是通过Nexus下载的。新建项目之后修改项目的Maven配置以及引入依赖。

等待下载完成我们刷新对应的仓库可以发现jar包已经下载到Nexus里面了。

5.5 将 jar 包部署到 Nexus

演示完通过Nexus下载jar包,接下该演示怎么将本地模块打包发布到Nexus私服,让其他的项目来引用,以更简洁高效的方式来实现复用和管理。

因为发布jar包涉及到snapshotsreleases仓库,所以需要配置这两个的仓库的访问权限,同样的这是针对禁用了匿名访问的操作的,如果没有禁用匿名访问,这里依然不用配置。

5.5.1 需要配置的server:

xml 复制代码
<server>
   <id>maven-public</id>
   <username>admin</username>
   <password>admin</password>
  </server>
  <server>
  <id>maven-releases</id>
   <username>admin</username>
   <password>admin</password>
  </server>
  <server>
  <id>maven-snapshots</id>
   <username>admin</username>
   <password>admin</password>
  </server>

5.5.2 配置pom.xml

然后在我们需要上传的 maven 项目中的pom.xml添加如下配置:

xml 复制代码
<!-- 这里的 id 要和上面的 server 的 id 保持一致,name 随意写-->
<distributionManagement>
    <repository>
        <id>maven-releases</id>
        <name>Releases Repository</name>
        <url>http://192.168.11.164:8090/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>maven-snapshots</id>
        <name>Snapshot Repository</name>
        <url>http://192.168.11.164:8090/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

5.5.3 部署到Nexus

然后点击部署deploy 就可以将项目发布到Nexus了。

然后刷新maven-snapshots仓库就可以发现,项目已经发布了。

5.6 疑问

注意:为什么是发布到snapshot仓库呢?那如果想要发布到releases仓库该怎么做呢?

这是因为我们创建Maven的时候,版本号默认为1.0-SNAPSHOT,所以就对应发布到snapshot仓库了,只需要将版本号改为正式版本号就可以了。

然后点击deploy 就可以在releases 仓库找到了。

最后,介绍一下Maven几个常用命令的作用。

package 命令完成了项目编译、单元测试、打包功能。
install 命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库。
deploy 命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库。

相关推荐
海绵波波1072 小时前
flask后端开发(10):问答平台项目结构搭建
后端·python·flask
网络风云3 小时前
【魅力golang】之-反射
开发语言·后端·golang
Q_19284999063 小时前
基于Spring Boot的电影售票系统
java·spring boot·后端
运维&陈同学4 小时前
【Kibana01】企业级日志分析系统ELK之Kibana的安装与介绍
运维·后端·elk·elasticsearch·云原生·自动化·kibana·日志收集
Javatutouhouduan7 小时前
如何系统全面地自学Java语言?
java·后端·程序员·编程·架构师·自学·java八股文
后端转全栈_小伵7 小时前
MySQL外键类型与应用场景总结:优缺点一目了然
数据库·后端·sql·mysql·学习方法
编码浪子7 小时前
Springboot高并发乐观锁
后端·restful
uccs8 小时前
go 第三方库源码解读---go-errorlint
后端·go
Mr.朱鹏8 小时前
操作002:HelloWorld
java·后端·spring·rabbitmq·maven·intellij-idea·java-rabbitmq
编程洪同学9 小时前
Spring Boot 中实现自定义注解记录接口日志功能
android·java·spring boot·后端