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

CentOS7-Docker 搭建Maven私服的更多相关文章

  1. 【原创】Docker 搭建Maven私服nexus 3.17初始密码登录不上问题/admin登陆不上问题

    [原创-转载请说明出处] 博主最近在虚拟机中搭建Maven私服,遇到了一个关键问题就是nexus 3.17版本后初始密码不是admin/admin123. 对于nexus不熟悉的我弄了很长时间!!!心 ...

  2. docker 搭建maven 私服

    # 搜索镜像 docker search nexus; #拉取nexus镜像docker pull sonatype/nexus; #运行 -id 创建守护式容器--privileged=true 授 ...

  3. 基于Docker搭建Maven私服Nexus,Nexus详解

    备注:首先在linux环境安装Java环境和Docker,私服需要的服务器性能和硬盘存储要高一点,内存不足可能到时启动失败,这里以4核8GLinux服务器做演示 一:基于Docker安装nexus3 ...

  4. 使用Docker搭建maven私服 及常规使用方法

    安装-登录-配置 下载镜像 docker pull sonatype/nexus3 运行 docker run -d -p 9998:8081 --name nexus --restart=alway ...

  5. 搭建Maven私服那点事

    摘要:本文主要介绍在CentOS7.1下使用nexus3.6.0搭建maven私服,以及maven私服的使用(将自己的Maven项目指定到私服地址.将第三方项目jar上传到私服供其他项目组使用) 一. ...

  6. 搭建Maven私服

    最近从SVN下载的代码,在本地构建时出现了诸多问题,部分依赖下载超时,就想起在局域网搭建Maven私服,废话不说了,在测试服务器上建的已经成功,就随便找台机子再练习一遍顺道写个日志.1.前往http: ...

  7. Maven学习 (四) 使用Nexus搭建Maven私服

    为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...

  8. Maven-004-使用 Nexus 搭建 maven 私服

    从去年至今,自己一直在学习自动化测试工具,想利用自动化工具尽可能的将重复的.关键的.耗时耗力的工作实现自动化,减轻日常测试工作,提升测试效率.在学习的过程中,将 maven 作为了项目开发管理工具,进 ...

  9. Ubuntu server下搭建Maven私服Nexus

    Ubuntu server下搭建Maven私服Nexus Maven私服Nexus的作用,主要是为了节省资源,在内部作为maven开发资源共享服务器来使用. 1.下载 通过root用户进去Ubuntu ...

随机推荐

  1. linux查找与替换练习

    查找和替换-举例 删除/tmp/abc文件中第 2 至 5 行的内容 在第 2 行后面添加 123456 这一行 在文件的最后一行前面添加 123456 将文件中的 cat全部替换成 dog 注以上操 ...

  2. Laravel 自定义公共函数全局使用,并设置自定加载

    开发中经常定义一些公共函数(如:获取用户信息.csv导入导出等常用函数),方便控制层,模型层调用. 那么在Laravle框架中怎么使用? 方法如下: 1.在根目录app下新建公共目录Library/U ...

  3. [转载] miller rabin

    本文转载自https://www.cnblogs.com/zsq259/p/11602175.html Miller-Rabin 事先声明,因为菜鸡Hastin知识水平有限就是菜,因此语言可能不是特别 ...

  4. BZOJ 3561: DZY Loves Math VI 莫比乌斯反演+复杂度分析

    推到了一个推不下去的形式,然后就不会了 ~ 看题解后傻了:我推的是对的,推不下去是因为不需要再推了. 复杂度看似很大,但其实是均摊 $O(n)$ 的,看来分析复杂度也是一个能力啊 ~ code: #i ...

  5. 切比雪夫定理(Chebyshev's theorem)与经验法则(Empirical Rule)

    切比雪夫定理(Chebyshev's theorem):适用于任何数据集,而不论数据的分布情况如何. 与平均数的距离在z个标准差之内的数值所占的比例至少为(1-1/z2),其中z是大于1的任意实数. ...

  6. nginx 访问控制之 认证

    安装httpd yum install -y httpd 使用htpasswd生产密码文件 htpasswd -c /usr/local/nginx/conf/htpasswd aming# -c 表 ...

  7. Mean Average Precision(mAP),Precision,Recall,Accuracy,F1_score,PR曲线、ROC曲线,AUC值,决定系数R^2 的含义与计算

    背景   之前在研究Object Detection的时候,只是知道Precision这个指标,但是mAP(mean Average Precision)具体是如何计算的,暂时还不知道.最近做OD的任 ...

  8. php如何实现三级分销

    Q: 项目要实现三级分销;对于数据库的设计和用户注册后给所有上级(最多三级)返利 但是一点头绪都没有,请大神帮忙给个思路! 如果是直接注册给奖励20元如果是通过二维码或者链接进入的注册页面 找到上级 ...

  9. Linux系统实现虚拟内存有两种方法:交换分区(swap分区)和交换文件

    Linux系统实现虚拟内存有两种方法:交换分区(swap分区)和交换文件 交换文件 查看内存:free -m , -m是显示单位为MB,-g单位GB 创建一个文件:touch /root/swapfi ...

  10. 对回溯算法的理解(以数独游戏为例,使用c++实现)

    算法思想: 数独游戏的规则: 每一行都用到1.2.3.4.5.6.7.8.9位置不限: 每一列都用到1.2.3.4.5.6.7.8.9位置不限: 每3×3的格子(共九个这样的格子)都用到1.2.3.4 ...