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.nupkg
Nuget 文件,代表 Package 已经准备完成。
上传 Package
添加
Nuget Realms
,因为 Nexus 认证 Nuget 是通过Realms
来认证,因此要添加 Nuget Realms。在
Upload
选中nuget-hosted
点击进入,为什么要选中 nuget-hosted 上面已经说明。把上面准备好的
NexusTest.1.0.0.nupkg
Nuget 文件上传到 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 ...
随机推荐
- mysql 添加字段、删除字段、调整字段顺序
用过MySQL的朋友,可能都在使用phpMyAdmin,我从2003年开始使用,感觉那东西适合远程mysql管理,并 不适合单机.单数据库的管理操作,特别是开发使用. 给家推荐一个软件管理mysql数 ...
- Djano + Nginx + docker配置与管理
在配置这个服务之前,应该对docker的基本安装与使用应该很熟悉了.下面开始直接不如正题 1.让我们创建一个名为myproject的空目录,并在src名称内添加另一个文件夹.src应该包含django ...
- Python基本数据类型--列表、元组、字典、集合
一.Python基本数据类型--列表(List) 1.定义:[ ]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素. 2.列表的创建: # 方式一 list1 = ['name','ag ...
- Linux 安装(重装)mysql
1 新建存放mysql相关文件的文件夹 mkdir -p /export/servers/mysql //存放mysql相关的几个rpm文件 2 查看原有mysql 并卸载 rpm -qa | gre ...
- 2014蓝桥杯B组初赛试题《啤酒和饮料》
题目描述: 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒. 注意:答案是一个整数.请通过 ...
- 打印vector内容
<span style="font-size:14px;">#include <iostream> #include <vector> #inc ...
- java方法学习记录
---恢复内容开始--- 方法重载:两个方法有相同的名字,但参数不同,就是方法重载,且不能仅仅依据修饰符或者返回类型的不同来重载方法. 命令行参数的使用 有时候你希望运行一个程序时候再传递给它消息.这 ...
- pyinstaller生成exe可执行程序
1安装 略 2执行 pyinstaller –F test.py 报错: Pyinstaller: cx_Oracle.InterfaceError: Unable to acquire Oracle ...
- Oracle——分组函数
AVG(平均值)和 SUM (合计)函数 可以对数值型数据使用AVG 和 SUM 函数. AVG组函数忽略空值 --在组函数中使用NVL函数 --求平均值 )) MIN(最小值)和 MAX(最大值)函 ...
- 单个控件textbox只支持在英文状态下输入所需的字符串
也就是它的属性: Imemode的属性 设置成off就可以了 ,就不会受到所输入的中文汉字了.