Docker - 使用 Nexus3 搭设私有 NuGet 仓库
前言
NuGet
Nuget 是免费、开源的包管理工具,专注于在 .Net、.Net Core 平台应用开发过程中第三方组件库的管理,相对于传统单纯的 dll 引用要方便、科学得多。
其中 nuget.org 是最著名的 NuGet 公开库,但是企业内部开发的(业务)公共组件因为私密性或商业机密不能上传到公共库中,所以企业内部需要搭建一个私有的 NuGet 仓库【私服】来支持。虽然微软有提供的 NugetServer,但 NugetServer 用起来并不那么方便。
而且企业有可能不止使用 C# 一种语言,可能其他的语言组件也需要管理,比如:Java 、Docker 镜像 等,NugetServer 就捉襟见肘,本文我给大家带来一款全能型的私服软件 Nexus。
Nexus 私有仓库
Nexus 是一个强大的工具仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
Nexus 支持管理 Bower 、Docker、Maven、npm、NuGet、Yum、PyPI 等工具包。最新版本的 Nexus3.x 全面支持 Docker 的私有镜像存储。
Nexus 官网:www.sonatype.com
说明
本文主要介绍怎么在 Linux (CentOS) 系统上使用 Docker 来部署 Nexus ,本文使用的是 Nexus v3.15.3 版本进行操作的。
为什么使用 Docker 来部署 Nexus,是因为作者公司现在的基础设施为了方便维护全部使用 Docker 来部署。如果你不想使用 Dokcer 或者不想在 Linux 部署请前往官方网站下载对应安装包。
注意:本文是在 CentOS 系统下进行操作的。
安装 Nexus
下面介绍的安装步骤是作者在 Linux 系统已经安装了 Docker 为前提条件。
拉取 Nexus 镜像
从 Docker Hub 拉取 Nexus 的镜像到本地,我这里拉取是最新版本的。你也可以拉取相对应版本的镜像。
$ docker pull sonatype/nexus3:latest
latest: Pulling from sonatype/nexus3
a02a4930cb5d: Pull complete
2c6aa0f814dc: Pull complete
ce7b7501fc94: Pull complete
Digest: sha256:00ede0830e375c8a9758ea5d98dd020425850bbeccc822da68e7bad7ae92dbfa
Status: Downloaded newer image for sonatype/nexus3:latest
运行 Nexus
在运行之前先创建一个目录用来存放 Nexus 持久化数据。
$ mkdir -p /data/nexus
使用 Docker 命令运行 Nexus 。
$ docker run -d -p 8081:8081 --name nexus -v /data/nexus:/nexus-data sonatype/nexus3:latest
c90c62f4bd5d3f09d3f0d562e5fe41401954898729ed9f7407ed71296f372883
Docker 返回容器的的 Hash ID,代表容器已经启动,通过 http://serverip:8081 就能访问Nexus了。

但是请求的时候拒绝我的请求,这个地方困扰了我很久。我第一步先排除是否是防火墙的问题。
$ firewall-cmd --state
not running
使用命令查看防火墙没有运行,第二步查看容器当前状态。
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
c90c62f4bd5d sonatype/nexus3:latest "sh -c ${SONATYPE_DI…" 27 minutes ago Exited
发现这个容器的状态变成 Exited 已经退出,找到问题所在可能是什么原因导致 nexus 没有启动起来。现在使用容器日志查一下挂掉的原因。
$ docker container logs c90c
mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied
OpenJDK 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory
Warning: Cannot open log file: ../sonatype-work/nexus3/log/jvm.log
Warning: Forcing option -XX:LogFile=/tmp/jvm.log
Unable to update instance pid: Unable to create directory /nexus-data/instances
/nexus-data/log/karaf.log (No such file or directory)
Unable to update instance pid: Unable to create directory /nexus-data/instances
从日志发现是因为 Nexus 在创建文件夹的时候没有权限。这个应该是上面在创建文件夹的时候没有分配权限导致的。下面我们给这个 /data/nexus 文件夹分配权限。
$ chown -R 200 /data/nexus
$ docker container start c90c62f4bd5d
c90c62f4bd5d
重新启动容器后,再次访问一下 Nexus,下图显示可以打开 Nexus 。
我们现在发现 Nexus 可以支持很多仓库格式。我们现在已经安装完成了,下面我们来讲怎么简单使用 Nexus。

