博客 / 詳情

返回

Docker Registry UI

該項目旨在為你的私有 Docker 倉庫提供簡潔且功能完整的用户界面。

沒有Harbor那樣那麼多的依賴組件,當你只需要一個內網Docker私庫和一個簡單的用户界面查看倉庫有哪些鏡像時,這個項目是一個不錯的選擇。該項目僅包含一個前端頁面,後端也僅依賴registry鏡像。

Docker-Compose

registry-ui 推薦的docker-compose啓動配置如下:

version: '3.8'

services:
  registry-ui:
    image: joxit/docker-registry-ui:main
    restart: always
    ports:
      - 80:80
    environment:
      - SINGLE_REGISTRY=true
      - REGISTRY_TITLE=Docker Registry UI
      - DELETE_IMAGES=true
      - SHOW_CONTENT_DIGEST=true
      - NGINX_PROXY_PASS_URL=http://registry-server:5000
      - SHOW_CATALOG_NB_TAGS=true
      - CATALOG_MIN_BRANCHES=1
      - CATALOG_MAX_BRANCHES=1
      - TAGLIST_PAGE_SIZE=100
      - REGISTRY_SECURED=false
      - CATALOG_ELEMENTS_LIMIT=1000
    container_name: registry-ui

  registry-server:
    image: registry:2.8.2
    restart: always
    environment:
      REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin: '[http://registry.example.com]'
      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'
    volumes:
      - ./registry/data:/var/lib/registry
    container_name: registry-server

Kubernetes部署

當想利用Kubernetes平台的故障恢復能力,去除組件單點故障,可以將registry部署到Kubernetes平台上。

  • registry-server.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: registry-server
  namespace: registry-ui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: registry-server
  template:
    metadata:
      labels:
        app: registry-server
    spec:
      volumes:
        - name: registry-data
          persistentVolumeClaim:
            claimName: registry-data-pvc
      containers:
        - name: registry-server
          image: 'joxit/registry:3.0.0'
          ports:
            - containerPort: 5000
              protocol: TCP
          env:
            - name: REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin
              value: '[http://registry.ci.com]'
            - name: REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods
              value: '[HEAD,GET,OPTIONS,DELETE]'
            - name: REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials
              value: '[true]'
            - name: REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers
              value: '[Authorization,Accept,Cache-Control]'
            - name: REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers
              value: '[Docker-Content-Digest]'
            - name: REGISTRY_STORAGE_DELETE_ENABLED
              value: 'true'
          resources: {}
          volumeMounts:
            - name: registry-data
              mountPath: /var/lib/registry
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
  name: registry-server
  namespace: registry-ui
spec:
  ports:
    - protocol: TCP
      port: 5000
      targetPort: 5000
  selector:
    app: registry-server
  type: ClusterIP
  • registry-ui.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: registry-ui
  namespace: registry-ui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: registry-ui
  template:
    metadata:
      labels:
        app: registry-ui
    spec:
      containers:
        - name: registry-ui
          image: 'joxit/docker-registry-ui:main-debian-amd64'
          ports:
            - containerPort: 80
              protocol: TCP
          env:
            - name: SINGLE_REGISTRY
              value: 'true'
            - name: REGISTRY_TITLE
              value: Docker Registry UI
            - name: DELETE_IMAGES
              value: 'true'
            - name: PULL_URL
              value: 'registry.ci.com:32041'
            - name: SHOW_CONTENT_DIGEST
              value: 'true'
            - name: NGINX_PROXY_PASS_URL
              value: 'http://registry-server:5000'
            - name: SHOW_CATALOG_NB_TAGS
              value: 'true'
            - name: CATALOG_MIN_BRANCHES
              value: '1'
            - name: CATALOG_MAX_BRANCHES
              value: '1'
            - name: TAGLIST_PAGE_SIZE
              value: '100'
            - name: REGISTRY_SECURED
              value: 'false'
            - name: CATALOG_ELEMENTS_LIMIT
              value: '1000'
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
---
kind: Service
apiVersion: v1
metadata:
  name: registry-ui
  namespace: registry-ui
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 32041
  selector:
    app: registry-ui
  type: NodePort

環境變量

            - name: REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin
              value: '[http://registry.ci.com]'
            - name: REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods
              value: '[HEAD,GET,OPTIONS,DELETE]'
            - name: REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials
              value: '[true]'
            - name: REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers
              value: '[Authorization,Accept,Cache-Control]'
            - name: REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers
              value: '[Docker-Content-Digest]'

這些環境變量並沒有什麼作用,可以去掉。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.