1. 程式人生 > >nexus搭建maven私服,docker私服並與maven專案整合

nexus搭建maven私服,docker私服並與maven專案整合

目錄

實現功能:

  • 通過nexus管理jar包
  • 通過nexus管理docker映象
  • 開發端機器遠端打包上傳jar
  • 通過maven-docker外掛編譯為docker映象,部署到測試環境,並上傳的nexus私服

搭建環境

  • ubantu17 已經安裝好docker 17.06.2-ce

搭建步驟

1. 通過docker安裝nexus
2. 實現nexus管理maven私服(打包上傳,拉取jar包等)
3. 實現nexus管理docker私服(打包上傳,拉取jar包等)

通過docker安裝nexus

## 啟動nexus
docker run -d -p 8081
:8081 -p 8082:8082 -p 8083:8083 --name nexus3 -v /home/nexus/nexus-data:/nexus-data --restart=always sonatype/nexus3 ## -v /home/nexus/nexus-data:/nexus-data 將資料掛載到宿主機 ## 8081:nexus3網頁端 ## 8082:docker(hosted)私有倉庫,可以pull和push(後面實現docker的時候會詳細說明) ## 8083:docker(proxy)代理遠端倉庫,只能pull(後面實現docker的時候會詳細說明)

預設使用者名稱密碼:admin/admin123

訪問啟動機器ip:8081即可看見如下的介面

實現nexus管理maven私服

nexus設定maven倉庫

預設情況下,nexus是提供了四個倉儲
四個倉儲

1. maven-central        代理中央倉庫,從公網下載jar 
2. maven-release       釋出版本內容(即自己公司發行的jar的正式版本) 
3. maven-snapshots  釋出版本內容(即自己公司發行的jar的快照版本)
4. maven-public         以上三個倉庫的小組         

開發端設定私服的連結地址

下載的maven

在conf中有個settings.xml,開始設定maven連結私服的

<?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>E:\Maven\Repository</localRepository>
    <pluginGroups>
        <pluginGroup>org.sonatype.plugins</pluginGroup>
    </pluginGroups>
    <proxies>
    </proxies>
    <servers>
        <server>
            <id>releases</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
        <server>  
            <id>snapshots</id>  
            <username>admin</username>  
            <password>admin123</password>  
        </server>  
        <server>
            <id>docker-hub</id>
            <username>admin</username>
            <password>admin123</password>
            <configuration>
                <email>[email protected]</email>
            </configuration>
        </server>
    </servers>

    <mirrors> 
        <mirror>  
            <id>nexusSnapashots</id>  
            <url>http://192.168.80.129:8081/repository/maven-public/</url>  
            <mirrorOf>public-snapshots</mirrorOf>  
            <interval>always</interval>  
        </mirror>  
        <mirror>  
            <id>nexusMirror</id>  
            <name>local repos</name>  
            <url>http://192.168.80.129:8081/repository/maven-public/</url>  
            <mirrorOf>*</mirrorOf>  
        </mirror> 
    </mirrors> 
    <profiles>
        <profile>  
            <id>nexusRepository</id>  
            <!-- jar包倉庫配置 -->  
            <repositories>  
                <repository>  
                    <id>nexusSnapashots</id>  
                    <name>nexus-snapshots</name>  
                    <url>http://192.168.80.129:8081/repository/maven-public/</url>  
                    <releases>  
                        <enabled>false</enabled>  
                    </releases>  
                    <snapshots>  
                        <enabled>true</enabled>  
                    </snapshots>  
                    <layout>default</layout>  
                    <snapshotPolicy>always</snapshotPolicy>  
                </repository>  
                <repository>  
                    <id>nexusMirror</id>  
                    <name>nexus-snapshots</name>  
                    <url>http://192.168.80.129:8081/repository/maven-public/</url>  
                    <releases>  
                        <enabled>true</enabled>  
                    </releases>  
                    <snapshots>  
                        <enabled>false</enabled>  
                    </snapshots>  
                    <layout>default</layout>  
                    <snapshotPolicy>always</snapshotPolicy>  
                </repository>  
            </repositories>  

            <!-- 外掛倉庫配置 -->  
            <pluginRepositories>  
                <pluginRepository>  
                    <id>nexusMirror</id>  
                    <name>nexus mirror</name>  
                    <url>http://192.168.80.129:8081/repository/maven-public/</url>  
                    <releases>  
                        <enabled>true</enabled>  
                    </releases>  
                    <snapshots>  
                        <enabled>false</enabled>  
                        <updatePolicy>always</updatePolicy>  
                        <checksumPolicy>warn</checksumPolicy>    
                    </snapshots>  
                </pluginRepository>  
            </pluginRepositories>  
        </profile>  
    </profiles>  
    <activeProfiles>
        <activeProfile>nexusRepository</activeProfile>
    </activeProfiles>
