Docker安裝Maven私服Nexus3的實(shí)現(xiàn)步驟
在現(xiàn)代軟件開發(fā)中,私有倉庫是企業(yè)管理和分發(fā)內(nèi)部依賴的重要工具,能夠提高開發(fā)效率、加強(qiáng)依賴管理并確保構(gòu)建的穩(wěn)定性。Nexus Repository Manager 作為市場上常見的私服解決方案,不僅支持 Maven,還支持 npm、PyPI 等多種格式,為團(tuán)隊(duì)提供了統(tǒng)一的制品管理平臺。
本文將介紹如何使用 Docker 快速部署 Maven 私服 Nexus3,幫助開發(fā)者搭建高效的依賴管理和分發(fā)環(huán)境,同時(shí)減少環(huán)境配置的復(fù)雜性和維護(hù)成本。通過 Docker 部署,您可以輕松實(shí)現(xiàn)版本化控制、靈活配置以及跨平臺的便捷使用,是中小型團(tuán)隊(duì)和企業(yè)的理想選擇。
1、背景知識
在研發(fā)的過程中,很多企業(yè)都會針對自身業(yè)務(wù)特點(diǎn)來定制研發(fā)一些工具類庫,但是這些工具類庫又不會對外公開,那如何在組織內(nèi)部共享這些類庫呢?一種很好的方式就是在公司內(nèi)部搭建一套 Maven 私服倉庫。
搭建 Maven 私服倉庫可以提高項(xiàng)目構(gòu)建和部署的效率、穩(wěn)定性和安全性,同時(shí)方便管理內(nèi)部開發(fā)的組件和私有庫,比較適用于企業(yè)內(nèi)部或者特定場景下的需求。
2、環(huán)境搭建
2.1、步驟一:下載 Nexus3 鏡像
在服務(wù)器命令行輸入如下命令,下載 Nexus3 鏡像(視網(wǎng)絡(luò)情況,可能需要耐心等待一會兒):
$ docker pull sonatype/nexus3
2.2、步驟二:查看 Nexus3 鏡像
在服務(wù)器命令行輸入如下命令,查看下載的 Nexus3 鏡像。
$ docker images
可以看到,已經(jīng)成功下載 Nexus3 鏡像

2.3、步驟三:創(chuàng)建 Nexus3 掛載文件夾
在服務(wù)器命令行輸入如下命令,創(chuàng)建 Nexus 的掛載文件夾:
$ mkdir /usr/local/nexus-data && chown -R 200 /usr/local/nexus-data
2.4、步驟四:啟動 Nexus3 容器
在服務(wù)器命令行輸入如下命令,啟動 Nexus3 容器:
$ docker run -d -p 8081:8081 --name nexus -v /usr/local/nexus-data:/nexus-data --restart=always sonatype/nexus3
可以看到,在上述啟動命令中,我們將 Nexus3 容器的 /nexus-data 目錄映射到了宿主機(jī)的 /usr/local/nexus-data 目錄。此時(shí) Nexus3 容器運(yùn)行過程中,在 /nexus-data 目錄產(chǎn)生的文件和日志都會在宿主機(jī)的 /usr/local/nexus-data 目錄中查看到。
Ps:Nexus3 默認(rèn)啟動需要至少 2G 內(nèi)存,所以一些環(huán)境下為了避免占用過多內(nèi),可以采用下面參數(shù)限制其內(nèi)存:
$ docker run -d -e "INSTALL4J_ADD_VM_PARAMS=-Xms128m -Xmx512m -XX:MaxDirectMemorySize=512m -Djava.util.prefs.userRoot=/nexus-data/javaprefs" -p 8081:8081 --name nexus -v /usr/local/nexus-data:/nexus-data sonatype/nexus3
2.5、步驟五:查看 Nexus3 容器啟動狀態(tài)
在服務(wù)器命令行輸入如下命令,查看 Nexus3 容器啟動狀態(tài):
$ docker ps
可以看到,Nexus3 容器啟動成功,監(jiān)聽了 8081 端口。
3、環(huán)境配置
搭建完 Nexus3 環(huán)境后,我們還需要對其進(jìn)行配置,具體配置的步驟如下所示。
3.1、步驟六:打開 Nexus3 頁面
Nexus3 容器啟動時(shí)監(jiān)聽的端口和宿主機(jī)端口都是 8081,所以,我們在瀏覽器地址欄輸入 http://宿主機(jī)IP地址:8081 打開 Nexus3 頁面:

