Skip to content

中央仓库安装(Nexus) ​

搭建依赖 Docker Compose, 请按安装指南安装

使用 Docker Compose 安装 ​

yaml
version: "3.9"

networks:
  nexus:
    external: true
    name: violet
services:
  nexus:
    image: sonatype/nexus3
    container_name: nexus3
    restart: always
    networks:
      nexus:
        ipv4_address: 192.168.1.16
    volumes:
      - ./data:/nexus-data

TIP

默认账号为 admin,初始密码在 ./data/auth.password nexus 默认端口是 8081, 这里没映射出去, 采用的是 nginx 反向代理去访问

Docker Hub 仓库搭建 ​

创建储存位置 ​

  1. 登录后进入管理页面的 Repository -> Blob Stores
  2. 点击 Create Blob Store
  3. 选择 Type 为 File,名称为 docker-hub
  4. 保存

创建 Docker Hub 代理仓库 ​

  1. 进入管理页面 Repository -> Repositories
  2. 点击 Create Repository
  3. 选择 dockers(proxy)
  4. 填写名称(创建后不可更改)
    展开图片

    image.png

  5. 允许任何用户拉取(可选,创建后可更改)
    展开图片

    image.png

  6. 设置代理位置(可更改)
    展开图片

    image.png

  7. 选择储存位置(选择之前创建的位置,创建后不可更改)
    展开图片

    image.png

  8. 最下面点击创建

创建 Docker Hub 聚合仓库 ​

  1. 进入管理页面 Repository -> Repositories
  2. 点击 Create Repository
  3. 选择 dockers(group)
  4. 填写名称(创建后不可更改)
    展开图片

    image.png

  5. 设置单独端口,不可与其他端口冲突,创建后可以更改
    展开图片

    image.png

  6. 允许任何人拉取
    展开图片

    image.png

  7. 存储位置(创建后不可更改)
    展开图片

    image.png

  8. 将 Docker Hub 代理加入其中
    展开图片

    image.png

  9. 最下面点击创建

配置匿名拉取 Token Realm ​

注意

不配置这个仓库无法被匿名拉取

  1. 进入管理页面 Security -> Realms
  2. 激活 Docker Bearer Token Realms
    展开图片

    image.png

配置 Nginx 代理 ​

Tip

现在的 Docker Hub 还无法配置到 docker 客户端的镜像列表中

方案一 ​

前提:已经配置好了 nexus 的 nginx 反向代理

步骤

假设配置的反向代理为将 mirrors.sdfok.cn 映射到 192.168.1.16:8081 上,现在只需要在配置中添加将 mirrors.sdfok.cn/v2 映射到 192.168.1.16:8082/v2 上即可,则可以将https://mirrors.sdfok.cn 配置到 docker 的镜像列表中,配置方法参考设置 DockerHub 镜像

方案二 ​

步骤

新增加一个域名:docker.sdfok.cn,将这个域名直接反代到 192.168.1.16:8082,则可以将 https://docker.sdfok.cn 配置到 docker 的镜像列表中。

创建 Docker Hub 私服仓库 ​

  1. 进入管理页面 Repository -> Repositories
  2. 点击 Create Repository
  3. 选择 dockers(hosted)
  4. 填写名称(创建后不可更改)
  5. 设置单独端口,不可与其他端口冲突,创建后可以更改
  6. 允许任何人拉取
  7. 存储位置(创建后不可更改)
  8. 最下面点击创建
  9. 修改上面创建的聚合仓库,将私服也加入到聚合仓库

修改 Nginx 代理 ​

TIP

由于聚合仓库只能拉取,不能推送,所以在 nginx 反代时需要判断是拉取还是推送,将请求代理到对应的端口上

对之前的代理配置,按下面的方式稍作修改即可

nginx
location / {
        # 默认为docker推送端口
        set $dockerport "80";
        # 当为 GET 请求时,切换到docker拉取端口
        if ($request_method ~* 'GET') {
            set $dockerport "8082";
        }
        proxy_pass http://192.168.1.16:$dockerport;
        include    nginxconfig.io/proxy.conf;
    }

‍