安装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
可以看到以下界面:
点解右上角的Sign in
,使用默认管理员账号登录:
- 用户名:admin
- 密码:admin123
登陆后进入配置页面,进而进入Repository页面:
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:
创建Docker Repository
需要注意但是,这里的“Repository”一词实则是docker的Registry,而不是Docker Hub中的Repository概念,Docker Hub中的Repository更像是Nexus中的Component。
这里务必需要选择"Repository Connectors"中的HTTP或者HTTPS,我们选择了HTTP,并设置端口为5000,原因请查看这里。
然后创建一个用户用于docker login
,主要是需要有push权限。先创建相应的Role:
接下来创建拥有该Role的User:
创建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
最后查看镜像:
浏览镜像