Nexus NuGet 仓库简单使用
下面将只会介绍一下怎么使用 NuGet ,至于使用 Nexus 其他仓库请前往官方查看详情文档。
Nexus 默认帐号
Nexus 的默认管理员账号 admin,密码 admin123 。可以在 Nexus 管理界面右上角 Signin 按钮可以登录Nexus。登录完成之后可以点击下面图片齿轮图标,进行管理 Nexus 。

Repositories
点击右菜单的 Repositories 按钮可以看到 Nexus 内置的默认仓库:

Repositories 说明
Nexus 默认已经创建好了 Nuget 以及其他的仓库,并且是创建了3个不同类型的仓库:nuget-group、nuget-hosted、nuget.org-proxy。
nuget.org-proxy:类型是 proxy,表示代理仓库。我们向它请求包(package)的时候,如果本地有,它就从本地提供,如果本地没有,它会从 nuget.org 下载到本地,然后给我提供这个包。
nuget-hosted:类型是 hosted,表示托管仓库。我们一般把自己开发的包上传到该仓库中。
nuget-group:类型是 group,表示仓库组,它结合了 nuget.org-proxy 和 nuget-hosted ,能对外提供上述两者中的包。
小结:
nuget-hosted 负责包上传,nuget.org-proxy 负责代理从 nuget.org 下载包到 Nexus 缓存中,nuget-group 负责提供包。一般使用 nuget-group 提供的 URL 就可以了,它可以把私服和公共库进行合并。
上传组件包(Package)
准备 Package
先使用
Visual Studio创建一个类库项目命名为NexusTest。
在
解决方案资源管理器选中 NexusTest 项目右击点击属性。进入项目设置页选择打包选项卡。勾选在版本中胜出NuGet包。
在
解决方案资源管理器选中 NexusTest 项目右击点击生成。生成成功之后在本项目的bin\Debug目录下找到NexusTest.1.0.0.nupkgNuget 文件,代表 Package 已经准备完成。
上传 Package
添加
Nuget Realms,因为 Nexus 认证 Nuget 是通过Realms来认证,因此要添加 Nuget Realms。
在
Upload选中nuget-hosted点击进入,为什么要选中 nuget-hosted 上面已经说明。
把上面准备好的
NexusTest.1.0.0.nupkgNuget 文件上传到 Nexus。
第三步上传成功,在
Browse选中nuget-hosted点击进入。可以查看到已经上传成功。
使用 Package
获取 Nuget 程序包源地址,在 Nexus 的 Browse 找到
nuget-group获取到地址。
在
Visual Studio的Nuget 管理器,点击齿轮进行设置 Nexus 地址。
添加 Nexus 私有 Nuget 仓库地址。

