Nexus 3学习笔记

用Docker启动Nexus 3

运行以下命令:

docker run -d -p 8081:8081 --name nexus sonatype/nexus3

然后通过http://localhost:8081访问,默认有个管理员账户,用户名admin,密码admin123。

此时Nexus 3的存储数据位于Docker容器的/nexus-data目录下,可以通过以下方式讲该目录映射到宿主机:

docker run -d -p 8081:8081 --name nexus -v /some/dir/nexus-data:/nexus-data sonatype/nexus3

概念

  • Component:逻辑上的组件,诸如Java中commons-lang3和guava、Docker中的Alpine等。

  • Repository:同一种类型的Composnent组成了一个Repository,比如Jar包的Maven Central,Docker的registry等。不同的Repository采用不同的存储方式,比如Maven通过一定的目录结构存储Components,而另一些Repository则采用数据库来存储数据。Repository有3中类型:(1)proxy:用于代理远程的第三方repository,比如代理Java的Maven Central或者Docker的Docker Hub等;(2)hosted:自建的Repository,用于存在自己创建的Component,比如自己打的Docker镜像等;(3)group:组合Repository:用于将多个repository向外暴露统一的URL,简化消费方的配置,比如将代理Maven Central的proxy和公司自建的Maven包组合在一起。很明显,group类型是不能作为上传component的对象的,因为我们不能确定到底需要向哪个repository传。

  • Assets:组成Component的最小物理单位,比如guava这个组件包括一个Jar包和一个pom.xml文件,这个Jar包和pom.xml都属于Assets。对于Docker来说,每一个Docker layer都可以称为一个Asset。

搜索Component

模糊搜索需要完整的单词边界,不然需要加上*才有结果,比如要搜索spring下的所有Component,使用spring可以,但是使用sprin是不行的,因为sprin没有构成单词边界,此时需要使用sprin*

创建Docker Repsitory

创建Docker Repository(hosted),请参考这里。

特别需要注意的是,在客户端push/pull镜像时,只能使用Docker的主机名和端口,而不能包含其他路径,但是在Nexus中创建的Docker Repository却是包含了其他路径的,这样直接使用Nexus的Repository就不行了。比如创建一个Docker Repository的URL为:http://localhost:8081/repository/docker-releases/,其中包含了主机名localhost,端口8081,但同时也包含路径/repository/docker-releases/,此时如果我们尝试docker push:docker push localhost:8081/repository/docker-releases/my-component:tag是不行的。我们需要将多余的路径去除掉,为此Nexus专门为Docker Repository提供了Repository Connector的概念,在创建Docker Repository时,可以指定另外一个端口,比如5000,此时便可以通过这个方式来push镜像了:docker push localhost:5000/my-component:tag。更多详情,请参考这里。

用户权限

  • Privilege:一些粒度较小的权限,比如对某个Repository的读、上传等,支持通配符*以在一个Privilege中包含多个权限。
  • Role:多个Privilege可以组成一个Role。
  • User:一个User可以拥有多个Role,进而表明了这个User所具有的权限,其中不仅仅是从Nexus页面上操作,还可以是从客户端连接Repository等,比如通过docker push命令向Nexus上传docker镜像。

通常来说,当我们创建一个Repository时,该Repository相应的Privilege都创建好了,之后我们需要组合多个Privilege以创建Role,然后创建User并设置相应的Role。

你可能感兴趣的:(Nexus 3学习笔记)