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. 选择 TypeFile,名称为 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;
    }