IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    自建Docker镜像加速教程

    ysicing (i@ysicing.me)发表于 2024-01-10 14:03:38
    love 0

    在日常生活工作中, 需要经常访问 hub.docker.com 等诸多镜像仓库,由于技术原因,这些镜像仓库在国内访问体验很差。针对这种情况,国内不少云厂商推出类似服务,采用定时同步的方式来缓存,镜像更新有些滞后性,这里尤其说下阿里云镜像仓库,体验特别差。

    基于上述诸多原因,为了能够顺利使用dockerhub等镜像仓库,我们需要在大洋彼岸部署一个镜像缓存仓库服务。利用 Docker 的开源项目 registry 就可以实现这个需求,registry 不仅可以作为本地私有镜像仓库,还可以作为上游镜像仓库的缓存,也就是 pull through cache

    前提条件

    • 境外独立IP服务器
      • 硬盘比较大
      • 网络质量好
    • 域名

    原理

    就是利用registry缓存机制,通过配置remoteurl参数开启缓存上游镜像仓库

    部署

    这里默认以dockerhub为例其他类似

    k8s部署

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: dockerhub
      name: dockerhub
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: dockerhub
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: dockerhub
        spec:
          containers:
          - image: ysicing/registry
            imagePullPolicy: Always
            name: dockerhub
            ports:
            - containerPort: 5000
              protocol: TCP
            volumeMounts:
            - mountPath: /etc/localtime
              name: localtime
            - mountPath: /var/lib/registry
              name: registry
          dnsConfig:
            nameservers:
            - 8.8.8.8
            - 8.8.4.4
          dnsPolicy: None
     #    nodeSelector:
     #      node-role.kubernetes.io/us: "true"
          restartPolicy: Always
     #    tolerations:
     #    - key: nogfw
     #      operator: Exists
          volumes:
          - hostPath:
              path: /etc/localtime
              type: ""
            name: localtime
          - hostPath:
              path: /var/lib/registry
              type: ""
            name: registry
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: dockerhub
      name: dockerhub
    spec:
      ports:
      - name: http
        port: 5000
        protocol: TCP
        targetPort: 5000
      selector:
        app: dockerhub
      type: ClusterIP
    

    将上面的yaml保存为dockerhub.yaml

    kubectl apply -f dockerhub.yaml
    

    docker部署

    version: '3.9'
    services:
      dockerhub:
        image: ysicing/registry
        container_name: dockerhub
        restart: always
        ports:
          - "5000:5000"
        dns: 8.8.8.8
        volumes:
          - '/data/registry/dockerhub:/var/lib/registry'
    

    将上面的文件保存为docker-compose.yaml

    docker compose up -d
    

    配置caddy

    # /etc/caddy/h.caddy
    h.ysicing.net {
    tls root@ysicing.net
    reverse_proxy http://10.143.140.182:5000
    }
    

    其中10.143.140.182为我的k8s service ip可以根据自己的情况改成相对应的ip

    验证

    docker pull h.ysicing.net/ysicing/debian
    

    缓存其他镜像仓库

    原理类似,如需要缓存gcr.io 配置相关环境变量即可 PROXY_REMOTE_URL

    - env:
      - name: PROXY_REMOTE_URL
        value: gcr.io
      image: ysicing/registry
    

    运行时配置

    这里以docker和containerd配置示例

    Docker

    Docker 可以修改配置文件 /etc/docker/daemon.json,添加下面的内容:

    {
      "registry-mirrors": [  "https://h.ysicing.net"],
      "data-root": "/data/docker",
      "bip": "169.254.123.1/24",
      "max-concurrent-downloads": 10,
      "live-restore": true,
      "log-driver": "json-file",
      "log-level": "warn",
      "log-opts": {
        "max-size": "30m",
        "max-file": "3"
      },
      "storage-driver": "overlay2"
    }
    

    重启docker后,可以直接拉取镜像,可以不指定代理服务器

    docker pull ysicing/debian
    docker pull h.ysicing.net/ysicing/debian
    

    Containerd

    这里以k3s的containerd为例哈, 配置文件为/etc/rancher/k3s/registries.yaml

    mirrors:
      docker.io:
        endpoint:
          - "https://h.ysicing.net"
    

    缓存清理

    比较暴力,定时删除持久化目录并重启

    SLA

    目前免费提供一个https://h.ysicing.net, 但是不保证长期使用,如果想长期使用可以考虑赞助我一下哈哈哈(看使用量,目前大概有7、8个人在用非常稳定😄)

    其他说明

    • 镜像由上游维护,不保证其安全性
    • 使用本服务时已经具备完全民事行为能力。如您不是完全民事行为能力人,请在法定监护人监督下,访问、使用本服务。否则由此导致的一切后果,由您及您的监护人承担`
    • 如果发现有问题,请留言反馈

    参考文档

    Registry as a pull through cache



沪ICP备19023445号-2号
友情链接