该项目旨在为你的私有 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]'
这些环境变量并没有什么作用,可以去掉。