</settings>

此時便可以實現maven的私服拉取操作了。還有一部分就是如何上傳呢?在自己的pom檔案中加上如下的內容
mvn deploy便可上傳

    <distributionManagement>
        <snapshotRepository>
            <id>snapshots</id><!-- 這個id和settings.xml中的servier標籤下的對應 -->
            <url>http://192.168.80.129:8081/repository/maven-snapshots/</url><!-- nexus的倉儲地址 -->
        </snapshotRepository>
        <repository>
            <id>releases</id>
            <url>http://192.168.80.129:8081/repository/maven-releases/</url>
        </repository>
    </distributionManagement>

實現nexus管理docker私服

nexus設定docker倉庫

  • 倉庫型別
專案 詳細說明
hosted 本地儲存,像官方倉庫一樣提供本地私庫功能
proxy 提供代理其他倉庫的型別
group 組型別,可以組合多個倉庫為一個地址提供服務
  • 建立docker-releases(hosted )
專案 詳細說明
型別 docker (hosted)
Name docker-releases
Blob store default
Deployment policy Allow redeploy

新建hosted型別的儲存

  • 建立docker-central(proxy)
專案 詳細說明
型別 docker (proxy)
Name docker-central
Docker Index Use Docker Hub
Blob store default

建立proxy型別的儲存
- 建立docker-public(group)

專案 詳細說明
型別 docker (group)
Name docker-public
HTTP Port 8083
Member repositories docker-central
Member repositories docker-releases
Blob store default

建立group型別的儲存

docker服務的設定

Docker的私庫可以使用HTTP或者HTTPS,Nexus 3都予以支援,本文的方式採用HTTP方式,因此需要設定docker,在docker啟動前設定如下資訊是需要的

專案 詳細說明
設定物件檔案 /etc/docker/daemon.json
設定內容 insecure-registries

詳情

{
            "registry-mirrors": ["https://registry.docker-cn.com"],
            "insecure-registries": ["192.168.80.129:8082","192.168.80.129:8083"],
            "disable-legacy-registry": true
}

設定完成後重啟docker服務

root@ubuntu:/home/tianbocheng# service docker restart 
## 重啟nexus服務
root@ubuntu:/home/tianbocheng# docker ps -a 
root@ubuntu:/home/tianbocheng# docker restart 016a4a644432(nexus的CONTAINER ID)
  • 驗證docker login
專案 詳細說明
docker-release倉庫 docker login -u admin -p admin123 192.168.80.129:8082
docker-cenreal倉庫 docker login -u admin -p admin123 192.168.80.129:8083

驗證成功

root@ubuntu:/home/tianbocheng# docker login -u admin -p admin123 192.168.80.129:8082
Login Succeeded
root@ubuntu:/home/tianbocheng# docker login -u admin -p admin123 192.168.80.129:8083
Login Succeeded
root@ubuntu:/home/tianbocheng# 
  • docker-central(proxy)驗證
root@ubuntu:/home/tianbocheng# docker pull 192.168.80.129:8083/redis
Using default tag: latest
latest: Pulling from redis
b0568b191983: Pulling fs layer 
6637dc5b29fe: Download complete 
7b4314315f15: Pulling fs layer 
2fd86759b5ff: Waiting 
0f04862b5a3b: Waiting 
2db0056aa977: Waiting 

查了一下nexus的一些issue,發現有不少都是跟blob相關,看起來相關的小的問題還有一些在不斷的收拾中,但是不影響結果。 確認proxy倉庫,發現pull的alpine的3.5版本已然在proxy倉庫中儲存完畢,所以上面的unknown blob也確實沒有影響結果。
本地proxy倉庫

  • docker-releases(hosted)驗證

檢視映象

root@ubuntu:/home/tianbocheng# docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
192.168.80.129:8082/paascloud-eureka   1.0                 ee8335f1e9f3        15 hours ago        643MB
mysql                                  5.7                 5195076672a7        2 weeks ago         371MB
liumiaocn/nexus                        latest              3f2921de4b91        4 months ago        485MB
java                                   8                   d23bdf5b1b1b        14 months ago       643MB

tag映象

root@ubuntu:/home/tianbocheng# docker tag mysql:5.7 192.168.80.129:8082/mysql:5.7
root@ubuntu:/home/tianbocheng# docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
192.168.80.129:8082/paascloud-eureka   1.0                 ee8335f1e9f3        15 hours ago        643MB
mysql                                  5.7                 5195076672a7        2 weeks ago         371MB
192.168.80.129:8082/mysql              5.7                 5195076672a7        2 weeks ago         371MB
liumiaocn/nexus                        latest              3f2921de4b91        4 months ago        485MB
java                                   8                   d23bdf5b1b1b        14 months ago       643MB

