原创

使用Docker搭建Maven私服

使用场景

有时候项目中会引用个人或非官方组织编写的组件,且未在中央仓库中收录的jar包,本地依赖配置稍显繁琐,便另辟蹊径,使用Docker搭建自己的Maven私服。

有关Maven、或Docker的名词介绍或简单使用,此处将不做赘述,烦请读者自行参阅官方文档,或者阅读我之前的文章。

环境

  • 远程主机只是简单的一台centos7虚拟机
  • Docker version 1.13.1
  • 本地环境 MacOs
  • jdk1.8
  • maven 3.6.1
  • idea 2019.1

安装Nexus

docker search nexus3

docker pull docker.io/sonatype/nexus3 默认下载最新版本

docker run -id --privileged=true --name=leo-nexus3 --restart=always -p 8081:8081 -p 8082:8082 -p 8083:8083 -v /home/nexus-data:/nexus-data 836c51250912

后台运行nexus镜像,指定容器启动暴露的8081端口到对应主机的8081端口
将容器内部/nexus-data目录挂载到对应主机目录/home/nexus-data

运行参数解释:

  • -id 创建守护式容器
  • --privileged=true 授予root权限(挂载多级目录必须为true,否则容器访问宿主机权限不足)
  • --name=名字 给容器起个名字
  • -p 宿主机端口:容器端口映射
  • -v 宿主机目录:容器目录 目录挂载
  • 8081:nexus3网页端
  • 8082:docker(hosted)私有仓库,可以pull和push
  • 8083:docker(proxy)代理远程仓库,只能pull

/home/nexus-data目录,切记定要授予可写权限, chmod -R 757 /home/nexus-data

docker ps 查看nexus镜像是否启动,netstat -ntlp查看端口8081是否被占用

开始使用Nexus

1. 浏览器中打开nexus

浏览器输入:http://ip:8081

2. 登录

默认用户名admin,密码是admin123。为了安全性,可以选择修改密码。

3. 查看仓库

默认情况下,nexus提供了四个仓库

我的仓库

  • maven-central 代理中央仓库,从公网下载jar
  • maven-release 发布版本内容(即发布jar的正式版本)
  • maven-snapshots 发布版本内容(即发布jar的快照版本)
  • maven-public 以上三个仓库的小组

4. Nexus的Maven仓库配置

Proxy 私库配置

maven-central设置代理位置,可以选择阿里的国内镜像,如:http://maven.aliyun.com/nexus/content/groups/public/

Proxy 私库配置

开发段配置Maven settings.xml文件

修改nexus.ip为nexus容器部署的IP地址


<?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>改成你的</localRepository>-->
    <pluginGroups>
        <pluginGroup>org.sonatype.plugins</pluginGroup>
    </pluginGroups>
    <proxies>
    </proxies>
    <servers>
        <server>
            <id>releases</id>
            <username>admin</username>
            <password>Yyf5211314!</password>
        </server>
        <server>
            <id>snapshots</id>
            <username>admin</username>
            <password>Yyf5211314!</password>
        </server>
        <server>
            <id>docker-hub</id>
            <username>admin</username>
            <password>Yyf5211314!</password>
            <configuration>
                <email>weixiao.me@aliyun.com</email>
            </configuration>
        </server>
    </servers>

    <mirrors>
        <mirror>
            <id>nexusSnapashots</id>
            <url>http://192.168.124.106: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.124.106: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.124.106: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.124.106/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.124.106: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>
修改pom文件

修改nexus.ip 为你的nexus的ip地址


 <distributionManagement>
        <snapshotRepository>
            <id>snapshots</id><!-- 这个id和settings.xml中的servier标签下的对应 -->
            <url>http://192.168.124.106:8081/repository/maven-snapshots/</url>
            <!-- nexus的仓储地址 -->
        </snapshotRepository>
        <repository>
            <id>releases</id>
            <url>http://192.168.124.106:8081/repository/maven-releases/</url>
        </repository>
    </distributionManagement>
更新依赖并查看nexus是否下载成功

我的maven依赖

mvn clean deploy 可以帮助你发布代码到nexus

正文到此结束