1 从docker拉取Nexus3镜像,这里使用的是3.30.0版本
docker pull sonatype/nexus3:3.30.0
image.png
docker images
image.png
2 创建nexus数据挂载目录
mkdir /opt/nexus-data
这里会宿主机目录权限问题,简单粗暴解决就是直接给我挂载的目录777权限,哈哈。要么就是在启动容器的时候给容器root权限。
3 运行nexus容器
docker run -d --name nexus3 --restart=always -p 8081:8081 -p 8082:8082 -v /opt/nexus-data:/nexus-data sonatype/nexus3:3.30.0
image.png
出现了网络警告,网络将不可用,同时无法进入容器,因为容器没启动成功。原因是是没有开启网络转发,这里需要设置一下,如果没有这个问题,这里可以跳过 image.png
vim /etc/sysctl.conf
#配置转发
net.ipv4.ip_forward=1
#重启服务,让配置生效
service network restart
#查看是否成功,如果返回为“net.ipv4.ip_forward = 1”则表示成功
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-arptables=1
net.ipv4.ip_forward=1
image.png
接着重启docker 重启nexus就可以了。
#重启docker服务
service docker restart
#重启容器,正常启动
docker restart nexus3
#进入容器
docker exec -it nexus3 /bin/bash
#ping一下,发现网络也正常了
ping www.baidu.com
等待了一段时间发现访问nexus还是没有起起来,通过docker logs -f nexus3
看了一下日志,发现报错了,原因就是上面挂载了目录,目录的权限用户是root,nexus在容器内部中启动的时候是以nexus用户启动的,uid 是200,操作系统root用户的uid是1000,所以必然没有写入权限,启动报错。可以通过启动时添加--privileged=true
赋予root权限解决这个问题,但是给一个容器赋予一个root权限是有点不安全。网上有些博客通过chown 200 -R /opt/nexus-data
我没试成功,只能先这么搞了。
# 完整的命令
docker run -d --name nexus3 --restart=always --privileged=true -p 8081:8081 -p 8082:8082 -v /opt/nexus-data:/nexus-data sonatype/nexus3:3.30.0
PS:这里给了两个端口,8081和8082,8081是nexus的默认端口,8082预留给docker私有仓库使用。
4 创建私有docker仓库
4.1 访问界面并登录
image.png
账号是admin,密码记录在挂载目录下的/admin.password文件里面,在登陆一波。
4.2 创建仓库
点击齿轮
-> Repositories
-> Create repository
image.png
选择docker(hosted)
image.png
配置一下http端口和仓库名称,其他默认。拉到最后面
Create repository
4.3 安全设置
Security
-> Realms
-> Docker bearer Token Realm
-> Save
4.4 测试
image.png
因为我们的仓库开放的是http的端口,而docker要求使用的是https,所以这里还要添加一下信任仓库。
# 编辑docker服务端设置
vim /etc/docker/daemon.json
# 将下面内容加到配置文件中(文件是json,注意逗号等格式问题)
"insecure-registries":["http://yourip:8082"]
# 重启docker
service docker restart
# 查看设置是否生效,查看Insecure Registries:后面是否有你的nexus仓库地址
docker info
image.png
再次登录成功了。
4.5 制作镜像并向私有仓库推送镜像
# 拉取hello-world镜像作为示例
docker pull hello-world
# 制作私有镜像
docker tag hello-world yourip:8082/hello-world
/# 推送到私有服务器
docker push yourip:8082/hello-world
image.png
推送成功后到nexus页面查询我们是否推送成功。
image.png
可以看到已经看到了我们用于测试的nginx镜像了。
额外用一张图补充docker tag
命令的用法
网友评论