3.2、步驟七:登陸 Nexus3 用戶
點(diǎn)擊 Nexus3 右上角的登錄(Sign in),點(diǎn)擊后會彈出如下圖所示的提示框:

對于第一次登陸,初始密碼的存放位置為 /nexus-data/admin.password,因?yàn)槲覀冊趩?Nexus3 容器時(shí),將 Nexus3 容器的 /nexus-data 目錄映射到了宿主機(jī)的 /usr/local/nexus-data 目錄,所以,我們在宿主機(jī)的 /usr/local/nexus-data 目錄中也能夠查詢到 admin.password 文件。
$ cat /usr/local/nexus-data/admin.password
此時(shí),我們就查看到登錄 Nexus3 的 admin 賬號的密碼為 13250a0a-1c02-498a-b15a-0a7aabad1add

將 admin 賬號和對應(yīng)的密碼輸入到提示框中,即可登錄 Nexus3。

Ps:首次登錄后會自動彈出完成必要設(shè)置的提示框,點(diǎn)擊 Next 按鈕,設(shè)自行置新密碼,用于后續(xù)登錄 Nexus。之后點(diǎn)擊 Next 按鈕,選擇 Enable anonymous access 再次點(diǎn)擊 Next 按鈕后,點(diǎn)擊 Finish 按鈕,即可完成設(shè)置。
3.3、步驟八:配置阿里云代理倉庫
如下圖所示,Nexus 默認(rèn)使用的遠(yuǎn)程倉庫為 maven-central,從這個(gè)遠(yuǎn)程倉庫下載依賴很慢,經(jīng)常連不上。

鼠標(biāo)單機(jī) maven-central 倉庫,查看 maven-central 倉庫配置的遠(yuǎn)程鏈接,如下圖所示:

可以看到,maven-central倉庫配置的遠(yuǎn)程鏈接為 https://repo1.maven.org/maven2/,從這個(gè)遠(yuǎn)程倉庫下載依賴很慢,經(jīng)常連不上,所有我們需要配置阿里云遠(yuǎn)程代理倉庫。
這里我們回到 Repositories 頁面,點(diǎn)擊 Create repository 按鈕:

點(diǎn)擊后進(jìn)入選擇倉庫類型的頁面,這里我們選擇 maven2(proxy) 類型。
點(diǎn)擊選則 maven2(proxy) 類型后,進(jìn)入配置遠(yuǎn)程代理倉庫的頁面:

其中,每個(gè)配置項(xiàng)如下所示。
- Name:aliyun-central
- Version policy:Release
- Layout policy:Strict
- Remote storage:http://maven.aliyun.com/nexus/content/groups/public
接下來,拖動頁面右側(cè)的滾動條,滑到最下面,點(diǎn)擊 Create repository 按鈕

點(diǎn)擊 Create repository 按鈕后,就可以在 Repositories 列表中看到新配置的阿里云代理倉庫了

并且 Status 顯示的是 Online - Ready to connect,說明阿里云遠(yuǎn)程倉庫配置成功。
3.4、步驟九:配置倉庫組
接下來,需要將 aliyun-central 配置到倉庫組,并且將 aliyun-central 排在 maven-central 上面。
在 Repositories 列表中,點(diǎn)擊 maven-public

點(diǎn)擊進(jìn)入頁面后,下拉頁面右側(cè)的滾動條,找到如圖所示的配置

將 aliyun-central 移動到右側(cè),并排在最上面后,點(diǎn)擊 Save 按鈕保存配置。
3.5、步驟十:創(chuàng)建用戶
接下來,創(chuàng)建一個(gè)用于上傳 Jar 包到倉庫的用戶,具體步驟如下所示。
點(diǎn)擊 Security 菜單下的 Users 菜單,再之后點(diǎn)擊 Create local user 按鈕

隨后,按照下圖所示設(shè)置用戶的基本信息

這里,自行記錄用戶的密碼,將 Status 設(shè)置為 Active 來啟用賬戶,并設(shè)置賬號的角色為 nx-admin,配置好之后,點(diǎn)擊底部的 Create local user 按鈕即可。
點(diǎn)擊后在 Security 菜單下的 Users 菜單的用戶列表中,可以查看到新創(chuàng)建的本地用戶