通过
Nuget 管理器查询一下刚刚我们上传的NexusTest包。
总结
Nexus 基本可以满足企业的私服需求,而且还有一个可视化工具进行管理,降低企业管理成本。
引用:
Nexus 镜像详细说明:https://hub.docker.com/r/sonatype/nexus3/
使用 Nexus 搭建私有 Nuget 仓库:http://www.cnblogs.com/Erik_Xu/p/9211471.html
Linux的权限:https://www.cnblogs.com/lhm166/articles/6605059.html
关闭防火墙:https://blog.csdn.net/ytangdigl/article/details/79796961
>原文:https://www.zybuluo.com/aqa510415008/note/1438493
Docker - 使用 Nexus3 搭设私有 NuGet 仓库的更多相关文章
- 使用Nexus搭建私有Nuget仓库
前言 Nuget是ASP .NET Gallery的一员,是免费.开源的包管理工具,专注于在.Net / .Net Core应用开发过程中第三方组件库的管理,相对于传统单纯的dll引用要方便.科学得多 ...
- 搭建私有Nuget仓库
使用Nexus搭建私有Nuget仓库 https://www.cnblogs.com/Erik_Xu/p/9211471.html 前言 Nuget是ASP .NET Gallery的一员,是免费.开 ...
- 详解docker实战之搭建私有镜像仓库 - kurbernetes
1.实战目的 搭建企业私有的镜像仓库,满足从开发环境推送和拉取镜像.当我们使用k8s来编排和调度容器时,操作的基本单位是镜像,所以需要从仓库去拉取镜像到当前的工作节点.本来使用公共的docker hu ...
- [转]Ubuntu18.04下使用Docker Registry快速搭建私有镜像仓库
本文转自:https://blog.csdn.net/BigData_Mining/article/details/88233015 1.背景 在 Docker 中,当我们执行 docker pull ...
- 使用docker Registry快速搭建私有镜像仓库
当我们执行docker pull xxx的时候,docker默认是从registry.docker.com这个地址上去查找我们所需要的镜像文件,然后执行下载操作.这类的镜像仓库就是docker默认的公 ...
- Azure Devops(十四) 使用Azure的私有Nuget仓库
哈喽大家好,最近因为工作的原因没有时间写文章,断更了俩月,今天我们开始继续研究Azure上的功能. 今天我们开始研究一下Azure的制品仓库,在之前的流水线的相关文章中,我们都使用到了制品仓库用来保存 ...
- 关于基于Nexus3和Docker搭建私有Nuget服务的探索
背景简介 NuGet是Microsoft开发平台的程序集包管理器,它由客户端工具和服务端站点组成,客户端工具提供给用户管理和安装/卸载软件程序包,以及打包和发布程序包到NuGet服务端站点等功能,服务 ...
- 使用Nexus3构建Docker私有镜像仓库
一.安装Nexus3 Nexus3是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven.npm.Docker.YUM.Helm等格式数据的存储和发布:并 ...
- Sonatype Nexus3 搭建私有仓库
Nexus是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven.npm.Docker.YUM.Helm等格式数据的存储和发布:并且能够与Jekins.S ...
随机推荐
- CSS a 标签样式
CSS a 标签样式 a:LINK { color: red; } a:VISITED { color: yellow; } a:HOVER { color: green; } a:ACTIVE { ...
- Activex感知网页刷新关闭事件
原因 大多数ActiveX控件框架,例如MFC和ATL,在本地激活ActiveX控件时创建控件.基于性能上的考虑,直到控件第一次可见的时候,IE才本地激活ActiveX控件.这样包含ActiveX控件 ...
- POJ1161(并查集)
1.题目链接地址 http://poj.org/problem?id=1161 2.源代码 #include <iostream> using namespace std; ]; ]; i ...
- A Look at the Razor View Engine in ASP.NET MVC
The biggest architectural difference that exists between ASP.NET MVC and ASP.NET Web Forms is the ne ...
- Ant之build.xml详解---可用
Ant的概念 :在Eclipse中使用Ant Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率. Ant和make命令很像. ...
- 【bzoj1479】[NOI2006]最大获利
1497: [NOI2006]最大获利 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 4335 Solved: 2123[Submit][Status] ...
- SSL认证
SSL认证 单向认证 1.发一串消息个对方 2.对方用私钥加密后返回 3.本方用对方的公钥解密,验证消息是否正确, 如果消息相同,则本方认可对方 双向认证 本方认证对方 对方认证本方
- PHP中static与self
一直搞不清楚,今天百度自己也测试了一下. <?php class A { public static function closure(){ echo __CLASS__."<b ...
- hdu 4768 Flyer (异或操作的应用)
2013年长春网络赛1010题 继巴斯博弈(30分钟)签到后,有一道必过题(一眼即有思路). 思路老早就有(40分钟):倒是直到3小时后才被A掉.期间各种换代码姿态! 共享思路: unlucky st ...
- SQLServer跨库查询--分布式查询
出处:http://www.cnblogs.com/doosmile/archive/2012/03/16/2400646.html --用openrowset连接远程SQL或插入数据 --如果只是临 ...