mapleSnow 6888a9ff2c add joxit 1 سال پیش
..
registry 6888a9ff2c add joxit 1 سال پیش
README.md 6888a9ff2c add joxit 1 سال پیش
docker-compose.yml 6888a9ff2c add joxit 1 سال پیش

README.md

Docker Registry User Interface The simplest and most complete UI for your private registry!

官网文档

快速开始

version: '3.8'

services:
  registry-ui:
    image: joxit/docker-registry-ui:main
    restart: always
    ports:
      - 80:80

  registry-server:
    image: registry:2.8.2
    restart: always
    volumes:
      - ./registry/data:/var/lib/registry

开启仓库认证

1. 生成认证文件

首先,使用 htpasswd 命令生成一个包含用户名和密码的认证文件。如果你没有安装 htpasswd,可以通过以下方式安装:

  • 对于 Ubuntu 或 Debian 系统:

    sudo apt-get install apache2-utils
    
  • 对于 CentOS 或 Fedora 系统:

    sudo yum install httpd-tools
    

然后,使用 htpasswd 创建认证文件:

mkdir -p registry/auth
htpasswd -Bc registry/auth/htpasswd myuser

registry/auth/htpasswd 是保存认证信息的文件路径,myuser 是你要添加的用户名。系统会提示你输入并确认密码。

2. 配置 Docker Registry 使用认证

接下来,修改你的 docker-compose.yml 文件,将认证文件挂载到容器中,并启用认证:

version: '3.8'

services:
  registry-server:
    image: registry:2.8.2
    restart: always
    environment:
      REGISTRY_AUTH: htpasswd    # 新增认证配置
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd # 新增认证配置
      REGISTRY_AUTH_HTPASSWD_REALM: basic-realm # 新增认证配置
    volumes:
      - ./registry/data:/var/lib/registry
      - ./registry/auth:/auth # 新增认证文件挂载

3. 启动或重启 Docker Registry

保存 docker-compose.yml 文件,然后启动或重启 Docker Registry:

docker-compose up -d

4. 登录到 Docker Registry

在客户端推送或拉取镜像之前,需要先登录到 Docker Registry:

docker login <registry-server>:5000

使用之前在 htpasswd 文件中设置的用户名和密码。

5. 推送或拉取镜像

成功登录后,你可以使用 Docker 命令推送或拉取镜像,例如:

docker tag my-image:latest <registry-server>:5000/my-image:latest
docker push <registry-server>:5000/my-image:latest

开启Https,完整配置

version: '3.8'

services:
  registry-ui:
    image: joxit/docker-registry-ui:main
    restart: always
    ports:
      - 10023:80 # 按需修改
    environment:
      - REGISTRY_URL=https://xxx.maplesnow.cn # 配置成自己的域名
      - SINGLE_REGISTRY=true
      - REGISTRY_TITLE=Docker Registry UI
      - DELETE_IMAGES=true
      - SHOW_CONTENT_DIGEST=true
      - NGINX_PROXY_PASS_URL=http://registry-server:5000
      - TAGLIST_PAGE_SIZE=100
      - REGISTRY_SECURED=false
      - CATALOG_ELEMENTS_LIMIT=1000
    container_name: registry-ui
    networks:
      - xxx-proxy # 对应network中网络,根据实际情况调整

  registry-server:
    container_name: registry-server
    image: registry:2.8.2
    restart: always
    expose:
      - 5000        
    environment:
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin: "['https://xxx.maplesnow.cn']"  # 和registry-ui中REGISTRY_URL保持一致
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods: '[HEAD,GET,OPTIONS,DELETE]'
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials: '[true]'
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers: '[Authorization,Accept,Cache-Control]'
      REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers: '[Docker-Content-Digest]'
      REGISTRY_STORAGE_DELETE_ENABLED: 'true'
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd # 默认账号密码为admin / admin
      REGISTRY_AUTH_HTPASSWD_REALM: basic-realm
    volumes:
      - ./registry/data:/var/lib/registry
      - ./registry/auth:/auth
    networks:
      - xxx-proxy # 对应network中网络,根据实际情况调整
networks:
  xxx-proxy: # 外部网络,用于nginx容器实例连通,进行反向代理,
    external: true

Npm配置

说明:Nginx反向代理到Registry-ui的服务端口。因为Registry服务的80端口在容器内部本身也是一个Nginx服务。默认访问前端UI界面,所有访问的registry-server的路由都带了/v2的前缀,会被反代到Registry-server

配置成功后,访问对应域名,htpasswd认证,默认的账号为admin,密码为admin