Nexus3 Docker 搭建和使用 2023-10-25 程序之旅 暂无评论 524 次阅读 ## Nexus3 Docker 搭建和使用 Nexus是一个用于软件包管理和制品存储的开源工具。它提供了一个集中式的仓库,用于存储和分发各种类型的软件制品,如Java包(JAR、WAR、EAR)、Docker镜像、NPM包、Maven依赖等。 Nexus的主要功能包括: 1. 仓库管理:Nexus提供了一个易于使用的用户界面,用于管理仓库,包括创建、删除、配置和监控仓库。 2. 制品存储和检索:Nexus允许将各种类型的软件制品上传到仓库,并提供了强大的搜索和检索功能,以便快速找到所需的制品。 3. 缓存和代理:Nexus可以缓存远程仓库中的制品,以减少下载时间和网络流量。它还可以作为代理服务器,将对远程仓库的请求转发到本地缓存或其他远程仓库。 4. 安全和权限控制:Nexus支持用户认证和授权,可以配置细粒度的访问控制策略,以确保只有授权用户能够上传和下载制品。 5. 构建工具集成:Nexus可以与常见的构建工具(如Maven、Gradle、Ant)集成,使构建过程更加高效和可靠。 ### docker 启动容器 拉取镜像 ```she docker pull sonatype/nexus3:3.61.0 ``` 多种方式,我这里使用的是 portainer 平台下的 docker-compose 。portainer 下只支持 version 2.0 版本 ```yaml version: '2.0' services: nexus3: image: sonatype/nexus3:3.61.0 container_name: nexus3 restart: always privileged: true ports: - 18081:8081 volumes: - /usr/local/nexus:/nexus-data environment: - TZ=Asia/Shanghai ``` volumes 持久化数据到宿主机 /usr/local/nexus 也可以使用命令行的方式 ```shell docker run -d --name nexus3 --restart always --privileged -p 18081:8081 -v /usr/local/nexus:/nexus-data -e TZ=Asia/Shanghai sonatype/nexus3:3.61.0 ``` 稍等 1分钟,输入 http://ip:18081 进入首页,右上角 sign in 登录管理员,进行配置 ![image-20231023230546884](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/images/image-20231023230546884.png) 密码在容器中,查看 ```shell cat /nexus-data/admin.password ``` ### 配置 Nexus ![image-20231024072810148](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/images/image-20231024072810148.png) Nexus 默认有7个配置,分别是 maven-central、maven-public、maven-releases、maven-snapshots、nuget-group、nuget-hosted、nuget.org-proxy。这里仓库主要介绍的是 maven2 格式的配置。 ``` maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar maven-releases:私库发行版jar,初次安装请将Deployment policy设置为Allow redeploy maven-snapshots:私库快照(调试版本)jar maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml或项目pom.xml中使用 ``` 配置仓库类型,Blog Stores 用的是默认创建 default ``` hosted:本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。 proxy:代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。 group:仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。 ``` ### proxy repository 代理仓库配置说明 在 Nexus 中配置代理仓库(Proxy Repositories)的作用是允许 Nexus 代理远程仓库,以便在需要的时候从远程仓库中获取依赖项。这样可以加快构建和部署过程,并且可以缓存远程仓库的内容,以提高访问速度和可靠性。 以下是在 Nexus 中配置代理仓库时常用的配置项及其作用: 1. Name(名称):给代理仓库指定一个名称,以便在 Nexus 中进行标识和管理。 2. Online (在线):用于指定代理仓库是否接受传入请求。如果"Online"选项未选中或禁用,意味着代理仓库不接受传入请求。 3. Version Policy(仓库策略):指定 Nexus 在访问远程仓库时的行为。常见的策略包括: - Release(发布):仅从远程仓库下载已发布的稳定版本。 - Snapshot(快照):从远程仓库下载最新的快照版本。 - Mixed(混合):既可以下载已发布的稳定版本,也可以下载最新的快照版本。 4. Layout policy(布局策略):"strict"(严格)和 "permissive"(宽松)是两种不同的选项,用于定义验证路径规范的严格程度。 - Strict(严格):当选择 "strict" 选项时,Nexus 会强制执行严格的路径规范验证。这意味着所有的路径都必须符合 Maven 构件或元数据的规范,否则 Nexus 会拒绝或警告相关操作。 - Permissive(宽松):当选择 "permissive" 选项时,Nexus 会对路径规范进行宽松的验证。这意味着 Nexus 会允许一些不符合规范的路径存在,但仍然会警告相关操作。 5. Content Disposition(内容处理):"inline" 和 "attachment" 是两种不同的选项,用于指示如何处理服务器返回的内容。 - Inline(内嵌):当使用 "inline" 选项时,服务器返回的内容将被视为可以在浏览器中直接显示的内容。例如,如果服务器返回的是图片或 PDF 文件,浏览器会尝试直接显示该内容,而不是下载或保存到本地。 - Attachment(附件):当使用 "attachment" 选项时,服务器返回的内容将被视为附件,需要下载或保存到本地。 6. Remote Storage(远程存储):指定要代理的远程仓库的 URL。Nexus 将使用该 URL 来访问远程仓库并下载所需的依赖项。 7. Blob Store(Blob 存储):指定 Nexus 在代理仓库中存储下载的文件的位置。 8. HTTP Authentication(远程认证):如果远程仓库需要认证,可以在这里提供用户名和密码。 这些配置项可以根据具体需求进行调整,以满足代理仓库的功能和性能要求。配置好代理仓库后,Nexus 将会根据配置从远程仓库中获取依赖项,并将其缓存在本地,以便后续使用。 ### host repository 代理仓库配置说明 其他的 host 配置与 proxy 差不多,多了 Deployment policy 和 Proprietary Components。 ![image-20231024231609058](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/images/image-20231024231609058.png) 其中 Deployment 中的部署策略 - Allow redeploy(允许重新部署):允许在主机上重新部署已存在的构件。这意味着如果已经存在同样的构件,新的部署请求将覆盖旧的构件。 - Disable redeploy(禁止重新部署):禁止在主机上重新部署已存在的构件。这意味着如果已经存在同样的构件,新的部署请求将被拒绝。 - Read-only(只读模式):应用程序或系统处于一种状态,其中任何用户或进程都无法对其进行修改或写入操作。 - Deploy by Replication Only ### group repository 代理仓库配置说明 其他的 host 配置与 proxy 差不多,多了 Member repositories 主要是过滤不用的仓库与对拉取仓库的顺序进行排序 ![image-20231024231546496](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/images/image-20231024231546496.png) ### 发布项目 在 maven 的配置文件 settings.xml 或者是 pom.xml 中配置仓库内容,如果有多个仓库选择则使用 repositories,否则直接使用 mirrors,且拉取 jar 的顺序也是按照从上到下。 ```xml maven-nexus http://localhost:8081/repository/maven-public/ true true ``` 配置用户名密码才能访问 ```xml maven-nexus admin 123456 ``` nexus 的部署有两种方式1、maven 上传;2、手动上传。上传的版本分两种 release 和 snapshot,这两个版本是由 pom 文件中的 version 标签决定,如果 version 标签中值带上 -SNAPSHOT, 表示不稳定的,会反复发布、测试、修改的版本,会发布到 Version policy 中的 `Snapshot` 中。pom.xml 配置内容如下 ```xml release-nexus http://localhost:8081/repository/maven-releases/ nexus-release snapshot-nexus http://localhost:8081/repository/maven-snapshots/ nexus-snapshot ``` settings.xml 配置如下 ```xml release-nexus admin 123456 snapshot-nexus admin 123456 ``` id 与 distributionManagement一致。 执行 maven 命令 mvn deploy,会发布到 nexus 仓库上。 --- ### 2024年6月18日 Nexus3 也能进行 Docker 镜像管理,同样的 Docker 仓库也分为三个类型 hosted、proxy 和 group。这次的目的是用 Nexus3 代理 Docker Hub 仓库。国内拉取镜像中是很慢,而且经常出现掉线问题,网上也提供了很多解决方案,例如修改 /etc/docker/daemon.json 配置国内镜像站,我之前使用的就是阿里云的个人镜像站,但是有些时候会出现镜像站的资源更新不及时,导致无法拉取的情况。如果使用其他科技园或者各大院校的镜像站,时间长了也会出现失效的情况。为了解决这些乱七八糟的问题,我索性直接使用 Nexus3 进行代理访问,走梯子一劳永逸,有些时候也自己打包镜像进行管理。 #### 配置 Proxy 和 Group 聚合 管理员登录(Sign In),然后点击 Repository-> Create Repository,选择 docker(proxy)。我们是内部网络服务使用,所以安全问题可以先不考虑,勾选 `Allow anonymous docker pull`、`Enable Docker V1 APl`,Proxy Remote storage 填写 https://registry-1.docker.io,勾选 Docker Index 中的 Use Docker Hub,最后 Save 保存。 然后是创建 Group 聚合,我这里先不创建 hosted ,还没有自己构建镜像的需求。点击 Repository-> Create Repository,选择 docker(group)。http 填 18082,另外启动一个端口 18082,docker-compse.json 记得添加端口暴露。同样勾选 `Allow anonymous docker pull`、`Enable Docker V1 APl`,最后把刚创建的 docker-proxy 在 Member repositories 中添加到 Members 中,save 保存。 最后,在 Security->Realms 中的添加 Docker Bearer Token Realm,save 保存。 回到需要拉取镜像的服务器中,执行命令,尝试登录 ```shell docker login -u admin -p xxxx ${ip}:18082 ``` 或者是在 Portainer 中的 Registries -> add registry,添加镜像。 打赏: 微信, 支付宝 标签: none 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。