push映象

root@ubuntu:/home/tianbocheng# docker push 192.168.80.129:8082/mysql:5.7
The push refers to a repository [192.168.80.129:8082/mysql]
c5479ef6e03d: Pushed 
1df83efbc52b: Pushed 
4b402dfbab7b: Pushing [=======>                                           ]  38.28MB/256.4MB
14d83b80d542: Pushed 
b0c77fd3841d: Pushed 
317e578f94b9: Pushing [=================>                                 ]  15.71MB/44.72MB
fbb39c7dedaf: Pushed 
55d5d837463a: Pushed 
f0f28cc0eea1: Pushed 
813996252a80: Pushed 
3358360aedad: Pushing [=========>                                         ]  10.31MB/55.27MB

本地hosted倉庫

開發端設定私服的連結地址

docker服務端設定
由於開發段沒有docker環境,需要開啟遠端http訪問(不同版本作業系統,自行百度查詢docker如何開啟http訪問)
1. 建立/etc/systemd/system/docker.service.d目錄。
2. 建立一個/etc/systemd/system/docker.service.d/http-proxy.conf檔案。
3. 重新整理配置
4. 重啟docker服務
5. 驗證是否開啟

$ sudo mkdir /etc/systemd/system/docker.service.d
$ sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ docker -H tcp://127.0.0.1:2375 images

開發端pom.xml的設定
開發端設定引入maven-docker外掛,採用dockerfile的方式。

 <properties>
        <docker.host>http://192.168.80.129:2375</docker.host>
        <docker.repository>192.168.80.129:8082</docker.repository>
    </properties>


 <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <!-- 我的是spring boot專案,加入了boot打包的外掛(非boot專案不需要引入) -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- 新增docker-maven外掛 -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <!-- docker.host就是docker服務的地址 -->
                    <dockerHost>${docker.host}</dockerHost>
                    <serverId>docker-hub</serverId>
                    <!-- docker.repository就是私服的地址 -->
                    <imageName>${docker.repository}/${project.artifactId}:${project.version}</imageName>
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <forceTags>true</forceTags>
                </configuration>
            </plugin>
        </plugins>
    </build>

新建dockerfile資料夾和Dockerfile
ecplise中的樣例

