https://blog.csdn.net/shida_csdn/article/details/80006645
一、 研究背景
公司恰巧需要配置本地私有 Docker 仓库,同时要提供 Cache 功能,代理 DockerHub
Nexus 3 不仅集成了 maven 、npm 等仓库功能,而且支持 Docker 了
通过实验,发现 Nexus 3 能够基本满足需求,除了镜像管理能力差点以外(不如 Harbor 直观)
二、 部署步骤
2.1 部署环境
操作系统:CentOS 7 64
Java:1.8.0_171 (Nexus 运行依赖 jdk 环境)
2.2 安装 Nexus 3
安装比较简单,下载并解压即可
下载地址:https://www.sonatype.com/download-oss-sonatype nexus-3.8.0-02-unix.tar.gz
解压到 /opt 目录下(目录你可以自己换。。。又说了废话)
2.3 配置证书(自签名)
默认 nexus 没有启用 https ,但 docker 却是启用的,为了统一,需要配置 https 证书
这里,我们借助 keytool 实现
第一步: 生成服务端需要配置的认证文件
将 IP 地址换成你机器的 IP 地址(为了方便,我这里域名和 IP 都配置的 IP)
运行该脚本,会在当前目录生成一个 keystore.jks
将 keystore.jks 放到 nexus ssl 目录,其实不放也没事,方便管理
第二步: 生成客户端需要的证书
在 keystore.jks 所在目录,执行如下命令(密码跟上边保持一致):
第三步: 配置 Nexus 使用证书,开启 https
然后,还要配置下 /opt/nexus-3.8.0-02/etc/jetty/jetty-https.xml
第四步: 启动 Nexus
启动日志可以到这里查看 :/opt/sonatype-work/nexus3/log/nexus.log
我们直接去浏览器看看吧!(admin/admin123)
确实是 https 了,但是没被信任,因为我们是自签名的
第五步:我们实验下把证书导入浏览器
把第二步生成的 keystore.cer 文件导入到浏览器
谷歌浏览器:设置-高级-管理证书
点击导入,选择我们的证书文件,依次执行完成导入即可
重启Chrome,重新访问 https://192.168.12.129:8443 (Nexus 地址),
发现不提示不安全了,成功!
2.4 配置 Docker Registry(私有仓库)
Repository - Repositories - Create repository - 选择 docker(hosted)
填一个名称(如 docker-local)
勾上 HTTPS,填一个端口(如 7709),勾上“Enable Docker V1 API",其他均默认
点击 Create repository ,创建仓库
2.5 配置 Docker Mirror (镜像代理)
Repository - Repositories - Create repository - 选择 docker(proxy)
填一个名称(如 docker-hub)
勾上 HTTPS,填一个端口(如 7719)
去掉 Force basic authentication 勾选,勾上“Enable Docker V1 API"
填写 Remote storage:我这里写的自己的 DaoCloud 地址, http://cfdd5a36.m.daocloud.io
Docker Index 选择 "Use Docker Hub",其他均默认
点击 Create repository ,创建仓库
2.6 配置 Realms(之前没配这步,耽误不少时间)
Security - Realms,把 Docker Realm 激活
2.7 客户端导入证书
之前我们仅仅尝试了在浏览器导入证书,为了让 Docker 客户端能与仓库正常通信,
需要客户端导入证书
以 Centos 7 为例,导入证书分为两步 (Ubuntu 导入证书步骤,请移步文末附录)
第一步: 将 keystore.cer 复制到 /etc/pki/ca-trust/source/anchors 目录下
第二步:更新证书信息,执行 # update-ca-trust extract
2.8我没有操作也可以
2.8 配置 Docker Daemon ,使用 Mirror
编辑 /lib/systemd/system/docker.service
在 ExecStart=/usr/bin/dockerd 后追加参数 --registry-mirror=https://192.168.12.129:7719
或者编写 /etc/docker/daemon.json
重启 Docker 服务
2.9 验证 Docker 能否正常与 Nexus Docker 仓库正常通信
登录私有仓库,用户名密码(admin/admin123)
Push 镜像到私有仓库
Pull 镜像(通过 Mirror)
2.10 最后,我们看下 仓库里是否有我们操作过的镜像吧
到这里,教程就结束了,配置成功,回家吃饭!
=====
关于 Ubuntu 16.04 导入证书的附加说明:
* Ubuntu 系统下,一般导入的证书格式都是 crt 的,因此,需要首先导出该格式的证书文件
* 将导出的 keystore.crt 导入 Ubuntu 系统
设置 Nexus 开机自动启动 :
(注意修改 jdk 和 nexus 路径为你实际使用的路径)
Nexus 3 安装 Helm 插件:移步这里 https://blog.csdn.net/shida_csdn/article/details/80314674
关于 docker 的nexus https和http相关问题
1、docker pull sonatype/nexus3:3.8.0
2、docker run -d --restart=always --privileged=true -p 8081:8081 -p 8123:8123 -p 8443:8443 -p 4443:4443 --name nexus3.8 -v /root/nexus/nexus-3.8.0-02/etc/ssl:/opt/sonatype/nexus/etc/ssl -v /some/dir/nexus3/data:/nexus-data sonatype/nexus3:3.8.0
8081:外面范文nexus的端口,http
8443:外面范文nexus的端口,https
8123:http的端口docker login ip:8123
4443:http的端口docker login ip:4443
https方式:
docker run -d --restart=always --privileged=true -p 8081:8081 -p 8123:8123 -p 8443:8443 -p 4443:4443 --name nexus3.8 -v /root/nexus/nexus-3.8.0-02/etc/ssl:/opt/sonatype/nexus/etc/ssl -v /some/dir/nexus3/data:/nexus-data sonatype/nexus3:3.8.0
3、/root/nexus/nexus-3.8.0-02/etc/ssl:
3.1、 keytool -genkeypair -keystore keystore.jks -storepass password -keypass password -alias nexus -keyalg RSA -keysize 2048 -validity 5000 -dname "CN=10.30.30.126, OU=Nexus, O=Nexus, L=Beijing, ST=Beijing, C=CN" -ext "SAN=IP:10.30.30.126" -ext "BC=ca:true"
3.1.1、-storepass和-keypass:密码,最好和jetty/jetty-https.xml
一样就方便了不用单独挂载/root/nexus/nexus-3.8.0-02/etc/jetty 目录了。
3.2、keytool -export -alias nexus -keystore keystore.jks -file keystore.cer -storepass password
keystore.cer:客户端要是用的文件;
在客户端使用
centos7:
3.2.1、cp keystore.cer /etc/pki/ca-trust/source/anchors/
3.2.2、更新:update-ca-trust
http方式:
docker run -d --restart=always --privileged=true -p 8081:8081 -p 8123:8123 --name nexus3.8 -v /some/dir/nexus3/data:/nexus-data sonatype/nexus3:3.8.0
vim /etc/docker/daemon.json
{
"insecure-registries": [
"10.30.30.126:8123"
],
"disable-legacy-registry": true
}
或
vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 10.30.30.126:8123 '