Docker搭建Nexus私有仓库

最近项目开发中需要对一些jar包进行修改,但是因为项目组当前没有私有的Maven镜像仓库,所以自己想搭建一个我们项目组专用的私有镜像服务器。网上看了一些资料好像使用Nexus比较多,所以自己也准备自己使用Nexus搭建一个Maven私服。
相关的资料文档建议查看官网
Nexus下载地址
根据自己的系统进行下载即可,Linux系统选择Unix archive版本即可。
最开始我本来想在自己的电脑上先安装一个尝试一下,结果下载过程中发现下载速度真的是特别的慢,所以最后决定选择使用Docker进行部署。

1、拉取镜像

首先查找下Nexus相关的仓库

docker search nexus3

结果如下:

NAME                                  DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
sonatype/nexus3                       Sonatype Nexus Repository Manager 3             868                                     
shifudao/nexus3                       clone from nexus3 image but based from openj…   4                                       [OK]
madmuffin/nexus3                      Sonatype Nexus3 Milestone7 docker image         2                                       [OK]
home1oss/nexus3                       An auto configured nexus3                       2                                       [OK]
alvindaiyan/nexus3-azure-appservice                                                   1                                       
cirepo/nexus3                         An auto configured nexus3                       1                                       [OK]
....
                          

这里选择官方的仓库。拉取镜像到本地:

docker pull sonatype/nexus3

如果拉取速度较慢可选择使用国内的Docker镜像源仓库,修改Docker配置daemon.json

vi /etc/docker/daemon.json
### 添加配置
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"],
"data-root": "/home/ypcfly/docker/data"

另外这里我也修改了Docker的数据根目录。

2、运行Nexus

docker run -d -p 8081:8081 --name nexus3 -e NEXUS_CONTEXT=nexus   sonatype/nexus3

因为是第一次启动,所以没有做什么特别的配置,也没有挂在目录。
启动之后我们查看启动日志:

docker logs -f nexus3

第一次启动可能会比较慢一点,启动的时候最好不要限制内存,如果限制的话内存最好大一点,比如2G,内存偏小也会导致启动失败。
看到下面内容,说明Nexus启动成功:

.......
-------------------------------------------------

Started Sonatype Nexus OSS 3.27.0-03

-------------------------------------------------

3、访问Nexus并创建仓库

默认端口是8081,我们在运行时进行的端口映射也是8081,所以直接在浏览器访问:
localhost:8081
结果发现404,有点蒙了,启动日志没有问题啊,端口也没问题.....后来在看启动命令-e NEXUS_CONTEXT=nexus,发现自己添加了上下文。添加访问上下文nexus,再次在浏览器输入:
localhost:8081/nexus
浏览器显示如下图:

图-1.png

点击右上角Sign in登陆,默认账号admin,我网上之前看到有的文章说默认密码是admin123,但是自己尝试之后发现密码错误,所以又看了官方文档。官方文档说的是:

Its username is admin and the initial password can be found in an admin.password file in the $data-dirdirectory. You can sign in with the button on the top right corner of the user interface.

意思是说默认密码是在数据目录下的admin.password中,但是因为自己启动时没有进行目录挂载,所以只能进入容器内进行查找:

$ docker exec -it  nexus3   sh
## 进入`nexus-data`
$ cd nexus-data
$ ls
$ vi admin.password
## 复制密码后退出容器
$ exit

进入容器内找到了nexus-data目录,然后找到admin.password,重新输入密码后,登录成功,然后会提示设置访问权限:

图-2.png

也就是是否允许匿名访问,根据情况选择就可以了。
为了方便登录我们再创建一个用户,点击Security -> Users -> Create User
输入相关信息,并赋予该用户管理员的权限:
图-3.png


接下来我们创建一个自己的仓库:
点击 Repository -> Repositories -> Create repository

图-4.png

这时候可以看到很多不同类型的仓库,比如apt、docker、maven2、yum、go、helm等等。这里需要介绍一下repository的几种类型:

hosted,本地仓库,一般情况我们会部署的都是这一类型的仓库。比如自己公司的私有仓库。
proxy,代理仓库,顾名思义,它们被用来代理远程的公共仓库,如maven中央仓库。
group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

所以我这里选择maven2(hosted)
输入仓库名称:ypc,然后根据自己的情况选择Version policyDeployment policy等,保存之后就看到自己的仓库已经出现了

