第09章 Docker 中 Sonatype Nexus Repository Manager3 的安装与配置

文章目录

  • 第09章 Docker 中 Sonatype Nexus Repository Manager3 的安装与配置
  • 前言
  • 目标
  • 环境
  • 安装
  • 运行安装命令
  • 开放端口
  • 测试安装
  • 构建 nexus 仓库镜像
  • Chef Solo运行时和应用程序
  • 测试Dockerfile
  • Red Hat红帽认证图像
  • 笔记
  • 持久数据
  • 获得帮助

前言

  • 为什么要使用 Sonatype Nexus Repository Manager3 ?

具体请参考我的第04章内容。

  • 什么是 Sonatype Nexus Repository Manager3?

具体请参考我的第04章内容。

  • 什么是 Docker?

具体请参考我的第08章内容。

  • 为什么要在 Docker 中安装 Sonatype Nexus Repository Manager3?

为了开发环境一致性、可移植性、易于管理和维护性。

目标

  • 完成 Sonatype Nexus Repository Manager3 在 Docker 中的安装与配置。
  • 安装在 Docker 中的 Sonatype Nexus Repository Manager3 能正常对外提供服务。
  • 在外部开发环境中能正常访问和使用 Sonatype Nexus Repository Manager3 私服。

环境

  • **VMware:**VMware Workstation 14 Pro
  • **Linux:**CentOS7.4
  • **Docker:**18.06.0-ce, build 0ffa825
  • **Nexus:**Sonatype Nexus Repository Manager3(OSS)
  • **JDK:**jdk1.8.0_172

安装

运行安装命令

安装并运行 Sonatype Nexus3 Docker: sonatype/nexus3,请将绑定到主机的8081端口打开。

适用于Sonatype Nexus Repository Manager 3的Dockerfile,基于CentOS。

$ sudo docker run -d -p 8081:8081 --name nexus sonatype/nexus3

运行命令安装结果

[ringyin@node6 ~]$ sudo docker run -d -p 8081:8081 --name nexus sonatype/nexus3
Unable to find image 'sonatype/nexus3:latest' locally
latest: Pulling from sonatype/nexus3
7dc0dca2b151: Pull complete 
68f6b3431de1: Pull complete 
3d53a2c6a5ef: Pull complete 
Digest: sha256:e57d22b59b607d055f9241f1613073ec1b46c37afae30d67707072f19a87d244
Status: Downloaded newer image for sonatype/nexus3:latest
eed3da20332e062f9c88cacac1f938fa852f06bc5aab7e72ad2333caa6007588

开放端口

## 打开 8081 端口
[ringyin@node1 ~]$ sudo firewall-cmd --zone=public --add-port=8081/tcp --permanent 
[ringyin@node1 ~]$ sudo firewall-cmd --reload ## 重启防火墙

测试安装

$ curl -u admin:admin123 http://localhost:8081/service/metrics/ping

测试结果

[ringyin@node6 ~]$ curl -u admin:admin123 http://localhost:8081/service/metrics/ping
pong

我这边使用的安装命令

$ sudo docker run -d -p 8081:8081 --name nexus -e INSTALL4J_ADD_VM_PARAMS="-Xms2g -Xmx2g -XX:MaxDirectMemorySize=3g -v nexus-data:/nexus-data sonatype/nexus3

构建 nexus 仓库镜像

要从Docker文件构建docker镜像,可以使用以下命令:

$ docker build --rm=true --tag=sonatype/nexus3 .

构建映像时可以使用以下可选变量:

  • NEXUS_VERSION:Nexus Repository Manager的版本
  • NEXUS_DOWNLOAD_URL:下载Nexus存储库的URL,替代使用NEXUS_VERSION从Sonatype下载
  • NEXUS_DOWNLOAD_SHA256_HASH:下载的Nexus Repository Manager归档的Sha256校验和。 NEXUS_VERSION必需或提供NEXUS_DOWNLOAD_URL

Chef Solo运行时和应用程序

Chef Solo用于构建Docker镜像的运行时和应用程序层。正在使用的Chef cookbook是可用的

在sonatype/chef-nexus-repository-manager的GitHub上。

测试Dockerfile

我们使用rspec作为测试框架。 serverspec提供了一个docker后端(参见测试代码中设置的方法)

在docker容器中运行测试,并抽象出测试中分布之间的差异 (例如,yum,apt,…)。

rspec [--backtrace] spec/Dockerfile_spec.rb

Red Hat红帽认证图像

可以使用Dockerfile.rh.el创建Red Hat认证的容器映像,该映像是为了符合Red Hat认证而构建的。

该图像包含额外的元数据,以符合Kubernetes和OpenShift标准,一个目录与 适用于该软件的许可证和man文件,以获取有关如何使用该软件的帮助。

它还使用了ENTRYPOINT 脚本确保正在运行的用户可以访问OpenShift“受限制”SCC的相应权限。

除了 红帽企业Linux映像,Dockerfile.rh.centos提供相同的附加功能,但具有CentOS基础。

红帽认证的容器图像可从中获得

Red Hat Container Catalog

合格的帐户可以从registry.connect.redhat.com获取它。

笔记

  • 默认凭据用户名和密码为:admin/admin123
  • 新容器服务启动可能需要一些时间(2-3分钟) 。

一旦Nexus准备就绪,您可以 tail 监控运行日志:

$ docker logs -f nexus
  • Nexus的安装是/opt/sonatype/nexus。
  • 持久性目录/nexus-data用于配置、日志和存储。此目录需要由Nexus写入 进程,以UID 200运行。
  • 有一个环境变量用于将JVM参数传递给启动脚本
$ docker run -d -p 8081:8081 --name nexus -e INSTALL4J_ADD_VM_PARAMS="-Xms2g -Xmx2g -XX:MaxDirectMemorySize=3g -Djava.util.prefs.userRoot=/some-other-dir" sonatype/nexus3

特别值得注意的是-Djava.util.prefs.userRoot=/some-other-dir 可以设置为持久路径, 如果重新启动容器,这将保持相关数据,则安装Nexus Repository许可证。

  • 另一个环境变量可用于控制Nexus上下文路径
  • NEXUS_CONTEXT, 默认为 /这可以在运行时提供:
$ docker run -d -p 8081:8081 --name nexus -e NEXUS_CONTEXT=nexus sonatype/nexus3

持久数据

使用 Docker 处理持久存储要求有两种通用方法。请参阅在  Managing Data in Containers 了解更多信息。

  1. 使用docker volume。由于docker volumes 是持久性的,因此可以专门为其创建 volume 这个目的。这是推荐的方法。
$ docker volume create --name nexus-data
$ docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
  1. 将主机目录挂载为卷。这不是便携式的 依赖于主机上具有正确权限的现有目录。 但是,在此卷需要的某些情况下,它可能很有用,被分配给某些特定的底层存储。
$ mkdir /some/dir/nexus-data && chown -R 200 /some/dir/nexus-data
$ docker run -d -p 8081:8081 --name nexus -v /some/dir/nexus-data:/nexus-data sonatype/nexus3

获得帮助

希望为我们的Docker图像做出贡献但需要一些帮助?有几种方法可以获取信息或我们的注意力:

  • Chat with us on Gitter
  • File an issue on our public JIRA
  • Check out the Nexus3 tag on Stack Overflow
  • Check out the Nexus Repository User List

创建 Docker Image 私有仓库

tackoverflow.com/questions/tagged/nexus3) tag on Stack Overflow

  • Check out the Nexus Repository User List

创建 Docker Image 私有仓库