Nexus 3 Docker Proxy + Nexus 3 配置 Docker 私有仓库 + Mirror 代理 + 配置 https 连接
一、 研究背景 公司恰巧需要配置本地私有 Docker 仓库,同时要提供 Cache 功能,代理 DockerHub Nexus 3 不仅集成了 maven 、npm 等仓库功能,而且支持 Docker 了 通过实验,发现 Nexus 3 能够基本满足需求,除了镜像管理能力差点以外(不如 Harbor 直观)二、 部署步骤2.1 部署环境
一、 研究背景
公司恰巧需要配置本地私有 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.10.0-04-unix.tar.gz
解压到 /opt 目录下(目录你可以自己换。。。又说了废话)
# tar zxvf nexus-3.10.0-04-unix.tar.gz -C /opt
2.3 配置证书(自签名)
默认 nexus 没有启用 https ,但 docker 却是启用的,为了统一,需要配置 https 证书
这里,我们借助 keytool 实现
第一步: 生成服务端需要配置的认证文件
将 IP 地址换成你机器的 IP 地址(为了方便,我这里域名和 IP 都配置的 IP)
运行该脚本,会在当前目录生成一个 keystore.jks
#!/bin/bash
NEXUS_DOMAIN=192.168.12.129
NEXUS_IP_ADDRESS=192.168.12.129
PASSWD=Nexus123
keytool -genkeypair -keystore keystore.jks -storepass ${PASSWD} -keypass ${PASSWD} -alias nexus -keyalg RSA -keysize 2048 -validity 5000 -dname "CN=${NEXUS_DOMAIN}, OU=Nexus, O=Nexus, L=Beijing, ST=Beijing, C=CN" -ext "SAN=IP:${NEXUS_IP_ADDRESS}" -ext "BC=ca:true"
将 keystore.jks 放到 nexus ssl 目录,其实不放也没事,方便管理
# cp keystore.jks /opt/nexus-3.10.0-04/etc/ssl/
第二步: 生成客户端需要的证书
在 keystore.jks 所在目录,执行如下命令(密码跟上边保持一致):
# keytool -export -alias nexus -keystore keystore.jks -file keystore.cer -storepass Nexus123
会在当前文件夹下生成 keystore.cer 文件(这个以后要导入客户端机器)
第三步: 配置 Nexus 使用证书,开启 https
# cp /opt/nexus-3.10.0-04/etc/nexus-default.properties /opt/nexus-3.10.0-04/etc/nexus-default.properties.bak
# vim /opt/nexus-3.10.0-04/etc/nexus-default.properties
## DO NOT EDIT - CUSTOMIZATIONS BELONG IN $data-dir/etc/nexus.properties
##
# Jetty section
application-port-ssl=8443
application-port=8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-http-redirect-to-https.xml
nexus-context-path=/
# Nexus section
nexus-edition=nexus-pro-edition
nexus-features=\
nexus-pro-feature
然后,还要配置下 /opt/nexus-3.10.0-04/etc/jetty/jetty-https.xml
# vim /opt/nexus-3.10.0-04/etc/jetty/jetty-https.xml
<Set name="KeyStorePath">/opt/nexus-3.10.0-04/etc/ssl/keystore.jks</Set>
<Set name="KeyStorePassword">Nexus123</Set>
<Set name="KeyManagerPassword">Nexus123</Set>
<Set name="TrustStorePath">/opt/nexus-3.10.0-04/etc/ssl/keystore.jks</Set>
<Set name="TrustStorePassword">Nexus123</Set>
第四步: 启动 Nexus
# /opt/nexus-3.10.0-04/bin/nexus start
启动日志可以到这里查看 :/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 配置 Docker Daemon ,使用 Mirror
编辑 /lib/systemd/system/docker.service
在 ExecStart=/usr/bin/dockerd 后追加参数 --registry-mirror=https://192.168.12.129:7719
或者编写 /etc/docker/daemon.json
{"registry-mirrors": ["https://192.168.12.129:7719"]}
重启 Docker 服务
# systemctl daemon-reload
# systemctl restart docker
2.9 验证 Docker 能否正常与 Nexus Docker 仓库正常通信
登录私有仓库,用户名密码(admin/admin123)
# docker login 192.168.12.129:7709
Push 镜像到私有仓库
# docker tag ubuntu:12.04 192.168.12.129:7709/library/ubuntu:12.04
# docker push 192.168.12.129:7709/library/ubuntu:12.04
Pull 镜像(通过 Mirror)
# docker pull ubuntu:13.04
2.10 最后,我们看下 仓库里是否有我们操作过的镜像吧
到这里,教程就结束了,配置成功,回家吃饭!
=====
关于 Ubuntu 16.04 导入证书的附加说明:
* Ubuntu 系统下,一般导入的证书格式都是 crt 的,因此,需要首先导出该格式的证书文件
# keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype PKCS12
# openssl pkcs12 -in keystore.p12 -nokeys -out keystore.crt
* 将导出的 keystore.crt 导入 Ubuntu 系统
# mkdir /usr/share/ca-certificates/extra
# cp keystore.crt /usr/share/ca-certificates/extra
# dpkg-reconfigure ca-certificates
确定,即可(如果还提示不信任,重启一下客户端机器一般可以解决)
设置 Nexus 开机自动启动 :
(注意修改 jdk 和 nexus 路径为你实际使用的路径)
# vim /lib/systemd/system/nexus.service
[Unit]
Description=nexus
After=network.target
[Service]
Type=forking
LimitNOFILE=65536
Environment="JAVA_HOME=/opt/jdk1.8.0_171"
ExecStart=/opt/nexus-3.10.0-04/bin/nexus start
ExecReload=/opt/nexus-3.10.0-04/bin/nexus restart
ExecStop=/opt/nexus-3.10.0-04/bin/nexus stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# systemctl enable nexus.service
# systemctl start nexus.service
Nexus 3 安装 Helm 插件:移步这里 https://blog.csdn.net/shida_csdn/article/details/80314674
更多推荐
所有评论(0)