图-5.png

创建好之后我们就可以将自己的一些jar包等推送到自己的镜像仓库了。

4、测试发布jar到仓库

既然创建好了我们的私有仓库,那么我们就要测试一下,能否将我们的jar推送到我们的Maven私服。首先我们需要创建一个项目,为了方便我就打开了一个之前的spring boot项目,准备用这个项目做试验。开始之前先看下我的pom.xml中这个项目的坐标信息:

...
    <groupId>com.ypc.rocketmq</groupId>
    <artifactId>rocketmq-starter</artifactId>
    <version>1.0-RELEASE</version>
    <name>rocketmq</name>
    <description>test rocketmq starter</description>
    <packaging>jar</packaging>
...

关于坐标的作用我想不需要我再做解释了吧,简单点说就是一个jar包的地址,就是用来定位jar包。
为了将我们打的jar包推送到我们私有仓库,需要修改项目的pom.xml文件,添加自己私有仓库的相关信息,如下:

<project>
    ......
    <!--Maven 仓库配置-->
    <distributionManagement>
        <repository>
            <id>release</id>
            <name>Release</name>
            <url>http://localhost:8081/nexus/repository/ypc/</url>
        </repository>
        <snapshotRepository>
            <id>snapshot</id>
            <name>Snapshot</name>
            <url>http://localhost:8081/nexus/repository/ypc/</url>
        </snapshotRepository>
    </distributionManagement>
</project>

在这里配置了一个release和一个snapshot两个仓库,一个用来发布正式的jar,一个发布测试jar。idname属性根据自己的需求填写就行了,url就是仓库ypc的地址,可以直接从浏览器复制。
但是毕竟项目的打包、发布都是需要使用Maven的,所以接下来我们需要修改Maven的配置文件,即setting.xmlMaven配置文件中需要配置的地方相对较多,这里一步一步来说明。
首先,添加访问server配置,即我们访问Maven私服仓库时的信息,比如用户名、密码或者私钥。这里配置的id需要和上面pom.xml中的id保持一致,用户名和密码根据自己的情况进行填写,admin的密码登录之后我是做了修改的。

<settings>
....
    <server>
      <id>release</id>
      <username>admin</username>
      <password>admin123456</password>
    </server>
    <server>
      <id>snapshot</id>
      <username>admin</username>
      <password>admin123456</password>
    </server>   
....

其次,我们需要配置镜像信息,也就是私有仓库的镜像地址,下面的配置中我添加了一个镜像配置,并且覆盖了默认的仓库地址。在配置文件这里,添加了一个反而idnexus,在该配置文件中我配置了一个repository和一个pluginRepository两个仓库,不过都指向的是同一个URL

<settings>
....
    <mirror>
       <id>central</id>
       <mirrorOf>*</mirrorOf>
       <url>http://localhost:8081/nexus/repository/ypc/</url>
    </mirror>

  <profiles>
    <profile>
      <id>nexus</id>
      <!--Enable snapshots for the built in central repo to direct -->
      <!--all requests to nexus via the mirror -->
      <repositories>
        <repository>
          <id>release</id>
          <url>http://localhost:8081/nexus/repository/ypc/</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
     <pluginRepositories>
        <pluginRepository>
          <id>snapshot</id>
          <url>http://localhost:8081/nexus/repository/ypc/</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>

  </profiles>

  <activeProfiles>
  <!--指定生效的配置文件 -->
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
...

到这里需要添加或者修改的配置到这里就完成了,接下来我们测试一下把我们的项目打包,并发布发到我们的镜像仓库,因为idea自带了相关的插件,所以我就直接使用插件了(命令我也记不住...),直接点击deploy,然后会看到相关的日志信息,下面是部分截图

图-6.png

可以看到有上传到release仓库的相关信息。
最后我们在登录到仓库看一下上传的jar包信息:
图-7.png

根据上图的信息也可以看出我们的jar包已经成功发布到我们的私有镜像仓库了。关于从私有镜像仓库下载jar包其实和从Maven中央仓库下载没有什么区别,这里就不再测试了。
关于使用Docker搭建Nexus私有Maven镜像仓库,以及发布jar包到Nexus就到这里了,总体来看还是比较简单的,感兴趣的小伙伴不妨都尝试一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351