使用Docker搭建Maven私服
前言
本文主要介紹,使用Docker創建一個nexus私服,然后編寫一個Library,上傳到私服,然后使用demo工程依賴。
本文不對Maven、Nexus、私服等等相關名詞以及為什么要用它們進行解釋,僅僅作為筆者的一次實踐記錄,有什么不對的歡迎評論。
適合的讀者
適合讀此篇文章的人最好符合以下條件:
對maven有一定的認識
想搭建maven私服但是沒有經驗
對Docker有一定的使用經驗
環境
本文環境實施是在遠程Linux主機上面跑Nexus,然后本地進行開發測試。具體如下
遠程主機環境
系統:CentOs 7.X
OpenJDK:1.8.0_151
Maven 3.0.5
Docker 1.12.6
本地環境
系統:MacOs 10.12.6
OpenJDK 1.8.0_152
Maven 3.5.2
IntelliJ IDEA 2017.3.4
安裝Nexus
在遠程主機運行一下命令:
docker pull sonatype/nexus3
上面命令的意思是下載一個nexus3的鏡像
繼續執行:
docker run -d -p 8081:8081 --name nexus -v /root/nexus-data:/var/nexus-data --restart=always sonatype/nexus3
上面命令是指使用nexus3鏡像創建並啟動一個容器,然后指定暴露8081端口到對應主機的8081端口
將容器內部/var/nexus-data掛載到主機/root/nexus-data目錄。
如果沒有任何問題的話,Nexus應該是搭建成功了。
還可以用命令驗證容器是否安裝成功
[root@localhost ~]# docker inspect f264e5f1be41

能夠拿到這個ip地址說明啟動是成功的。
這個時候我們訪問一下這個地址
[root@localhost ~]# curl 172.17.0.2:8081
curl: (7) Failed connect to 172.17.0.2:8081; Connection refused
拒絕連接,說明啟動還沒那么快。
關閉下防火牆
[root@localhost ~]# systemctl stop firewalld.service
看到如下界面,說明你的私服已經起來了

此時在瀏覽器輸入:http://ip:8081即可看到以下頁面:(ip為遠程主機的ip地址) 
點擊右上方的 Sign In進行登錄,初始賬號密碼為 admin/admin123
這個時候登錄會報一個錯誤,初始密碼雖然是admin123,但是你就是死活登不上去,
Incorrect username or password, or no permission to use the application.
maven私服登錄的時候不能使用明文密碼,要使用密文密碼,
一般在你創建容器的目錄下,登錄窗口會有提示說你的密碼文件在哪個位置,
我這里是 /root/nexus-data/admin.password ,但是我進到這個目錄下,
發現並沒有,於是我進到容器里面找,終於被我找到了。
docker exec -it ae0913c1c81c bash cd /nexus-data/ cat admin.password c481f097-4a88-4ad4-a742-0f2a12c0e2da
c481f097-4a88-4ad4-a742-0f2a12c0e2dabash-4.2$
一般會跟容器版本一起顯示,截取前面部分就是你的maven私服密碼,
至此,登錄成功,登錄成功后,會提示讓你修改密碼,並且勾選匿名訪問。



Nexus會幫我們創建了幾個倉庫:

可以看到默認情況下Nexus會幫我們創建了幾個倉庫,仔細觀察紅色框住的地方,里面有幾種倉庫的類型,解釋如下:
proxy 遠程倉庫的代理,比如說nexus配置了一個central repository的proxy,當用戶向這個proxy請求一個artifact的時候,會現在本地查找,如果找不到,則會從遠程倉庫下載,然后返回給用戶。
hosted 宿主倉庫,用戶可以把自己的一些倉庫deploy到這個倉庫中
group 倉庫組,是nexus特有的概念,目的是將多個倉庫整合,對用戶暴露統一的地址,這樣就不需要配置多個倉庫地址。
下面我們仔細看一下里面的一些倉庫。點擊maven-central倉庫:

可以看到是一個proxy類型的倉庫,他代理的遠程倉庫地址是https://repo1.maven.org/maven2/。
后退,在進入maven-public查看:

可以看到這是一個group類型的倉庫,里面包含了maven-releases/maven-snapshots/maven-central倉庫,意思是我們只需要在本地添加這個倉庫,則可以依賴到上述3個倉庫中的庫了。
准備工作
為了實現本地上傳代碼庫,並且實現依賴的示例,這里創建一個新的倉庫(也可以選用已經存在的倉庫)和一個用戶
創建倉庫,點擊Create repository,然后選擇maven2(hosted)然后輸入倉庫名稱(reason-release)。在version policy中選擇這個倉庫的類型,這里選擇release,在Deployment policy中選擇Allow redeploy(這個很重要).


選擇好之后點擊創建,
創建成功如下:

創建用戶
點擊左側菜單欄的Users菜單,然后點擊Create local user.我這里創建了一個用戶,賬號密碼都是:jiangqiayun

本地計算機maven的settings.xml
<?xml version="1.0" encoding="utf-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>D:/apache-maven-3.6.1/localRepository</localRepository>
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>reason</id>
<username>jiangqiyuan</username>
<password>jiangqiyuan</password>
</server>
</servers>
</mirrors>
<profiles></profiles>
</settings>
創建一個maven項目reason-test測試下
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.reason</groupId>
<artifactId>reason-test</artifactId>
<version>0.0.1-RELEASE</version>
<packaging>jar</packaging>
<!--指定倉庫地址-->
<distributionManagement>
<repository>
<!--此名稱要和.m2/settings.xml中設置的ID一致-->
<id>reason</id>
<url>http://192.168.56.200:8081/repository/reason-release/</url>
</repository>
</distributionManagement>
<build>
<plugins>
<!--發布代碼Jar插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
</plugin>
<!--發布源碼插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
注意這里版本號不能選擇默認的,默認創建的是開發版本的版本號,發布的時候一定要改成0.0.1-RELEASE不然打包會出問題

默認是0.0.1-SNAPSHOT 把后面的英文單詞改一下0.0.1-RELEASE 或者其他版本號

使用 mvn deploy
至此測試成功,去maven私服看一下