至此,Nexus3 配置完畢。
4、配置本地 Maven 倉庫
配置完 Nexus 后,接下來,還需要對本地的 Maven 倉庫進(jìn)行配置,主要就是對 Maven 的 settings.xml 文件進(jìn)行配置
4.1、步驟十一:復(fù)制 settings 文件
復(fù)制 setting.xml 文件為 setting-lizhengi.xml 文件
4.2、步驟十二:配置 servers 節(jié)點(diǎn)
在 settings-lizhengi.xml 文件中,找到 servers 節(jié)點(diǎn),在 servers 節(jié)點(diǎn)中,配置在步驟十中創(chuàng)建的用戶
<server>
<id>binghe</id>
<username>lizhengi</username>
<password>myPassword</password>
</server>
4.3、步驟十三:配置 mirrors 節(jié)點(diǎn)
在 settings-lizhengi.xml 文件中,找到 mirrors 節(jié)點(diǎn),在 mirrors 節(jié)點(diǎn)中,配置倉庫地址
<mirrors>
<mirror>
<id>lizhengi-nexus</id>
<name>Lizhengi Nexus3</name>
<url>http://tencentcloud:8081/repository/maven-public</url>
<mirrorOf>*</mirrorOf>
</mirror>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
4.4、步驟十四:配置profiles節(jié)點(diǎn)
在 settings-lizhengi.xml 文件中,找到 profiles 節(jié)點(diǎn),在 profiles 節(jié)點(diǎn)中,配置倉庫信息:
<profile>
<id>maven-public</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
<repositories>
<repository>
<id>nexus-public</id>
<url>http://tencentcloud:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
至此,Maven私服倉庫搭建完畢,并且本地Maven也已經(jīng)配置完畢。
后續(xù)使用 Maven 構(gòu)建項(xiàng)目時(shí),指定使用 settings-lizhengi.xml 文件即可將依賴的 Jar 文件和生成的 Jar 文件上傳到 Maven 私服倉庫,如果使用 IDEA 編譯項(xiàng)目,也需要在 IDEA 中,將 Maven 的配置文件指定為 settings-lizhengi.xml。
5、配置項(xiàng)目 pom.xml 文件
搭建完 Maven 私服倉庫,配置好本地 Maven 倉庫后,還需要在項(xiàng)目的 pom.xml 文件中進(jìn)行相應(yīng)的配置,具體如下所示:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<!--發(fā)布代碼Jar插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!--發(fā)布源碼插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<!--這里的id與settings.xml中的servers節(jié)點(diǎn)配置的用戶ID一直,這樣才能使用配置的用戶去上傳到maven私有倉庫 -->
<!--此倉庫對應(yīng)的為RELEASE版本的jar-->
<id>lizhengi</id>
<url>http://tencentcloud:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<!--這里的id與settings.xml中的servers節(jié)點(diǎn)配置的用戶ID一直,這樣才能使用配置的用戶去上傳到maven私有倉庫 -->
<!--此倉庫對應(yīng)的為SNAPSHOT版本的jar-->
<id>lizhengi</id>
<url>http://tencentcloud:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
到此這篇關(guān)于Docker安裝Maven私服Nexus3的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Docker安裝Maven私服Nexus3內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker swam集群如何實(shí)現(xiàn)負(fù)載均衡
這篇文章主要介紹了docker swam集群如何實(shí)現(xiàn)負(fù)載均衡問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02
docker安裝OpenWebUI報(bào)錯500的原因及解決方法
Open?WebUI是一個(gè)可擴(kuò)展、功能豐富且用戶友好的自托管WebUI,旨在完全離線操作,這篇文章主要介紹了docker安裝OpenWebUI報(bào)錯500的原因及解決方法,需要的朋友可以參考下2025-07-07
使用Docker搭建Picsur圖床服務(wù)的實(shí)現(xiàn)
本文介紹如何在騰訊云輕量應(yīng)用服務(wù)器通過Docker部署Picsur圖床服務(wù),文中通過圖文示例步驟介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
Docker+K8S 集群環(huán)境搭建及分布式應(yīng)用部署
這篇文章主要介紹了Docker+K8S 集群環(huán)境搭建及分布式應(yīng)用部署,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
docker構(gòu)建nginx?alpine鏡像實(shí)現(xiàn)步驟
這篇文章主要介紹了docker構(gòu)建nginx?alpine鏡像實(shí)現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08

