使用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私服看一下