diff --git a/docker-compose.yaml b/docker/docker-compose.yaml similarity index 100% rename from docker-compose.yaml rename to docker/docker-compose.yaml diff --git a/dockerhub/config.yml b/docker/dockerhub/config.yml similarity index 100% rename from dockerhub/config.yml rename to docker/dockerhub/config.yml diff --git a/dockerhub/docker-compose.yaml b/docker/dockerhub/docker-compose.yaml similarity index 100% rename from dockerhub/docker-compose.yaml rename to docker/dockerhub/docker-compose.yaml diff --git a/gcr/config.yml b/docker/gcr/config.yml similarity index 100% rename from gcr/config.yml rename to docker/gcr/config.yml diff --git a/gcr/docker-compose.yaml b/docker/gcr/docker-compose.yaml similarity index 100% rename from gcr/docker-compose.yaml rename to docker/gcr/docker-compose.yaml diff --git a/ghcr/config.yml b/docker/ghcr/config.yml similarity index 100% rename from ghcr/config.yml rename to docker/ghcr/config.yml diff --git a/ghcr/docker-compose.yaml b/docker/ghcr/docker-compose.yaml similarity index 100% rename from ghcr/docker-compose.yaml rename to docker/ghcr/docker-compose.yaml diff --git a/k8sgcr/config.yml b/docker/k8sgcr/config.yml similarity index 100% rename from k8sgcr/config.yml rename to docker/k8sgcr/config.yml diff --git a/k8sgcr/docker-compose.yaml b/docker/k8sgcr/docker-compose.yaml similarity index 100% rename from k8sgcr/docker-compose.yaml rename to docker/k8sgcr/docker-compose.yaml diff --git a/quay/config.yml b/docker/quay/config.yml similarity index 100% rename from quay/config.yml rename to docker/quay/config.yml diff --git a/quay/docker-compose.yaml b/docker/quay/docker-compose.yaml similarity index 100% rename from quay/docker-compose.yaml rename to docker/quay/docker-compose.yaml diff --git a/registryk8s/config.yml b/docker/registryk8s/config.yml similarity index 100% rename from registryk8s/config.yml rename to docker/registryk8s/config.yml diff --git a/registryk8s/docker-compose.yaml b/docker/registryk8s/docker-compose.yaml similarity index 100% rename from registryk8s/docker-compose.yaml rename to docker/registryk8s/docker-compose.yaml diff --git a/kubernetes/dockerhub/config.yml b/kubernetes/dockerhub/config.yml new file mode 100755 index 0000000..1a41432 --- /dev/null +++ b/kubernetes/dockerhub/config.yml @@ -0,0 +1,16 @@ +version: 0.1 +storage: + filesystem: + rootdirectory: /var/lib/registry + delete: + enabled: true + maintenance: + uploadpurging: + enabled: true + age: 168h + dryrun: false + interval: 45m +http: + addr: 0.0.0.0:5000 +proxy: + remoteurl: https://registry-1.docker.io \ No newline at end of file diff --git a/kubernetes/dockerhub/kustomization.yaml b/kubernetes/dockerhub/kustomization.yaml new file mode 100755 index 0000000..825d7fa --- /dev/null +++ b/kubernetes/dockerhub/kustomization.yaml @@ -0,0 +1,10 @@ +resources: +- sts.yaml +- svc.yaml + +configMapGenerator: +- name: dockerhub-cnf + files: + - config.yml + options: + disableNameSuffixHash: true \ No newline at end of file diff --git a/kubernetes/dockerhub/sts.yaml b/kubernetes/dockerhub/sts.yaml new file mode 100755 index 0000000..1e679c0 --- /dev/null +++ b/kubernetes/dockerhub/sts.yaml @@ -0,0 +1,46 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: dockerhub + namespace: registry +spec: + selector: + matchLabels: + app: dockerhub + serviceName: dockerhub + replicas: 1 + template: + metadata: + labels: + app: dockerhub + spec: + containers: + - name: dockerhub + image: registry:2.8.1 + ports: + - containerPort: 5000 + name: dockerhub + volumeMounts: + - name: dockerhub-data + mountPath: /var/lib/registry + - name: timezone + mountPath: /etc/localtime + readOnly: true + - name: dockerhub-cnf + mountPath: /etc/docker/registry/config.yml + subPath: config.yml + volumes: + - name: dockerhub-cnf + configMap: + name: dockerhub-cnf + - name: timezone + hostPath: + path: /usr/share/zoneinfo/Asia/Shanghai + volumeClaimTemplates: + - metadata: + name: dockerhub-data + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 50Gi diff --git a/kubernetes/dockerhub/svc.yaml b/kubernetes/dockerhub/svc.yaml new file mode 100755 index 0000000..01ea295 --- /dev/null +++ b/kubernetes/dockerhub/svc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: dockerhub + namespace: registry +spec: + selector: + app: dockerhub + ports: + - port: 5000 + targetPort: 5000 diff --git a/kubernetes/gcr/config.yml b/kubernetes/gcr/config.yml new file mode 100755 index 0000000..27d5aea --- /dev/null +++ b/kubernetes/gcr/config.yml @@ -0,0 +1,16 @@ +version: 0.1 +storage: + filesystem: + rootdirectory: /var/lib/registry + delete: + enabled: true + maintenance: + uploadpurging: + enabled: true + age: 168h + dryrun: false + interval: 1m +http: + addr: 0.0.0.0:5000 +proxy: + remoteurl: https://gcr.io \ No newline at end of file diff --git a/kubernetes/gcr/kustomization.yaml b/kubernetes/gcr/kustomization.yaml new file mode 100755 index 0000000..2b60c2d --- /dev/null +++ b/kubernetes/gcr/kustomization.yaml @@ -0,0 +1,10 @@ +resources: +- sts.yaml +- svc.yaml + +configMapGenerator: +- name: gcr-cnf + files: + - config.yml + options: + disableNameSuffixHash: true \ No newline at end of file diff --git a/kubernetes/gcr/sts.yaml b/kubernetes/gcr/sts.yaml new file mode 100755 index 0000000..06e5a1f --- /dev/null +++ b/kubernetes/gcr/sts.yaml @@ -0,0 +1,46 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: gcr + namespace: registry +spec: + selector: + matchLabels: + app: gcr + serviceName: gcr + replicas: 1 + template: + metadata: + labels: + app: gcr + spec: + containers: + - name: gcr + image: registry:2.8.1 + ports: + - containerPort: 5000 + name: gcr + volumeMounts: + - name: gcr-data + mountPath: /var/lib/registry + - name: timezone + mountPath: /etc/localtime + readOnly: true + - name: gcr-cnf + mountPath: /etc/docker/registry/config.yml + subPath: config.yml + volumes: + - name: gcr-cnf + configMap: + name: gcr-cnf + - name: timezone + hostPath: + path: /usr/share/zoneinfo/Asia/Shanghai + volumeClaimTemplates: + - metadata: + name: gcr-data + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 50Gi diff --git a/kubernetes/gcr/svc.yaml b/kubernetes/gcr/svc.yaml new file mode 100755 index 0000000..edd006a --- /dev/null +++ b/kubernetes/gcr/svc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: gcr + namespace: registry +spec: + selector: + app: gcr + ports: + - port: 5000 + targetPort: 5000 diff --git a/kubernetes/ghcr/config.yml b/kubernetes/ghcr/config.yml new file mode 100755 index 0000000..118e497 --- /dev/null +++ b/kubernetes/ghcr/config.yml @@ -0,0 +1,16 @@ +version: 0.1 +storage: + filesystem: + rootdirectory: /var/lib/registry + delete: + enabled: true + maintenance: + uploadpurging: + enabled: true + age: 168h + dryrun: false + interval: 1m +http: + addr: 0.0.0.0:5000 +proxy: + remoteurl: https://ghcr.io \ No newline at end of file diff --git a/kubernetes/ghcr/kustomization.yaml b/kubernetes/ghcr/kustomization.yaml new file mode 100755 index 0000000..a34ad2a --- /dev/null +++ b/kubernetes/ghcr/kustomization.yaml @@ -0,0 +1,10 @@ +resources: +- sts.yaml +- svc.yaml + +configMapGenerator: +- name: ghcr-cnf + files: + - config.yml + options: + disableNameSuffixHash: true \ No newline at end of file diff --git a/kubernetes/ghcr/sts.yaml b/kubernetes/ghcr/sts.yaml new file mode 100755 index 0000000..b8f1fd7 --- /dev/null +++ b/kubernetes/ghcr/sts.yaml @@ -0,0 +1,46 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: ghcr + namespace: registry +spec: + selector: + matchLabels: + app: ghcr + serviceName: ghcr + replicas: 1 + template: + metadata: + labels: + app: ghcr + spec: + containers: + - name: ghcr + image: registry:2.8.1 + ports: + - containerPort: 5000 + name: ghcr + volumeMounts: + - name: ghcr-data + mountPath: /var/lib/registry + - name: timezone + mountPath: /etc/localtime + readOnly: true + - name: ghcr-cnf + mountPath: /etc/docker/registry/config.yml + subPath: config.yml + volumes: + - name: ghcr-cnf + configMap: + name: ghcr-cnf + - name: timezone + hostPath: + path: /usr/share/zoneinfo/Asia/Shanghai + volumeClaimTemplates: + - metadata: + name: ghcr-data + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 50Gi diff --git a/kubernetes/ghcr/svc.yaml b/kubernetes/ghcr/svc.yaml new file mode 100755 index 0000000..ba1fcf9 --- /dev/null +++ b/kubernetes/ghcr/svc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: ghcr + namespace: registry +spec: + selector: + app: ghcr + ports: + - port: 5000 + targetPort: 5000 diff --git a/kubernetes/ingress.yaml b/kubernetes/ingress.yaml new file mode 100755 index 0000000..ab4b3e1 --- /dev/null +++ b/kubernetes/ingress.yaml @@ -0,0 +1,75 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: registry-ingress + namespace: registry + annotations: + kubernetes.io/ingress.class: "nginx" + nginx.ingress.kubernetes.io/ssl-passthrough: "true" + nginx.ingress.kubernetes.io/force-ssl-redirect: "true" +spec: + rules: + - host: "quay.example.com" + http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: quay + port: + number: 5000 + - host: "registryk8s.example.com" + http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: registryk8s + port: + number: 5000 + - host: "gcr.example.com" + http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: gcr + port: + number: 5000 + - host: "ghcr.example.com" + http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: ghcr + port: + number: 5000 + - host: "k8sgcr.example.com" + http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: k8sgcr + port: + number: 5000 + - host: "hub.example.com" + http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: dockerhub + port: + number: 5000 + tls: + - hosts: + - example.com + secretName: example.com-tls diff --git a/kubernetes/k8sgcr/config.yml b/kubernetes/k8sgcr/config.yml new file mode 100755 index 0000000..23895f6 --- /dev/null +++ b/kubernetes/k8sgcr/config.yml @@ -0,0 +1,16 @@ +version: 0.1 +storage: + filesystem: + rootdirectory: /var/lib/registry + delete: + enabled: true + maintenance: + uploadpurging: + enabled: true + age: 168h + dryrun: false + interval: 1m +http: + addr: 0.0.0.0:5000 +proxy: + remoteurl: https://k8s.gcr.io \ No newline at end of file diff --git a/kubernetes/k8sgcr/kustomization.yaml b/kubernetes/k8sgcr/kustomization.yaml new file mode 100755 index 0000000..7a25885 --- /dev/null +++ b/kubernetes/k8sgcr/kustomization.yaml @@ -0,0 +1,10 @@ +resources: +- sts.yaml +- svc.yaml + +configMapGenerator: +- name: k8sgcr-cnf + files: + - config.yml + options: + disableNameSuffixHash: true \ No newline at end of file diff --git a/kubernetes/k8sgcr/sts.yaml b/kubernetes/k8sgcr/sts.yaml new file mode 100755 index 0000000..963a692 --- /dev/null +++ b/kubernetes/k8sgcr/sts.yaml @@ -0,0 +1,46 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: k8sgcr + namespace: registry +spec: + selector: + matchLabels: + app: k8sgcr + serviceName: k8sgcr + replicas: 1 + template: + metadata: + labels: + app: k8sgcr + spec: + containers: + - name: k8sgcr + image: registry:2.8.1 + ports: + - containerPort: 5000 + name: k8sgcr + volumeMounts: + - name: k8sgcr-data + mountPath: /var/lib/registry + - name: timezone + mountPath: /etc/localtime + readOnly: true + - name: k8sgcr-cnf + mountPath: /etc/docker/registry/config.yml + subPath: config.yml + volumes: + - name: k8sgcr-cnf + configMap: + name: k8sgcr-cnf + - name: timezone + hostPath: + path: /usr/share/zoneinfo/Asia/Shanghai + volumeClaimTemplates: + - metadata: + name: k8sgcr-data + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 50Gi diff --git a/kubernetes/k8sgcr/svc.yaml b/kubernetes/k8sgcr/svc.yaml new file mode 100755 index 0000000..86ef14c --- /dev/null +++ b/kubernetes/k8sgcr/svc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: k8sgcr + namespace: registry +spec: + selector: + app: k8sgcr + ports: + - port: 5000 + targetPort: 5000 diff --git a/kubernetes/kustomization.yaml b/kubernetes/kustomization.yaml new file mode 100755 index 0000000..676eec4 --- /dev/null +++ b/kubernetes/kustomization.yaml @@ -0,0 +1,14 @@ +resources: +- registryk8s +- quay +- dockerhub +- gcr +- ghcr +- k8sgcr +- ingress.yaml + +namespace: registry + +images: +- name: registry + newTag: 2.8.3 diff --git a/kubernetes/quay/config.yml b/kubernetes/quay/config.yml new file mode 100755 index 0000000..4e5d241 --- /dev/null +++ b/kubernetes/quay/config.yml @@ -0,0 +1,16 @@ +version: 0.1 +storage: + filesystem: + rootdirectory: /var/lib/registry + delete: + enabled: true + maintenance: + uploadpurging: + enabled: true + age: 168h + dryrun: false + interval: 1m +http: + addr: 0.0.0.0:5000 +proxy: + remoteurl: https://quay.io \ No newline at end of file diff --git a/kubernetes/quay/kustomization.yaml b/kubernetes/quay/kustomization.yaml new file mode 100755 index 0000000..26f3851 --- /dev/null +++ b/kubernetes/quay/kustomization.yaml @@ -0,0 +1,10 @@ +resources: +- sts.yaml +- svc.yaml + +configMapGenerator: +- name: quay-cnf + files: + - config.yml + options: + disableNameSuffixHash: true \ No newline at end of file diff --git a/kubernetes/quay/sts.yaml b/kubernetes/quay/sts.yaml new file mode 100755 index 0000000..3985ca5 --- /dev/null +++ b/kubernetes/quay/sts.yaml @@ -0,0 +1,46 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: quay + namespace: registry +spec: + selector: + matchLabels: + app: quay + serviceName: quay + replicas: 1 + template: + metadata: + labels: + app: quay + spec: + containers: + - name: quay + image: registry:2.8.1 + ports: + - containerPort: 5000 + name: quay + volumeMounts: + - name: quay-data + mountPath: /var/lib/registry + - name: timezone + mountPath: /etc/localtime + readOnly: true + - name: quay-cnf + mountPath: /etc/docker/registry/config.yml + subPath: config.yml + volumes: + - name: quay-cnf + configMap: + name: quay-cnf + - name: timezone + hostPath: + path: /usr/share/zoneinfo/Asia/Shanghai + volumeClaimTemplates: + - metadata: + name: quay-data + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 50Gi diff --git a/kubernetes/quay/svc.yaml b/kubernetes/quay/svc.yaml new file mode 100755 index 0000000..7cd6704 --- /dev/null +++ b/kubernetes/quay/svc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: quay + namespace: registry +spec: + selector: + app: quay + ports: + - port: 5000 + targetPort: 5000 diff --git a/kubernetes/registryk8s/config.yml b/kubernetes/registryk8s/config.yml new file mode 100755 index 0000000..63fe84d --- /dev/null +++ b/kubernetes/registryk8s/config.yml @@ -0,0 +1,16 @@ +version: 0.1 +storage: + filesystem: + rootdirectory: /var/lib/registry + delete: + enabled: true + maintenance: + uploadpurging: + enabled: true + age: 168h + dryrun: false + interval: 1m +http: + addr: 0.0.0.0:5000 +proxy: + remoteurl: https://registry.k8s.io \ No newline at end of file diff --git a/kubernetes/registryk8s/kustomization.yaml b/kubernetes/registryk8s/kustomization.yaml new file mode 100755 index 0000000..1d842d3 --- /dev/null +++ b/kubernetes/registryk8s/kustomization.yaml @@ -0,0 +1,10 @@ +resources: +- sts.yaml +- svc.yaml + +configMapGenerator: +- name: registryk8s-cnf + files: + - config.yml + options: + disableNameSuffixHash: true \ No newline at end of file diff --git a/kubernetes/registryk8s/sts.yaml b/kubernetes/registryk8s/sts.yaml new file mode 100755 index 0000000..3257c47 --- /dev/null +++ b/kubernetes/registryk8s/sts.yaml @@ -0,0 +1,46 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: registryk8s + namespace: registry +spec: + selector: + matchLabels: + app: registryk8s + serviceName: registryk8s + replicas: 1 + template: + metadata: + labels: + app: registryk8s + spec: + containers: + - name: registryk8s + image: registry:2.8.1 + ports: + - containerPort: 5000 + name: registryk8s + volumeMounts: + - name: registryk8s-data + mountPath: /var/lib/registry + - name: timezone + mountPath: /etc/localtime + readOnly: true + - name: registryk8s-cnf + mountPath: /etc/docker/registry/config.yml + subPath: config.yml + volumes: + - name: registryk8s-cnf + configMap: + name: registryk8s-cnf + - name: timezone + hostPath: + path: /usr/share/zoneinfo/Asia/Shanghai + volumeClaimTemplates: + - metadata: + name: registryk8s-data + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 50Gi diff --git a/kubernetes/registryk8s/svc.yaml b/kubernetes/registryk8s/svc.yaml new file mode 100755 index 0000000..eca2fe4 --- /dev/null +++ b/kubernetes/registryk8s/svc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: registryk8s + namespace: registry +spec: + selector: + app: registryk8s + ports: + - port: 5000 + targetPort: 5000 diff --git a/readme.md b/readme.md index 1820f59..78ce7ce 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,9 @@ 这是为了方便大家做各个镜像仓库代理的 -### 操作 +### Docker教程 + +进入docker目录 如果你想要启动所有的镜像仓库直接执行 @@ -18,6 +20,10 @@ 每一个镜像仓库对外的端口都是不一样的,当然你也可以使用nginx统一反向代理一下 +### k8s教程 + +都在用k8s了,还想要教程? + ### 注意 大家可以看下配置文件