該項目旨在為你的私有 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]'
這些環境變量並沒有什麼作用,可以去掉。