在本文中,将介绍如何使用 Docker 部署一个 Maven 本地私服。Maven 私服可以帮助我们管理和共享本地的 Maven 依赖,提高开发效率。本文将使用 Sonatype Nexus 作为 Maven 私服,并使用 Docker Compose 来部署和管理容器。
准备工作
在开始之前,您需要安装以下工具:
- Docker:用于创建、运行和管理容器。
- Docker Compose:用于定义和运行多个 Docker 容器的工具。
- Maven:用于构建和上传项目到 Maven 私服。
步骤一:编写 Docker Compose 文件
下面将使用 Docker Compose 来定义和运行 Sonatype Nexus 容器。首先,创建一个名为 docker-compose.yml
的文件并添加以下内容:
version: '3'
services:
nexus:
image: sonatype/nexus3
ports:
- "8081:8081"
volumes:
- nexus-data:/nexus-data
volumes:
nexus-data:
这个 Docker Compose 文件定义了一个名为 nexus
的服务,使用 Sonatype Nexus 3 的镜像。将容器的 8081
端口映射到主机的 8081
端口,以便可以通过浏览器访问 Nexus 控制台。还定义了一个名为 nexus-data
的数据卷,用于持久化 Nexus 数据。
步骤二:启动容器
现在可以使用 Docker Compose 启动 Sonatype Nexus 容器。打开命令行界面并运行以下命令:
docker-compose up -d
这将下载 Sonatype Nexus 3 的镜像并启动一个名为 nexus
的容器。这个过程可能需要一些时间,具体取决于您的网络速度。过程如下图所示
一旦容器启动完成,您可以使用 docker ps
命令来检查容器的状态。您应该看到一个名为 nexus
的容器正在运行:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8e2ec0d72c80 sonatype/nexus3 "/usr/local/bin/nexu…" 33 seconds ago Up 29 seconds 0.0.0.0:8081->8081/tcp, 8082/tcp maven-private-repo_nexus_1
步骤三:配置 Nexus
3.1 访问 Nexus 控制台
现在可以通过浏览器访问 Nexus 控制台。在浏览器中输入 http://localhost:8081
,您应该会看到 Nexus 的欢迎页面。
3.2 登陆
单击 “Sign In” 按钮,使用默认管理员凭据登录(用户名为 admin
,密码为 admin123
,根据版本会变化,应查阅官网)。当前版本店家 Sign In 后,提示Your admin user password is located in
/nexus-data/admin.password on the server.
进入容器内部查看密码:
# 进入容器,<container-id> 要替换为真实的ID,或者容器名称
docker exec -it <container-id> sh
# 查看密码
cat /nexus-data/admin.password
3.3 仓库服务设置
登录成功后提示进行设置
可以根据需要选择是否设置。主要设置修改admin密码、设置匿名用户访问是否开启
下图是开启匿名用用户访问权限(表示用户可以不用登录就能查该仓库中的依赖、并可以下载需要的依赖)后,在非登录状态下的页面
登录后,您应该会看到 Nexus 的仪表板。这里是您可以管理 Maven 仓库和上传依赖的地方。下图是admin 登录后的页面,可以看到左边多了Upload按钮,上方菜单条多了**设置(齿轮图标)**菜单。
3.4 添加新仓库
首先,需要创建一个 Maven 仓库。单击左侧导航栏中的 “Repositories”(仓库)选项卡,然后单击 “Create repository”(创建仓库)按钮。
在弹出的窗口中,选择 “maven2(hosted)” 仓库类型。
在下一个页面中,您需要指定仓库的名称、标识符和描述。将名称设置为 “maven-releases-xzbd”,并在描述中添加一些文本,以便您和其他开发人员理解仓库的用途。
单击 “Create repository”(创建仓库)按钮,Nexus 将创建一个新的 Maven 仓库。您可以在左侧导航栏中找到该仓库。
3.5 查看仓库列表
现在已经成功创建了一个 Maven 仓库,可以将依赖上传到该仓库中了。
步骤四:上传依赖
现在可以将 Maven 依赖上传到刚刚创建的 Maven 仓库中。
打开 Mavan 的 settings.xml
配置文件(在Maven 安装目录的 conf 下),配置仓库认证信息:
<server>
<id>nexus-releases-xzbd</id>
<username>your_username_here</username>
<password>your_password_here</password>
</server>
打开您的 Maven 项目,并在 pom.xml
文件中添加以下内容:
<distributionManagement>
<repository>
<id>nexus-releases-xzbd</id>
<name>Nexus Releases Repository</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
</distributionManagement>
这将指定 Maven 上传依赖时使用的 Nexus 仓库。您需要将 url
值设置为您的 Nexus 仓库的 URL,这里使用的是刚刚创建的 maven-releases-xzbd
仓库。您还需要将 id
和 name
设置为您喜欢的值。
保存 pom.xml
文件后,您可以使用以下命令将项目打包后上传到 Maven 仓库中:
mvn deploy
此命令将构建项目并将其上传到 Maven 仓库中。您可以在 Nexus 控制台中检查上传的依赖是否已正确显示在 maven-releases-xzbd
仓库中。
注
上传过程可能遇到失败认证失败、或上传的Jar包与仓库策略不一致情况,由于篇幅太长,请自行百度解决。
总结
在本文中,使用 Docker 和 Docker Compose 部署了一个 Maven 本地私服,并成功将 Maven 依赖上传到了该私服中。Maven 私服可以让更方便地管理和共享本地的 Maven 依赖,提高开发效率。如果您还没有使用 Maven 私服,强烈建议您尝试一下。