Sonatype Nexus Repository Docker:sonatype/nexus3
这是 Sonatype Nexus Repository 3 的 Dockerfile,从 3.18 版本开始,镜像基于 Red Hat 通用基础镜像,而早期版本使用 CentOS。
贡献指南
请阅读我们的贡献指南,以更好地了解我们希望贡献流程如何进行。
运行
要运行并将暴露的端口 8081 绑定到主机,请使用:
$ docker run -d -p 8081:8081 --name nexus sonatype/nexus3
停止时,请确保留出足够的时间让数据库完全关闭。
docker stop --time=120 <容器名称>
测试:
$ curl http://localhost:8081/
构建 Sonatype Nexus Repository 镜像
要从 Dockerfile 构建 Docker 镜像,可以使用以下命令:
$ docker build --rm=true --tag=sonatype/nexus3 .
构建镜像时可以使用以下可选变量:
- NEXUS_VERSION:Sonatype Nexus Repository 的版本
- NEXUS_DOWNLOAD_URL:Sonatype Nexus Repository 的下载 URL,作为使用
NEXUS_VERSION
从 Sonatype 下载的替代方案 - NEXUS_DOWNLOAD_SHA256_HASH:下载的 Sonatype Nexus Repository 存档的 Sha256 校验和。如果提供了
NEXUS_VERSION
或NEXUS_DOWNLOAD_URL
,则此项为必填
用于运行时和应用程序的 Chef Solo
Chef Solo 用于构建 Docker 镜像的运行时和应用程序层。使用的 Chef cookbook 可在 GitHub 上的 sonatype/chef-nexus-repository-manager 获得。
测试 Dockerfile
我们使用 rspec
作为测试框架。serverspec
提供了一个 Docker 后端(参见测试代码中的 set
方法)来在 Docker 容器内运行测试,并在测试中抽象掉不同发行版之间的差异(如 yum、apt 等)。
rspec [--backtrace] spec/Dockerfile_spec.rb
Red Hat 认证镜像
可以使用 Dockerfile.rh.ubi 创建 Red Hat 认证容器镜像,该镜像符合 Red Hat 认证标准。该镜像包括额外的元数据以符合 Kubernetes 和 OpenShift 标准,一个包含适用软件许可证的目录,以及一个关于如何使用软件的帮助文件。它还使用 ENTRYPOINT 脚本确保运行用户具有适当的权限以满足 OpenShift 的"受限"SCC。
Red Hat 认证容器镜像可从 Red Hat Container Catalog 获得,符合条件的账户可以从 registry.connect.redhat.com 拉取。
其他 Red Hat 镜像
除了通用基础镜像外,我们还可以基于以下系统构建镜像:
- Red Hat Enterprise Linux:Dockerfile.rh.el
- CentOS:Dockerfile.rh.centos
Alpine 镜像
可以使用 Dockerfile.alpine.java11 创建基于 Alpine 的容器镜像。这个 Dockerfile 旨在利用 Alpine Linux 的简约和高效特性,强调减少依赖以实现更清晰的软件物料清单(SBOM)和更强的安全态势。
基于 Alpine 的容器镜像包含最少的依赖项,并使用 ENTRYPOINT 脚本确保应用程序以必要的权限运行。它针对快速部署和高效的资源利用进行了优化。
可以从 Docker Hub 获取基于 Alpine 的容器镜像,使用以下标签拉取:
- sonatype/nexus3:3.XX.y-alpine(运行 Java 11)
- sonatype/nexus3:3.XX.y-java11-alpine
- sonatype/nexus3:3.XX.y-java17-alpine
注意事项
-
配置 Docker 容器时应考虑我们的系统要求。
-
默认用户是
admin
,唯一生成的密码可以在卷内的admin.password
文件中找到。有关卷的信息,请参阅持久数据。 -
在新容器中启动服务可能需要一些时间(2-3 分钟)。您可以通过查看日志来确定 Nexus 何时准备就绪:
$ docker logs -f nexus
-
Nexus 的安装目录为
/opt/sonatype/nexus
。 -
持久化目录
/nexus-data
用于存储配置、日志和数据。该目录需要对 Nexus 进程可写,该进程以 UID 200 运行。 -
有一个环境变量用于向启动脚本传递 JVM 参数:
INSTALL4J_ADD_VM_PARAMS
,传递给 Install4J 启动脚本。默认值为-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=${NEXUS_DATA}/javaprefs
。
可以在运行时调整:
$ docker run -d -p 8081:8081 --name nexus -e INSTALL4J_ADD_VM_PARAMS="-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=/some-other-dir" sonatype/nexus3
特别注意,
-Djava.util.prefs.userRoot=/some-other-dir
可以设置为一个持久化路径,这样在容器重启时可以保留已安装的 Sonatype Nexus Repository 许可证。在决定分配多少堆内存和直接内存时,请务必查看内存要求。
-
另一个环境变量可用于控制 Nexus 上下文路径:
NEXUS_CONTEXT
,默认为 /
可以在运行时提供:
$ docker run -d -p 8081:8081 --name nexus -e NEXUS_CONTEXT=nexus sonatype/nexus3
持久化数据
Docker 有两种常见的处理持久存储需求的方法。更多信息请参见在容器中管理数据。
- 使用 docker 卷。由于 docker 卷是持久化的,可以专门为此创建一个卷。这是推荐的方法。
$ 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 镜像做贡献但需要帮助?有几种方式可以获取信息或引起我们的注意:
- 在 Gitter 上与我们聊天
- 查看 Stack Overflow 上的 Nexus3 标签
- 查看 Sonatype Nexus Repository 用户列表
许可免责声明
Sonatype Nexus Repository OSS 根据 Sonatype, Inc. 与 Sencha Inc. 之间达成的 FLOSS 例外协议分发 Sencha Ext JS。Sencha Ext JS 基于 GPL v3 许可,不能作为闭源软件的一部分重新分发。