Nexus 3 Docker Proxy + Nexus 3 配置 Docker 私有仓库 + Mirror 代理 + 配置 https 连接

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 目录下(目录你可以自己换。。。又说了废话)

[html] view plain copy
  1. # 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

[html] view plain copy
  1. #!/bin/bash  
  2. NEXUS_DOMAIN=192.168.12.129  
  3. NEXUS_IP_ADDRESS=192.168.12.129  
  4. PASSWD=Nexus123  
  5. keytool -genkeypair -keystore keystore.jks -storepass ${PASSWD}  -keypass ${PASSWD} -alias nexus -keyalg RSA -keysize 2048 -validity 5000 -dname "CN=${NEXUS_DOMAIN}, OU=NexusO=NexusL=BeijingST=BeijingC=CN" -ext "SAN=IP:${NEXUS_IP_ADDRESS}" -ext "BC=ca:true"  

                     将 keystore.jks 放到 nexus ssl 目录,其实不放也没事,方便管理

[html] view plain copy
  1. # cp keystore.jks /opt/nexus-3.8.0-02/etc/ssl/  

       第二步: 生成客户端需要的证书

                     在 keystore.jks 所在目录,执行如下命令(密码跟上边保持一致):

[html] view plain copy
  1. # keytool -export -alias nexus -keystore keystore.jks -file keystore.cer -storepass Nexus123  
                     会在当前文件夹下生成 keystore.cer 文件(这个以后要导入客户端机器)

       第三步: 配置 Nexus 使用证书,开启 https

[html] view plain copy
  1. # cp /opt/nexus-3.8.0-02/etc/nexus-default.properties /opt/nexus-3.8.0-02/etc/nexus-default.properties.bak    
  2. # vim /opt/nexus-3.8.0-02/etc/nexus-default.properties  
[html] view plain copy
  1. ## DO NOT EDIT - CUSTOMIZATIONS BELONG IN $data-dir/etc/nexus.properties  
  2. ##  
  3. # Jetty section  
  4. application-port-ssl=8443  
  5. application-port=8081  
  6. application-host=0.0.0.0  
  7. 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  
  8. nexus-context-path=/  
  9.   
  10. # Nexus section  
  11. nexus-edition=nexus-pro-edition  
  12. nexus-features=\  
  13.  nexus-pro-feature  

                     然后,还要配置下 /opt/nexus-3.8.0-02/etc/jetty/jetty-https.xml 

[html] view plain copy
  1. # vim /opt/nexus-3.8.0-02/etc/jetty/jetty-https.xml  
[html] view plain copy
  1.     <Set name="KeyStorePath"><Property name="ssl.etc"/>/keystore.jks</Set>
        <Set name="KeyStorePassword">123456</Set>
        <Set name="KeyManagerPassword">123456</Set>
        <Set name="TrustStorePath"><Property name="ssl.etc"/>/keystore.jks</Set>
        <Set name="TrustStorePassword">123456</Set>
        <Set name="EndpointIdentificationAlgorithm"></Set>
        <Set name="NeedClientAuth"><Property name="jetty.ssl.needClientAuth" default="false"/></Set>
        <Set name="WantClientAuth"><Property name="jetty.ssl.wantClientAuth" default="false"/></Set>
     
       

       第四步: 启动 Nexus

[html] view plain copy
  1. # /opt/nexus-3.8.0-02/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我没有操作也可以

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

[plain] view plain copy
  1. {"registry-mirrors": ["https://192.168.12.129:7719"]}  

        重启 Docker 服务

[html] view plain copy
  1. # systemctl daemon-reload  
  2. # systemctl restart docker  

2.9    验证 Docker 能否正常与 Nexus Docker 仓库正常通信

        登录私有仓库,用户名密码(admin/admin123)

[html] view plain copy
  1. # docker login 192.168.12.129:7709  
      

        Push 镜像到私有仓库

[html] view plain copy
  1. # docker tag ubuntu:12.04  192.168.12.129:7709/library/ubuntu:12.04  
  2. # docker push 192.168.12.129:7709/library/ubuntu:12.04  
        

        Pull 镜像(通过 Mirror)

[html] view plain copy
  1. # docker pull ubuntu:13.04  
      

2.10   最后,我们看下 仓库里是否有我们操作过的镜像吧

       
      

    

    到这里,教程就结束了,配置成功,回家吃饭!

=====

关于 Ubuntu 16.04 导入证书的附加说明

    * Ubuntu 系统下,一般导入的证书格式都是 crt 的,因此,需要首先导出该格式的证书文件

[plain] view plain copy
  1. # keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype PKCS12  
  2. # openssl pkcs12 -in keystore.p12 -nokeys -out keystore.crt  

    * 将导出的 keystore.crt 导入 Ubuntu 系统

[plain] view plain copy
  1. # mkdir /usr/share/ca-certificates/extra  
  2. # cp keystore.crt /usr/share/ca-certificates/extra  
  3. # dpkg-reconfigure ca-certificates  

     

     

      确定,即可(如果还提示不信任,重启一下客户端机器一般可以解决)
======

设置 Nexus 开机自动启动 :

     (注意修改 jdk 和 nexus 路径为你实际使用的路径)

[plain] view plain copy
  1. # vim /lib/systemd/system/nexus.service  
[plain] view plain copy
  1. [Unit]  
  2. Description=nexus     
  3. After=network.target           
  4.   
  5. [Service]      
  6. Type=forking    
  7. LimitNOFILE=65536  
  8. Environment="JAVA_HOME=/opt/jdk1.8.0_171"   
  9. ExecStart=/opt/nexus-3.10.0-04/bin/nexus start   
  10. ExecReload=/opt/nexus-3.10.0-04/bin/nexus restart  
  11. ExecStop=/opt/nexus-3.10.0-04/bin/nexus stop  
  12. PrivateTmp=true      
  13.   
  14. [Install]      
  15. WantedBy=multi-user.target   
[plain] view plain copy
  1. # systemctl enable nexus.service  
  2. # systemctl start nexus.service  

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 '


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