美文网首页DevOps/SREjava
Docker 安装 Nexus3,并配置 Nginx 反向代理

Docker 安装 Nexus3,并配置 Nginx 反向代理

作者: 6ea566508d0d | 来源:发表于2019-10-15 11:49 被阅读0次

    常用数据仓库简介

    目前,市面上支持 Docker 镜像存储的主流数据仓库主要有以下 4 种:

    • Docker 官方原生仓库:Docker Registry
    • SUSE 团队推出的出的仓库:Portus
    • Sonatype 团队推出的老牌仓库 :Nexus3
    • VMWare 中国团队推出的企业级仓库:Harbor

    这里,我们将选用 Nexus3 作为数据仓库,因为 Nexus3 支持非常多的仓库类型,例如:mavendockeryumaptnpmrubygemspypi

    在 Nexus3 支持 3 种 Docker 仓库:

    • hosted:本地仓库,同 Docker 官方仓库一样
    • proxy:代理仓库,提供代理其他仓库的功能
    • group:聚合仓库,将多个仓库组合成一个仓库

    安装 Nexus3,配置 Docker 仓库

    这里,我们将采用 Docker 的形式安装 Nexu3,这样可以减少很多不必要的麻烦,并且也方便以后的迁移工作
    步骤大致如下:

    1. 创建并赋权相应的数据挂载目录
    2. 安装 Nexus3,并配置 Docker 仓库
    1. 创建并赋权相应的数据挂载目录

      mkdir -p /opt/nexus/nexus-data && chmod 777 /opt/nexus/nexus-data
      

      注:虽然官方完档中,挂载文件夹赋予的权限是 200,但经过测试,权限只给 200 是会出现问题的,所以,我们直接赋予 777 的权限,从而避免一些不必要的麻烦

    2. 安装 Nexus3,并配置 Docker 仓库

    • 安装 Nexus3
      docker run -d \
      -p 9999:8081 \
      -p 10000:10000 \
      -p 10010:10010 \
      -p 10086:10086 \
      -v /opt/nexus/nexus-data:/nexus-data \
      --name=nexus \
      --restart=always \
      --privileged=true \
      sonatype/nexus3:3.18.1
      
      说明:容器的 4 个端口分别对应:
      9999:8081:Nexus3 UI 界面
      10000:10000:Docker 聚合仓库(支持 pull
      10010:10010: Docker 代理仓库 (支持 pull
      10086:10086: Docker 本地仓库(支持 pullpush
    • 配置 Docker 仓库
      本地仓库(docker-hosted)


      image.png

    代理仓库(docker-proxy)


    image.png

    聚合仓库(docker-group)


    image.png

    使用 Nginx 反向代理

    由于,三种仓库支持的功能都不太完美:

    • Docker 本地仓库:支持pullpush,但无法使用代理 pull 本地没有的镜像
    • Docker 代理仓库:支持 pull,可以从中央仓库pull 本地没有的镜像,但不能 push
    • Docker 聚合仓库:支持 pull,可以从中央仓库pull 本地没有的镜像,虽然是本地仓库和代理仓库的组合,但却不支持 push,因为不知道具体 push 到组合中的那个仓库

    故使用 Nginx 进行代理:通过请求方式的不同,代理到不同的仓库,从而实现仓库操作上的统一,具体配置如下:

    upstream nexus_website {
        server 120.79.176.192:9999;
    }
    upstream nexus_docker_hosted {
        server 120.79.176.192:10086;
    }
    upstream nexus_docker_group {
        server 120.79.176.192:10000;
    }
    
    server {
        listen 80;
        server_name registry.cn-shenzhen.idukelu.com;
        access_log /var/log/nginx/registry.cn-shenzhen.sekorm.com.log main;
            
        # disable any limits to avoid HTTP 413 for large image uploads
        client_max_body_size 0;
        # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
        chunked_transfer_encoding on;
        # 设置默认使用推送代理
        set $upstream "nexus_docker_hosted";
        # 当请求是GET,也就是拉取镜像的时候,这里改为拉取代理,如此便解决了拉取和推送的端口统一
        if ( $request_method ~* 'GET') {
            set $upstream "nexus_docker_group";
        }
        # 只有本地仓库才支持搜索,所以将搜索请求转发到本地仓库,否则出现500报错
        if ($request_uri ~ '/search') {
            set $upstream "nexus_docker_hosted"; 
        }  
        index index.html index.htm index.php;
        location / {
                proxy_pass http://$upstream;
                proxy_set_header Host $host;
                proxy_connect_timeout 3600;
                proxy_send_timeout 3600;
                proxy_read_timeout 3600;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_buffering off;
                proxy_request_buffering off;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto http;
        }
    }
    
    server {
        listen 80;
        server_name repo.idukelu.com;
        access_log /var/log/nginx/repo.sekorm.com.log main;
        index index.html index.htm index.php;
        location / {
                proxy_pass http://nexus_website;
                proxy_set_header Host $host;
                client_max_body_size 512m;
                proxy_connect_timeout 3600;
                proxy_send_timeout 3600;
                proxy_read_timeout 3600;
                proxy_buffering off;
                proxy_request_buffering off;
        }
    }
    

    到这里,基本上就完成了 Nexus3 的搭建工作和 Nginx 的代理工作

    参考:
    https://help.sonatype.com/repomanager3
    https://github.com/docker/docker-registry
    https://zhang.ge/5139.html

    相关文章

      网友评论

        本文标题:Docker 安装 Nexus3,并配置 Nginx 反向代理

        本文链接:https://www.haomeiwen.com/subject/lzcllctx.html