安装Nexus 3用于Docker和Java

上一篇文章到了Nexus 3的基本使用,这里讲述一下全新安装Nexus 3并且完成后续配置的过程。

通过Docker运行Nexus3:

docker run -d -p 8081:8081 -p 5000:5000 -v $(pwd)/nexus-data:/nexus-data --name nexus3 sonatype/nexus3:3.9.0

以上命令会在宿主机的当前目录下自动创建nexus-data目录用于映射container中的/nexus-data数据,需要注意的是这里的$(pwd)/nexus-data必须是一个绝对路径,不然docker会将其当做volume来处理。

这里的8081端口用于访问Nexus的界面,5000端口用于Docker Registry向外暴露端口。

启动之后,打开http://localhost:8081可以看到以下界面:

安装Nexus 3用于Docker和Java_第1张图片
Nexus主界面

点解右上角的Sign in,使用默认管理员账号登录:

  • 用户名:admin
  • 密码:admin123

登陆后进入配置页面,进而进入Repository页面:


安装Nexus 3用于Docker和Java_第2张图片
Repositories界面

此时可以看到Nexus在默认情况下已经创建了多个Repository,主要是Maven和Nuget,由于我们只需要Java的Repository,故删除所有Nuget相关的Repository。

然后拷贝maven-public的URL:http://localhost:8081/repository/maven-public/,maven-public是一个group类型的Repository,既代理(proxy)了远程的Maven Central,有包含了自建(hosted)的maven-releases。至于什么是group,proxy,hosted,请参考这里。

在自己的一个Java项目中尝试使用maven-public,在Java项目的build.gradle中使用:

repositories {
    maven {
        url "http://localhost:8081/repository/maven-public/"
    }
}

在构建了Java项目之后,maven-public中便有了多个Java的component,这是因为Java项目尝试从maven-public中下载依赖,而maven-public包含了maven-central,maven-central又代理的远程的Maven Central,因此我们Java项目事实上是从Maven Central上下载的依赖,然后缓存于Nexus中,然后Nexus中也可以看到了。

使用Docker Repository

首先要创建一个DockerRepository:


安装Nexus 3用于Docker和Java_第3张图片
创建Docker Repository

需要注意但是,这里的“Repository”一词实则是docker的Registry,而不是Docker Hub中的Repository概念,Docker Hub中的Repository更像是Nexus中的Component。

这里务必需要选择"Repository Connectors"中的HTTP或者HTTPS,我们选择了HTTP,并设置端口为5000,原因请查看这里。

然后创建一个用户用于docker login,主要是需要有push权限。先创建相应的Role:

安装Nexus 3用于Docker和Java_第4张图片
创建Role

接下来创建拥有该Role的User:


安装Nexus 3用于Docker和Java_第5张图片
创建User

通过docker命令使用Docker Repository

创建好Repository和User后,我们便可以正常使用Docker Repository了,先在命令行登录Docker Repository:

docker login localhost:5000

请注意,这里需要显式地跟上localhost:5000,否则docker会默认登录Docker Hub。

然后就可以将本地已有的镜像push到Nexus的Docker Repository中了,比如本地有个alpine镜像:

alpine                  latest              3fd9065eaf02        2 months ago        4.15MB

在push之前,需要给alpine指定正确的tag,正确的格式为:hostname:port/image-name:tag,如果只有image-name:tag部分,那么docker push默认会将镜像push到Docker Hub中。

通过docker tag给alpine打tag:

docker tag alpine localhost:5000/alpine:1.0

最后push镜像:

docker push localhost:5000/alpine:1.0

最后查看镜像:


安装Nexus 3用于Docker和Java_第6张图片
浏览镜像

你可能感兴趣的:(安装Nexus 3用于Docker和Java)