第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 了解更多信息。
- 使用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
- 将主机目录挂载为卷。这不是便携式的 依赖于主机上具有正确权限的现有目录。 但是,在此卷需要的某些情况下,它可能很有用,被分配给某些特定的底层存储。
$ 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 私有仓库