# Version 0.0.1
FROM java:8
ENV JVM_OPTS ''
RUN bash -c 'touch /app.jar'
EXPOSE 8761
ENTRYPOINT java ${JVM_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /paascloud-eureka.jar

執行命令即可

mvn clean package docker:build
mvn clean package docker:build  -DpushImage

參考連結

相關推薦

nexus搭建mavendockermaven專案整合

目錄 實現功能: 通過nexus管理jar包 通過nexus管理docker映象 開發端機器遠端打包上傳jar 通過maven-docker外掛編譯為docker映象,部署到測試環境,並上傳的nexus私服 搭建環境 ubantu17

NodeJs實現以太坊錢包keystore生成匯入匯出匯入keystore匯出Keystore簽名轉賬轉賬確認

Keythereum是一個用於生成,匯入和匯出以太坊金鑰的JavaScript工具。 這提供了一種在本地和Web錢包中使用同一帳戶的簡單方法。 它可用於可驗證和儲存錢包。 Keythereum使用相同的金鑰派生函式(PBKDF2-SHA256或scrypt),對稱密碼(AES-128

Docker-通過docker-maven-plugin外掛實現docker映象構建自動釋出到遠端docker伺服器

我們知道,docker能實現應用打包隔離,實現快速部署和遷移。如果我們開發應用使用了spring cloud + spring boot架構,那麼,通過docker-maven-plugin實現快速構建映象併發布到遠端docker伺服器會非常方便。相關步驟參考如下: step1、開啟docker伺服器的tc

使用 Docker 安裝 Jenkins 構建Maven專案

環境: Ubuntu 16.04   + Docker兩篇官方文件歸納為”一句話搞定“:docker run \  -u root \  --rm \  -d \  -p 8080:8080 \  -p 50000:50000 \  -v jenkins-data:/var/

後端分頁神器mybatis pagehelper 在SSMspringboot專案中的使用

mybatis pagehelper想必大家都耳熟能詳了,是java後端用於做分頁查詢時一款非常好用的分頁外掛,同時也被人們稱為mybatis三劍客之一,下面 就給大家講講如何在SSM專案和springboot專案中使用mybatis pagehelper 一、myb

Maven學習(三):生命週期maven外掛

一、maven 生命週期 (一)簡介 Maven強大的一個重要的原因是它有一個十分完善的生命週期模型(lifecycle),這個生命週期可以從兩方面來理解:      1、顧名思義,執行Maven的每個步驟都由它來定義的,這種預定義的預設行為使得我們使用Ma

Intellij idea14.4 新建maven web專案tomcat服務整合

一:File ->New Project,左邊選單選擇maven專案,右邊勾選Create from archetype,找到org.apache.maven.archetype:maven-archetype-webapp,這個是Maven專案的一個骨架,就好像住酒

1107_Linux系統下如何安裝Nexus(使用Nexus搭建Maven)-2.Nexus倉庫設定手動更新索引自動更新索引

Linux系統下如何安裝Nexus(使用Nexus搭建Maven私服)-2.Nexus倉庫設定,手動更新索引,自動更新索引 2018年08月27日 17:30:53 weixin_42828741 閱讀數:64 還未安裝的可閱讀以下文章: Linux系統下如何安裝Nexus(使用Nexus搭

如何安裝Nexus Repository Manager OSS 3.x如何搭建管理Mavenwin10、win7通用安裝詳解附:錯誤解決方案。

        今天搭建一個Maven私服花了不少功夫,查閱了很多安裝的帖子以及百度了很多錯誤解決方案,然後將所有的帖子精華部分,附上我的經驗來帶給大家一個特別詳細的安裝方案,所以該文章大部分可以說是總結別人帖子。話不多說,開始安裝: 1.下載 &nb

Docker安裝Nexus搭建Maven、部署引用jar包

docker run --restart="always" -d -p 8081:8081 --name nexus -v /opt/data/nexus-data:/nexus-data sonatype/nexus3 注意點:若出現許可權問題 chmod 777 nexus-

Windows下使用Nexus搭建Maven(安裝)

支持 blog 試用 prop 解壓 結束 factor repos name 一、下載Nexus 下載OSS最新版:https://www.sonatype.com/download-oss-sonatype 老版本:https://support.sonatype.

Windows 下Nexus搭建Maven

4.3 快照 激活 nap cti sha 基本 新增 項目 轉自:http://blog.csdn.net/fanyuna/article/details/40145827 1、 為什麽使用Nexus 如果沒有私服,我們所需的所有構件都需要通過mave

nexus搭建mavenjar包上傳和下載

ive 校驗 public 我們 賬號 依賴 detail 接下來 triangle nexus搭建maven私服及私服jar包上傳和下載 標簽: nexus管理maven庫snapshot 2017-06-28 13:02 844人閱讀 評論(0) 收

Nexus搭建Maven

gem 說明 原因 x86 copy href .com 3.x jar包 公司一般都有個自己的私服來管理各種jar包,原因大概有這麽3個,分別是:     1、有的公司不能訪問外網,只能通過私服來管理jar包和插件;     2、公司網速比較慢,通過公司的私服來獲取jar

Maven】3.使用IntelliJ IDEA 使用本地搭建maven而不是使用默認的maven設置

apply dea rri ref http 而不是 tell .com .html 安裝Idea的教程:http://www.cnblogs.com/sxdcgaq8080/p/7641379.html 搭建maven私服的教程:http://www.cnblogs.co

ubuntu下使用Nexus搭建Maven

專業 執行命令 點擊 代理 都是 roo 系統文件 update in 連接 ubuntu下使用Nexus搭建Maven私服 1、私服簡介: 私服是架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構件。有了私服之後,當 Maven 需要下載構件時,直接請求私

使用Maven下載依賴包及使用Nexus搭建

不存在 packaging policy jpg .com 庫類 rep oca 解壓 在項目的搭建過程中,所以很多時候我們需要上網去一個一個找項目的依賴包。這個過程確實是一個效率很低而且很讓人惱火的事情。 很多時候能找到對應的官網下載固然是好,但是大部分時候我們都只能在一

nexus 搭建 maven

一. 下載並安裝nexus 1. 安裝brew /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 2. 安裝nexus

maven系列-(六)使用Nexus搭建

前面的文章,在說到maven倉庫的時候,提到過maven私服的概念,maven私服屬於maven遠端倉庫的一種,是在區域網內搭建的一個私有的倉庫伺服器。一般情況下,如果是在一個組織內使用maven的話,都會有自己搭建的maven私服。使用maven私服可以降低中央倉庫的負荷,節省外網頻寬,加

使用nexus搭建maven

jar instance maven ati 右鍵 加入jar user 平時 tor   在日常開發中我們會經常使用的第三方jar包,而我們對jar包的管理往往是使用maven去做管理,但是有時候我們發現使用到的一些jar在阿裏的中央倉庫是找不到的,而且就算找到,下載速度