<bdo id="4g88a"><xmp id="4g88a">
  • <legend id="4g88a"><code id="4g88a"></code></legend>

    基于 Cloudflare Workers 和 cloudflare-docker-proxy 搭建鏡像加速服務

    本文主要介紹了如何基于 Cloudflare Workers 和 cloudflare-docker-proxy 搭建 dockerhub、gcr、quay 等鏡像加速服務。

    最近,受限于各種情況,部分主流鏡像站都關了,為了能夠正常使用,建議自己搭建一個加速器。

    寫文之前,也已經部署好了一個,可以直接使用,具體使用方法跳轉 https://docker.lixd.xyz 或者 使用說明 查看。

    準備工作

    • 1)首先要注冊一個 Cloudflare 賬號
    • 2)Cloudflare 賬號下需要添加一個域名,推薦到萬網注冊一個域名,再轉移到 Cloudflare。
      • 推薦 top、xyz 后綴應該都是首年 7 塊

    部署流程

    修改配置

    首先 fork https://github.com/ciiiii/cloudflare-docker-proxy 倉庫到自己賬號下。

    然后修改 src/index.js,修改內容如下:

    const routes = {
      "docker.mydomain.com": "https://registry-1.docker.io",
      "quay.mydomain.com": "https://quay.io",
      "gcr.mydomain.com": "https://gcr.io",
      "k8s-gcr.mydomain.com": "https://k8s.gcr.io",
      "k8s.mydomain.com": "https://registry.k8s.io",
      "ghcr.mydomain.com": "https://ghcr.io",
      "cloudsmith.mydomain.com": "https://docker.cloudsmith.io",
    };
    

    其中 mydomain.com 就是你的域名,比如我這里用的是 lixd.xyz

    再修改 wrangler.toml,同樣是替換域名

    [env.production]
    name = "cloudflare-docker-proxy"
    routes = [
      { pattern = "docker.mydomain.com", custom_domain = true },
      { pattern = "quay.mydomain.com", custom_domain = true },
      { pattern = "gcr.mydomain.com", custom_domain = true },
      { pattern = "k8s-gcr.mydomain.com", custom_domain = true },
      { pattern = "k8s.mydomain.com", custom_domain = true },
      { pattern = "ghcr.mydomain.com", custom_domain = true },
      { pattern = "cloudsmith.mydomain.com", custom_domain = true },
    ]
    
    [env.production.vars]
    MODE = "production"
    TARGET_UPSTREAM = ""
    
    [env.staging]
    name = "cloudflare-docker-proxy-staging"
    route = { pattern = "docker-staging.mydomain.com", custom_domain = true }
    

    同樣的 mydomain.com 就是你的域名

    最后修改 README.md 中的 Deploy to Cloudflare Workers 圖標對應的 Github 倉庫地址為你 fork 后的倉庫地址,比如 https://deploy.workers.cloudflare.com/?url=https://github.com/lixd/cloudflare-docker-proxy。

    這三個修改都完成后,提交代碼。

    幫助文檔

    為了便于使用,可以在訪問根目錄時返回一個幫助頁面。

    help.html

    新建一個help.html 文件,內容如下:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>鏡像使用說明</title>
        <style>
            body {
                font-family: 'Roboto', sans-serif;
                margin: 0;
                padding: 0;
                background-color: #f4f4f4;
            }
            .header {
                background: linear-gradient(135deg, #667eea, #764ba2);
                color: #fff;
                padding: 20px 0;
                text-align: center;
                box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
                position: relative;
            }
            .github-link {
                position: absolute;
                top: 10px;
                right: 20px;
                color: #fff;
                text-decoration: none;
            }
            .github-icon {
                width: 24px;
                height: 24px;
                vertical-align: middle;
            }
            .container {
                max-width: 800px;
                margin: 40px auto;
                padding: 20px;
                background-color: #fff;
                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
                border-radius: 10px;
            }
            .content {
                margin-bottom: 20px;
            }
            .footer {
                text-align: center;
                padding: 20px 0;
                background-color: #333;
                color: #fff;
            }
            pre {
                background-color: #272822;
                color: #f8f8f2;
                padding: 15px;
                border-radius: 5px;
                overflow-x: auto;
            }
            code {
                font-family: 'Source Code Pro', monospace;
            }
            a {
                color: #4CAF50;
                text-decoration: none;
            }
            a:hover {
                text-decoration: underline;
            }
            @media (max-width: 600px) {
                .container {
                    margin: 20px;
                    padding: 15px;
                }
                .header {
                    padding: 15px 0;
                }
            }
        </style>
        <link  rel="stylesheet">
    </head>
    <body>
    <div class="header">
        <h1>鏡像使用說明</h1>
        <a  target="_blank" class="github-link">
            <img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" alt="GitHub" class="github-icon">
        </a>
    </div>
    <div class="container">
        <div class="content">
            <p>為了加速 Docker 鏡像拉取,你可以使用以下命令設置 registry mirror:</p>
            <pre><code id="registry-config">sudo tee /etc/docker/daemon.json &lt;&lt;EOF
    {
        "registry-mirrors": ["https://{{host}}"]
    }
    EOF
    # 配置完后需要重啟 Docker 服務
    sudo systemctl restart docker
    </code></pre>
            <p>使用該代理從不同的鏡像倉庫拉取鏡像,請參考以下命令:</p>
            <pre><code id="commands">
    # docker pull nginx:latest
    docker pull docker.{{host}}/library/nginx:latest  # 拉取 Docker 官方鏡像
    
    # docker pull quay.io/coreos/etcd:latest
    docker pull quay.{{host}}/coreos/etcd:latest  # 拉取 Quay 鏡像
    
    # docker pull gcr.io/google-containers/busybox:latest
    docker pull gcr.{{host}}/google-containers/busybox:latest  # 拉取 GCR 鏡像
    
    # docker pull k8s.gcr.io/pause:latest
    docker pull k8s-gcr.{{host}}/pause:latest  # 拉取 k8s.gcr.io 鏡像
    
    # docker pull registry.k8s.io/pause:latest
    docker pull k8s.{{host}}/pause:latest  # 拉取 registry.k8s.io 鏡像
    
    # docker pull ghcr.io/github/super-linter:latest
    docker pull ghcr.{{host}}/github/super-linter:latest  # 拉取 GitHub 容器鏡像
    
    # docker pull docker.cloudsmith.io/public/repo/image:latest
    docker pull cloudsmith.{{host}}/public/repo/image:latest  # 拉取 Cloudsmith 鏡像
    </code></pre>
            <p>為了避免 Worker 用量耗盡,你可以手動 pull 鏡像然后 re-tag 之后 push 至本地鏡像倉庫。</p>
        </div>
    </div>
    <div class="footer">
        <p>Powered by Cloudflare Workers</p>
        <p><a  target="_blank">訪問博客 探索云原生</a></p>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const host = window.location.hostname;
            const mainDomain = host.split('.').slice(-2).join('.');
            const registryConfigElement = document.getElementById('registry-config');
            const commandsElement = document.getElementById('commands');
    
            registryConfigElement.innerHTML = registryConfigElement.innerHTML.replace(/{{host}}/g, host);
            commandsElement.innerHTML = commandsElement.innerHTML.replace(/{{host}}/g, mainDomain);
        });
    </script>
    </body>
    </html>
    

    增加路由

    scr/index.js 中增加一條路由,訪問根目錄時就返回這個幫助頁面

    import DOCS from './help.html'
     
    // return docs
    if (url.pathname === "/") {
      return new Response(DOCS, {
        status: 200,
        headers: {
          "content-type": "text/html"
        }
      });
    }
    

    完整內容見:https://github.com/lixd/cloudflare-docker-proxy

    點擊部署

    然后在 Github 界面點擊這個 Deploy to Cloudflare Workers 圖標進行部署,會自動跳轉到 cloudflare,按步驟操作即可,最終會在 Github 倉庫中創建一個 Github Action 來將該倉庫部署到 Cloudflare Workers。

    就像這樣:

    deploy-to-cloudflare.png

    等待部署完成

    可以到 Github 查看 Action 執行進度

    deploy-progress.png

    執行完成后,切換到 Cloudflare Dashboard ,不出意外的話就可以看到剛創建的 Worker 了。

    cloudflare-workers.png

    切換到 Setting,等待 SSL 證書簽發完成即可

    cloudflare-workers-setting.png

    使用說明

    部署完成后,訪問 https://docker.mydomain.com 就可以看到使用說明了。

    比如:https://docker.lixd.xyz

    為了加速 Docker 鏡像拉取,你可以使用以下命令設置 registry mirror:

    sudo tee /etc/docker/daemon.json <<EOF
    {
        "registry-mirrors": ["https://docker.lixd.xyz"]
    }
    EOF
    # 配置完后需要重啟 Docker 服務
    sudo systemctl restart docker
    

    使用該代理從不同的鏡像倉庫拉取鏡像,請參考以下命令:

    # docker pull nginx:latest
    docker pull docker.lixd.xyz/library/nginx:latest  # 拉取 Docker 官方鏡像
    
    # docker pull quay.io/coreos/etcd:latest
    docker pull quay.lixd.xyz/coreos/etcd:latest  # 拉取 Quay 鏡像
    
    # docker pull gcr.io/google-containers/busybox:latest
    docker pull gcr.lixd.xyz/google-containers/busybox:latest  # 拉取 GCR 鏡像
    
    # docker pull k8s.gcr.io/pause:latest
    docker pull k8s-gcr.lixd.xyz/pause:latest  # 拉取 k8s.gcr.io 鏡像
    
    # docker pull registry.k8s.io/pause:latest
    docker pull k8s.lixd.xyz/pause:latest  # 拉取 registry.k8s.io 鏡像
    
    # docker pull ghcr.io/github/super-linter:latest
    docker pull ghcr.lixd.xyz/github/super-linter:latest  # 拉取 GitHub 容器鏡像
    
    # docker pull docker.cloudsmith.io/public/repo/image:latest
    docker pull cloudsmith.lixd.xyz/public/repo/image:latest  # 拉取 Cloudsmith 鏡像
    

    為了避免 Worker 用量耗盡,你可以手動 pull 鏡像然后 re-tag 之后 push 至本地鏡像倉庫。

    FAQ

    Build & Deploy The process '/usr/local/bin/yarn' failed with exit code 1 +1

      ? [ERROR] A request to the Cloudflare API (/accounts/***/workers/scripts/cloudflare-docker-proxy/domains/records) failed.
      
        workers.api.error.origin_conflict_existing_dns_record [code: 100117]
    

    如果提前添加了 DNS 解析則出現這個錯誤,部署之后會自動添加解析記錄,因此部署前不要手動添加記錄。

    如果出現該問題,可以把 DNS 解析記錄刪除后再試。


    如果你對云原生技術充滿好奇,想要深入了解更多相關的文章和資訊,歡迎關注微信公眾號。

    搜索公眾號【探索云原生】即可訂閱


    參考

    cloudflare-docker-proxy

    白嫖Cloudflare Workers 搭建 Docker Hub鏡像加速服務|

    又發掘一個CF的新用法,利用Worker構建Docker Registry Mirror

    Docker 鏡像庫國內加速的幾種方法

    posted @ 2024-06-24 09:25  探索云原生  閱讀(551)  評論(3編輯  收藏  舉報
    免费视频精品一区二区_日韩一区二区三区精品_aaa在线观看免费完整版_世界一级真人片
    <bdo id="4g88a"><xmp id="4g88a">
  • <legend id="4g88a"><code id="4g88a"></code></legend>