文章目录
- 前言
- 一、Docker Compose 快速搭建 nexus 可运行环境
- 1. docker文件目录结构
- 2. docker-compose.yml 文件
- 3. 运行 docker-compose 命令
- 二、配置 nexus 创建 maven 私有仓库
- 1. 点击红框进入创建仓库页面
- 2. 点击 Create repository 创建仓库
- 3. 点击 maven2(hosted) 创建本地仓库
- 4. 填写红色框选区域
- 5. 步骤一样创建 demo-release 仓库
- 6. 点击 maven2(proxy) 创建代理仓库
- 7. 点击 maven2(group) 创建仓库组
- 8. 回到首页 查看创建的目录
- 三、下载并配置 maven
- 1. 下载 maven
- 2. 创建 repository 文件夹 及 settings.xml 文件
- 3. 配置 settings.xml 文件
- 四、 创建 Spring Boot 示例代码
- 1. 工程结构
- 2. 设置工程中的maven
- 3. 设置工程中的pom.xml
- 4. deploy 上传代码到maven 私有仓库
- 五、 配置Docker私有仓库,并上传打包镜像
- 1. 设置账号验证类型
- 2. 添加 私有仓库地址到 docker 配置文件
- 3. 配置示例代码中的pom.xml
- 4. 工程根目录下创建 Dockerfile
- 5. 打包镜像并上传到docker私有仓库
- 总结
前言
在团队协作开发的时候,为了方便管理各个模块的maven导入,搭建企业私有仓库就比较方便。本文就使用 nexus 搭建 maven 以及docker 的企业私有仓库
一、Docker Compose 快速搭建 nexus 可运行环境
1. docker文件目录结构
docker # E:\docker 目录
- nexus # E:\docker\nexus 目录
- data # E:\docker\nexus\data 目录
- docker-compose.yml # E:\docker\docker-compose.yml 文件
2. docker-compose.yml 文件
version: "3"
networks:
backend:
driver: bridge
services:
# maven docker 私服仓库
nexus:
image: sonatype/nexus3:latest
container_name: nexus
restart: always
volumes:
# - 宿主机目录:容器内目录
- ./nexus/data:/nexus-data
ports:
- 8081:8081
- 8082:8082
- 8083:8083
networks:
- backend
3. 运行 docker-compose 命令
docker-compose up -d nexus
# 利用 docker ps 查看运行结果
PS E:\docker> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b7ca82bda9e2 sonatype/nexus3:latest "sh -c ${SONATYPE_DI…" About an hour ago Up 30 minutes 0.0.0.0:8081-8084->8081-8084/tcp, :::8081-8084->8081-8084/tcp nexus
浏览器访问 127.0.0.1:8081 稍等片刻就会显示登录界面
首次登陆用户名 admin 初始密码保存在 E:\docker\nexus\data\admin.password 打开文件 里边的就是密码
选择第二项 禁止匿名访问私有仓库
二、配置 nexus 创建 maven 私有仓库
1. 点击红框进入创建仓库页面
以 demo 为例 分别创建 demo-snapshots、demo-release、demo-aliyun、demo-central
2. 点击 Create repository 创建仓库
3. 点击 maven2(hosted) 创建本地仓库
选择创建 maven 类型
group 代表组的概念
hosted 代表本地仓库
proxy 代表代理中央仓库 例如 阿里云的仓库
4. 填写红色框选区域
Name: demo-snapshots 仓库名字
Version policy:指定为 snapshots 快照版仓库
Deployment policy:选择 Allow redeploy
最后点击 Create repository 创建仓库
5. 步骤一样创建 demo-release 仓库
注意: Version policy 选择 Release 类型
6. 点击 maven2(proxy) 创建代理仓库
注意: Remote storage: 填写 阿里云的maven 仓库地址(
https://maven.aliyun.com/repository/public
) 国外中央仓库访问太慢
7. 点击 maven2(group) 创建仓库组
注意: 将绿色 框选仓库选择到右边区域
排列循序依次为 demo-snapshots -->demo-release --> demo-aliyun
意思是 maven 在加载包的时候一次按照上面的顺序进行查找
8. 回到首页 查看创建的目录
两个 hosted 类型的本地仓库,一个proxy类型的代理仓库,一个 group 类型的组包含其他三种仓库提供对外访问的地址
三、下载并配置 maven
1. 下载 maven
2. 创建 repository 文件夹 及 settings.xml 文件
settings.xml 文件可以从 解压的maven压缩包中复制过来 具体在解压文件里的
conf\settings.xml
3. 配置 settings.xml 文件
主要 配置
<localRepository>xxxx</localRepository> 、<server>xxxxx</server> 、<mirror>xxxx</mirror>
这三个配置
- localRepository :配置本地仓库的目录地址 例如:
E:\software\maven\repository
- server:配置 nuxus 的登陆用户名以及密码 注意id参数 之后要和 pom文件中的配置要对应起来
- mirror:配置 本地镜像仓库地址
<?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:\software\maven\repository</localRepository>
<servers>
<server>
<id>demo-snapshots</id>
<username>admin</username>
<password>133232</password>
</server>
<server>
<id>demo-releases</id>
<username>admin</username>
<password>133232</password>
</server>
</servers>
<mirrors>
<mirror>
<id>maven-releases</id>
<mirrorOf>*</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://127.0.0.1:8081/repository/demo-public/</url>
</mirror>
</mirrors>
</settings>
四、 创建 Spring Boot 示例代码
1. 工程结构
- Spring Boot : 2.5.0
- jdk:1.8
2. 设置工程中的maven
注意:修改编辑器中默认的maven setting.xml 和 repository 文件设置为自定义的配置文件
3. 设置工程中的pom.xml
注意: 192.168.101.111换成自己本地ip
pom 中添加<distributionManagement>xx</distributionManagement>
配置
- id 对应的是 maven 配置文件settings.xml 中的 server 对应的 id
- url 地址 对应的是 nexus 中 如图2 中 URL 点击 copy 复制仓库地址
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>blog</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>blog</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- 添加 demo-snapshots 仓库地址和 demo-release 仓库地址 -->
<distributionManagement>
<!--
demo-snapshots仓库默认用户名密码读取的是 maven中setting.xml中server的配置 如下
<server>
<id>demo-snapshots</id>
<username>admin</username>
<password>133232</password>
</server>
-->
<snapshotRepository>
<!--id 对应的是 maven中setting.xml 文件 中server配置的id-->
<id>demo-snapshots</id>
<!--url 对应的是 nexus 中 demo-snapshots文件夹的路径地址-->
<url>http://192.168.101.111:8081/repository/demo-snapshots/</url>
</snapshotRepository>
<!--
demo-releases仓库 默认用户名密码读取的是 maven中setting.xml中server的配置 如下
<server>
<id>demo-releases</id>
<username>admin</username>
<password>133232</password>
</server>
-->
<repository>
<id>demo-releases</id>
<url>http://192.168.101.111:8081/repository/demo-releases/</url>
</repository>
</distributionManagement>
</project>
图2:
4. deploy 上传代码到maven 私有仓库
查看 nexus 上 demo-snapshots 仓库目录
看到代码已经上传到maven私有仓库
!!!以上为maven 私有仓库搭建以及上传
五、 配置Docker私有仓库,并上传打包镜像
1. 设置账号验证类型
将 Docker Bearer Token Realm 从左侧移到右边区域
2. 添加 私有仓库地址到 docker 配置文件
Linux上如 Ubuntu 配置: /etc/docker/daemon.json
注意:ip 换成自己的本地ip
"insecure-registries": [
"192.168.101.111:8082"
],
3. 配置示例代码中的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>blog</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>blog</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- docker 插件配置-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<!--
此处设置 true 默认用户名密码读取的是 maven中setting.xml中server的配置 如下
<server>
<id>192.168.101.111:8082</id>
<username>admin</username>
<password>133232</password>
</server>
-->
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<repository>192.168.101.111:8082/${project.artifactId}</repository>
<tag>${project.version}</tag>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>demo-snapshots</id>
<url>http://192.168.101.111:8081/repository/demo-snapshots/</url>
</snapshotRepository>
<repository>
<id>demo-releases</id>
<url>http://192.168.101.111:8081/repository/demo-releases/</url>
</repository>
</distributionManagement>
</project>
4. 工程根目录下创建 Dockerfile
注意:默认读取的是根目录下的Dockerfile
Dockerfile 内容
FROM java:8
ADD target/*.jar /main.jar
# 运行过程中创建一个 app.jar文件
RUN bash -c 'touch /main.jar'
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/main.jar"]
# 指定维护者的名字 758899293@qq.com
MAINTAINER luyuan
5. 打包镜像并上传到docker私有仓库
执行 package 打包命令 生成 docker 本地镜像
执行 dockerfile:push 打包上传 本地docker镜像到私有仓库
查看 nexus docker仓库目录
打包镜像上传成功
搜索 docker 私有仓库的镜像
总结
以上就是通过 nexus 搭建 maven 以及docker 私有仓库的个人实践总结 , 本人也是摸索实践,如有披露请评论区指正。谢谢!