├── .github └── workflows │ └── gitleaks.yaml ├── docker ├── docker-compose.yaml ├── dockerhub │ ├── config.yml │ └── docker-compose.yaml ├── gcr │ ├── config.yml │ └── docker-compose.yaml ├── ghcr │ ├── config.yml │ └── docker-compose.yaml ├── k8sgcr │ ├── config.yml │ └── docker-compose.yaml ├── quay │ ├── config.yml │ └── docker-compose.yaml └── registryk8s │ ├── config.yml │ └── docker-compose.yaml ├── kubernetes ├── dockerhub │ ├── config.yml │ ├── kustomization.yaml │ ├── sts.yaml │ └── svc.yaml ├── gcr │ ├── config.yml │ ├── kustomization.yaml │ ├── sts.yaml │ └── svc.yaml ├── ghcr │ ├── config.yml │ ├── kustomization.yaml │ ├── sts.yaml │ └── svc.yaml ├── ingress.yaml ├── k8sgcr │ ├── config.yml │ ├── kustomization.yaml │ ├── sts.yaml │ └── svc.yaml ├── kustomization.yaml ├── quay │ ├── config.yml │ ├── kustomization.yaml │ ├── sts.yaml │ └── svc.yaml └── registryk8s │ ├── config.yml │ ├── kustomization.yaml │ ├── sts.yaml │ └── svc.yaml └── readme.md /.github/workflows/gitleaks.yaml: -------------------------------------------------------------------------------- 1 | name: gitleaks 2 | on: [push] 3 | jobs: 4 | scan: 5 | name: gitleaks 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v3 9 | with: 10 | fetch-depth: 0 11 | - uses: gitleaks/gitleaks-action@v2 12 | env: 13 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -------------------------------------------------------------------------------- /docker/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | k8sgcr: 4 | image: "registry:2.8.3" 5 | container_name: "k8sgcr" 6 | restart: "always" 7 | volumes: 8 | - "/etc/localtime:/etc/localtime" 9 | - "./k8sgcr/data:/var/lib/registry" 10 | - "./k8sgcr/config.yml:/etc/docker/registry/config.yml" 11 | ports: 12 | - "5004:5000" 13 | 14 | ghcr: 15 | image: "registry:2.8.3" 16 | container_name: "ghcr" 17 | restart: "always" 18 | volumes: 19 | - "/etc/localtime:/etc/localtime" 20 | - "./ghcr/data:/var/lib/registry" 21 | - "./ghcr/config.yml:/etc/docker/registry/config.yml" 22 | ports: 23 | - "5001:5000" 24 | 25 | gcr: 26 | image: "registry:2.8.3" 27 | container_name: "gcr" 28 | restart: "always" 29 | volumes: 30 | - "/etc/localtime:/etc/localtime" 31 | - "./gcr/data:/var/lib/registry" 32 | - "./gcr/config.yml:/etc/docker/registry/config.yml" 33 | ports: 34 | - "5003:5000" 35 | 36 | dockerhub: 37 | image: "registry:2.8.3" 38 | container_name: "dockerhub" 39 | restart: "always" 40 | volumes: 41 | - "/etc/localtime:/etc/localtime" 42 | - "./dockerhub/data:/var/lib/registry" 43 | - "./dockerhub/config.yml:/etc/docker/registry/config.yml" 44 | ports: 45 | - "5000:5000" 46 | 47 | registryk8s: 48 | image: "registry:2.8.3" 49 | container_name: "registryk8s" 50 | restart: "always" 51 | volumes: 52 | - "/etc/localtime:/etc/localtime" 53 | - "./registryk8s/data:/var/lib/registry" 54 | - "./registryk8s/config.yml:/etc/docker/registry/config.yml" 55 | ports: 56 | - "5005:5000" 57 | 58 | # nginx-proxy-manager: 59 | # image: 'jc21/nginx-proxy-manager:2.11.3' 60 | # container_name: nginx-proxy-manager 61 | # restart: always 62 | # ports: 63 | # - '80:80' 64 | # - '82:81' 65 | # - '443:443' 66 | # volumes: 67 | # - "/etc/localtime:/etc/localtime" 68 | # - ./npm/data:/data 69 | # - ./npm/letsencrypt:/etc/letsencrypt -------------------------------------------------------------------------------- /docker/dockerhub/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 1m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://registry-1.docker.io 17 | -------------------------------------------------------------------------------- /docker/dockerhub/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | dockerhub: 4 | image: "registry:2.8.3" 5 | container_name: "dockerhub" 6 | restart: "always" 7 | volumes: 8 | - "/etc/localtime:/etc/localtime" 9 | - "./data:/var/lib/registry" 10 | - "./config.yml:/etc/docker/registry/config.yml" 11 | ports: 12 | - "5000:5000" 13 | -------------------------------------------------------------------------------- /docker/gcr/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 1m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://gcr.io 17 | -------------------------------------------------------------------------------- /docker/gcr/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | gcr: 4 | image: "registry:2.8.3" 5 | container_name: "gcr" 6 | restart: "always" 7 | volumes: 8 | - "/etc/localtime:/etc/localtime" 9 | - "./data:/var/lib/registry" 10 | - "./config.yml:/etc/docker/registry/config.yml" 11 | ports: 12 | - "5003:5000" 13 | -------------------------------------------------------------------------------- /docker/ghcr/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 1m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://ghcr.io 17 | -------------------------------------------------------------------------------- /docker/ghcr/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | ghcr: 4 | image: "registry:2.8.3" 5 | container_name: "ghcr" 6 | restart: "always" 7 | volumes: 8 | - "/etc/localtime:/etc/localtime" 9 | - "./data:/var/lib/registry" 10 | - "./config.yml:/etc/docker/registry/config.yml" 11 | ports: 12 | - "5001:5000" 13 | -------------------------------------------------------------------------------- /docker/k8sgcr/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 1m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://k8s.gcr.io 17 | -------------------------------------------------------------------------------- /docker/k8sgcr/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | k8sgcr: 4 | image: "registry:2.8.3" 5 | container_name: "k8sgcr" 6 | restart: "always" 7 | volumes: 8 | - "/etc/localtime:/etc/localtime" 9 | - "./data:/var/lib/registry" 10 | - "./config.yml:/etc/docker/registry/config.yml" 11 | ports: 12 | - "5004:5000" 13 | -------------------------------------------------------------------------------- /docker/quay/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 1m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://quay.io 17 | -------------------------------------------------------------------------------- /docker/quay/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | quay: 4 | image: "registry:2.8.3" 5 | container_name: "quay" 6 | restart: "always" 7 | volumes: 8 | - "/etc/localtime:/etc/localtime" 9 | - "./data:/var/lib/registry" 10 | - "./config.yml:/etc/docker/registry/config.yml" 11 | ports: 12 | - "5002:5000" 13 | -------------------------------------------------------------------------------- /docker/registryk8s/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 1m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://registry.k8s.io 17 | -------------------------------------------------------------------------------- /docker/registryk8s/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | registryk8s: 4 | image: "registry:2.8.3" 5 | container_name: "registryk8s" 6 | restart: "always" 7 | volumes: 8 | - "/etc/localtime:/etc/localtime" 9 | - "./data:/var/lib/registry" 10 | - "./config.yml:/etc/docker/registry/config.yml" 11 | ports: 12 | - "5005:5000" 13 | -------------------------------------------------------------------------------- /kubernetes/dockerhub/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 45m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://registry-1.docker.io -------------------------------------------------------------------------------- /kubernetes/dockerhub/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - sts.yaml 3 | - svc.yaml 4 | 5 | configMapGenerator: 6 | - name: dockerhub-cnf 7 | files: 8 | - config.yml 9 | options: 10 | disableNameSuffixHash: true -------------------------------------------------------------------------------- /kubernetes/dockerhub/sts.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: dockerhub 5 | namespace: registry 6 | spec: 7 | selector: 8 | matchLabels: 9 | app: dockerhub 10 | serviceName: dockerhub 11 | replicas: 1 12 | template: 13 | metadata: 14 | labels: 15 | app: dockerhub 16 | spec: 17 | containers: 18 | - name: dockerhub 19 | image: registry:2.8.1 20 | ports: 21 | - containerPort: 5000 22 | name: dockerhub 23 | volumeMounts: 24 | - name: dockerhub-data 25 | mountPath: /var/lib/registry 26 | - name: timezone 27 | mountPath: /etc/localtime 28 | readOnly: true 29 | - name: dockerhub-cnf 30 | mountPath: /etc/docker/registry/config.yml 31 | subPath: config.yml 32 | volumes: 33 | - name: dockerhub-cnf 34 | configMap: 35 | name: dockerhub-cnf 36 | - name: timezone 37 | hostPath: 38 | path: /usr/share/zoneinfo/Asia/Shanghai 39 | volumeClaimTemplates: 40 | - metadata: 41 | name: dockerhub-data 42 | spec: 43 | accessModes: [ "ReadWriteOnce" ] 44 | resources: 45 | requests: 46 | storage: 50Gi 47 | -------------------------------------------------------------------------------- /kubernetes/dockerhub/svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: dockerhub 5 | namespace: registry 6 | spec: 7 | selector: 8 | app: dockerhub 9 | ports: 10 | - port: 5000 11 | targetPort: 5000 12 | -------------------------------------------------------------------------------- /kubernetes/gcr/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 1m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://gcr.io -------------------------------------------------------------------------------- /kubernetes/gcr/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - sts.yaml 3 | - svc.yaml 4 | 5 | configMapGenerator: 6 | - name: gcr-cnf 7 | files: 8 | - config.yml 9 | options: 10 | disableNameSuffixHash: true -------------------------------------------------------------------------------- /kubernetes/gcr/sts.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: gcr 5 | namespace: registry 6 | spec: 7 | selector: 8 | matchLabels: 9 | app: gcr 10 | serviceName: gcr 11 | replicas: 1 12 | template: 13 | metadata: 14 | labels: 15 | app: gcr 16 | spec: 17 | containers: 18 | - name: gcr 19 | image: registry:2.8.1 20 | ports: 21 | - containerPort: 5000 22 | name: gcr 23 | volumeMounts: 24 | - name: gcr-data 25 | mountPath: /var/lib/registry 26 | - name: timezone 27 | mountPath: /etc/localtime 28 | readOnly: true 29 | - name: gcr-cnf 30 | mountPath: /etc/docker/registry/config.yml 31 | subPath: config.yml 32 | volumes: 33 | - name: gcr-cnf 34 | configMap: 35 | name: gcr-cnf 36 | - name: timezone 37 | hostPath: 38 | path: /usr/share/zoneinfo/Asia/Shanghai 39 | volumeClaimTemplates: 40 | - metadata: 41 | name: gcr-data 42 | spec: 43 | accessModes: [ "ReadWriteOnce" ] 44 | resources: 45 | requests: 46 | storage: 50Gi 47 | -------------------------------------------------------------------------------- /kubernetes/gcr/svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: gcr 5 | namespace: registry 6 | spec: 7 | selector: 8 | app: gcr 9 | ports: 10 | - port: 5000 11 | targetPort: 5000 12 | -------------------------------------------------------------------------------- /kubernetes/ghcr/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 1m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://ghcr.io -------------------------------------------------------------------------------- /kubernetes/ghcr/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - sts.yaml 3 | - svc.yaml 4 | 5 | configMapGenerator: 6 | - name: ghcr-cnf 7 | files: 8 | - config.yml 9 | options: 10 | disableNameSuffixHash: true -------------------------------------------------------------------------------- /kubernetes/ghcr/sts.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: ghcr 5 | namespace: registry 6 | spec: 7 | selector: 8 | matchLabels: 9 | app: ghcr 10 | serviceName: ghcr 11 | replicas: 1 12 | template: 13 | metadata: 14 | labels: 15 | app: ghcr 16 | spec: 17 | containers: 18 | - name: ghcr 19 | image: registry:2.8.1 20 | ports: 21 | - containerPort: 5000 22 | name: ghcr 23 | volumeMounts: 24 | - name: ghcr-data 25 | mountPath: /var/lib/registry 26 | - name: timezone 27 | mountPath: /etc/localtime 28 | readOnly: true 29 | - name: ghcr-cnf 30 | mountPath: /etc/docker/registry/config.yml 31 | subPath: config.yml 32 | volumes: 33 | - name: ghcr-cnf 34 | configMap: 35 | name: ghcr-cnf 36 | - name: timezone 37 | hostPath: 38 | path: /usr/share/zoneinfo/Asia/Shanghai 39 | volumeClaimTemplates: 40 | - metadata: 41 | name: ghcr-data 42 | spec: 43 | accessModes: [ "ReadWriteOnce" ] 44 | resources: 45 | requests: 46 | storage: 50Gi 47 | -------------------------------------------------------------------------------- /kubernetes/ghcr/svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: ghcr 5 | namespace: registry 6 | spec: 7 | selector: 8 | app: ghcr 9 | ports: 10 | - port: 5000 11 | targetPort: 5000 12 | -------------------------------------------------------------------------------- /kubernetes/ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: registry-ingress 5 | namespace: registry 6 | annotations: 7 | kubernetes.io/ingress.class: "nginx" 8 | nginx.ingress.kubernetes.io/ssl-passthrough: "true" 9 | nginx.ingress.kubernetes.io/force-ssl-redirect: "true" 10 | spec: 11 | rules: 12 | - host: "quay.example.com" 13 | http: 14 | paths: 15 | - pathType: Prefix 16 | path: "/" 17 | backend: 18 | service: 19 | name: quay 20 | port: 21 | number: 5000 22 | - host: "registryk8s.example.com" 23 | http: 24 | paths: 25 | - pathType: Prefix 26 | path: "/" 27 | backend: 28 | service: 29 | name: registryk8s 30 | port: 31 | number: 5000 32 | - host: "gcr.example.com" 33 | http: 34 | paths: 35 | - pathType: Prefix 36 | path: "/" 37 | backend: 38 | service: 39 | name: gcr 40 | port: 41 | number: 5000 42 | - host: "ghcr.example.com" 43 | http: 44 | paths: 45 | - pathType: Prefix 46 | path: "/" 47 | backend: 48 | service: 49 | name: ghcr 50 | port: 51 | number: 5000 52 | - host: "k8sgcr.example.com" 53 | http: 54 | paths: 55 | - pathType: Prefix 56 | path: "/" 57 | backend: 58 | service: 59 | name: k8sgcr 60 | port: 61 | number: 5000 62 | - host: "hub.example.com" 63 | http: 64 | paths: 65 | - pathType: Prefix 66 | path: "/" 67 | backend: 68 | service: 69 | name: dockerhub 70 | port: 71 | number: 5000 72 | tls: 73 | - hosts: 74 | - example.com 75 | secretName: example.com-tls 76 | -------------------------------------------------------------------------------- /kubernetes/k8sgcr/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 1m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://k8s.gcr.io -------------------------------------------------------------------------------- /kubernetes/k8sgcr/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - sts.yaml 3 | - svc.yaml 4 | 5 | configMapGenerator: 6 | - name: k8sgcr-cnf 7 | files: 8 | - config.yml 9 | options: 10 | disableNameSuffixHash: true -------------------------------------------------------------------------------- /kubernetes/k8sgcr/sts.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: k8sgcr 5 | namespace: registry 6 | spec: 7 | selector: 8 | matchLabels: 9 | app: k8sgcr 10 | serviceName: k8sgcr 11 | replicas: 1 12 | template: 13 | metadata: 14 | labels: 15 | app: k8sgcr 16 | spec: 17 | containers: 18 | - name: k8sgcr 19 | image: registry:2.8.1 20 | ports: 21 | - containerPort: 5000 22 | name: k8sgcr 23 | volumeMounts: 24 | - name: k8sgcr-data 25 | mountPath: /var/lib/registry 26 | - name: timezone 27 | mountPath: /etc/localtime 28 | readOnly: true 29 | - name: k8sgcr-cnf 30 | mountPath: /etc/docker/registry/config.yml 31 | subPath: config.yml 32 | volumes: 33 | - name: k8sgcr-cnf 34 | configMap: 35 | name: k8sgcr-cnf 36 | - name: timezone 37 | hostPath: 38 | path: /usr/share/zoneinfo/Asia/Shanghai 39 | volumeClaimTemplates: 40 | - metadata: 41 | name: k8sgcr-data 42 | spec: 43 | accessModes: [ "ReadWriteOnce" ] 44 | resources: 45 | requests: 46 | storage: 50Gi 47 | -------------------------------------------------------------------------------- /kubernetes/k8sgcr/svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: k8sgcr 5 | namespace: registry 6 | spec: 7 | selector: 8 | app: k8sgcr 9 | ports: 10 | - port: 5000 11 | targetPort: 5000 12 | -------------------------------------------------------------------------------- /kubernetes/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - registryk8s 3 | - quay 4 | - dockerhub 5 | - gcr 6 | - ghcr 7 | - k8sgcr 8 | - ingress.yaml 9 | 10 | namespace: registry 11 | 12 | images: 13 | - name: registry 14 | newTag: 2.8.3 15 | -------------------------------------------------------------------------------- /kubernetes/quay/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 1m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://quay.io -------------------------------------------------------------------------------- /kubernetes/quay/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - sts.yaml 3 | - svc.yaml 4 | 5 | configMapGenerator: 6 | - name: quay-cnf 7 | files: 8 | - config.yml 9 | options: 10 | disableNameSuffixHash: true -------------------------------------------------------------------------------- /kubernetes/quay/sts.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: quay 5 | namespace: registry 6 | spec: 7 | selector: 8 | matchLabels: 9 | app: quay 10 | serviceName: quay 11 | replicas: 1 12 | template: 13 | metadata: 14 | labels: 15 | app: quay 16 | spec: 17 | containers: 18 | - name: quay 19 | image: registry:2.8.1 20 | ports: 21 | - containerPort: 5000 22 | name: quay 23 | volumeMounts: 24 | - name: quay-data 25 | mountPath: /var/lib/registry 26 | - name: timezone 27 | mountPath: /etc/localtime 28 | readOnly: true 29 | - name: quay-cnf 30 | mountPath: /etc/docker/registry/config.yml 31 | subPath: config.yml 32 | volumes: 33 | - name: quay-cnf 34 | configMap: 35 | name: quay-cnf 36 | - name: timezone 37 | hostPath: 38 | path: /usr/share/zoneinfo/Asia/Shanghai 39 | volumeClaimTemplates: 40 | - metadata: 41 | name: quay-data 42 | spec: 43 | accessModes: [ "ReadWriteOnce" ] 44 | resources: 45 | requests: 46 | storage: 50Gi 47 | -------------------------------------------------------------------------------- /kubernetes/quay/svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: quay 5 | namespace: registry 6 | spec: 7 | selector: 8 | app: quay 9 | ports: 10 | - port: 5000 11 | targetPort: 5000 12 | -------------------------------------------------------------------------------- /kubernetes/registryk8s/config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | storage: 3 | filesystem: 4 | rootdirectory: /var/lib/registry 5 | delete: 6 | enabled: true 7 | maintenance: 8 | uploadpurging: 9 | enabled: true 10 | age: 168h 11 | dryrun: false 12 | interval: 1m 13 | http: 14 | addr: 0.0.0.0:5000 15 | proxy: 16 | remoteurl: https://registry.k8s.io -------------------------------------------------------------------------------- /kubernetes/registryk8s/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - sts.yaml 3 | - svc.yaml 4 | 5 | configMapGenerator: 6 | - name: registryk8s-cnf 7 | files: 8 | - config.yml 9 | options: 10 | disableNameSuffixHash: true -------------------------------------------------------------------------------- /kubernetes/registryk8s/sts.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: registryk8s 5 | namespace: registry 6 | spec: 7 | selector: 8 | matchLabels: 9 | app: registryk8s 10 | serviceName: registryk8s 11 | replicas: 1 12 | template: 13 | metadata: 14 | labels: 15 | app: registryk8s 16 | spec: 17 | containers: 18 | - name: registryk8s 19 | image: registry:2.8.1 20 | ports: 21 | - containerPort: 5000 22 | name: registryk8s 23 | volumeMounts: 24 | - name: registryk8s-data 25 | mountPath: /var/lib/registry 26 | - name: timezone 27 | mountPath: /etc/localtime 28 | readOnly: true 29 | - name: registryk8s-cnf 30 | mountPath: /etc/docker/registry/config.yml 31 | subPath: config.yml 32 | volumes: 33 | - name: registryk8s-cnf 34 | configMap: 35 | name: registryk8s-cnf 36 | - name: timezone 37 | hostPath: 38 | path: /usr/share/zoneinfo/Asia/Shanghai 39 | volumeClaimTemplates: 40 | - metadata: 41 | name: registryk8s-data 42 | spec: 43 | accessModes: [ "ReadWriteOnce" ] 44 | resources: 45 | requests: 46 | storage: 50Gi 47 | -------------------------------------------------------------------------------- /kubernetes/registryk8s/svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: registryk8s 5 | namespace: registry 6 | spec: 7 | selector: 8 | app: registryk8s 9 | ports: 10 | - port: 5000 11 | targetPort: 5000 12 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ### 简介 2 | 3 | 这是为了方便大家做各个镜像仓库代理的 4 | 5 | ### Docker教程 6 | 7 | 进入docker目录 8 | 9 | 如果你想要启动所有的镜像仓库直接执行 10 | 11 | `docker-compose up -d` 12 | 13 | 但是你想要单独代理某一个仓库就直接进入那个文件夹 14 | 15 | `cd dockerhub` 16 | 17 | `docker-compose up -d` 18 | 19 | 就好了 20 | 21 | 每一个镜像仓库对外的端口都是不一样的,当然你也可以使用nginx统一反向代理一下 22 | 23 | ### k8s教程 24 | 25 | 都在用k8s了,还想要教程? 26 | 27 | ### 注意 28 | 29 | 大家可以看下配置文件 30 | 31 | 默认168h小时之后会清理缓存,也就是你拉取的镜像缓存 32 | 33 | 喜欢的给个star哦!!!! 34 | 35 | ### 其他教程 36 | 37 | `https://51.ruyo.net/18687.html` 38 | 39 | ### 广告位 40 | 41 | 我的tg频道 [https://t.me/bboyapp](https://t.me/bboyapp) 42 | --------------------------------------------------------------------------------