GithubHelp home page GithubHelp logo

daocloud / public-image-mirror Goto Github PK

View Code? Open in Web Editor NEW
4.1K 33.0 636.0 586.99 MB

很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。

License: Apache License 2.0

Shell 100.00%
mirror speedup

public-image-mirror's Introduction

public-image-mirror

Sync

Sync: 定期同步列表里的 image tag 的同步率, 只要 tag 存在就是同步的.

由于近期使用量剧增, 为保证大多数的可用性

  • 白名单 & 限流 & 降级 的公开信息 #2328
  • 如有疑问请咨询 #4183

背景 & 目标

很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。

  • 一个简洁有效的方法能够加速这些包。简洁的名称映射
  • 易于添加,添加新的包,不需要去修改代码。
  • 稳定可靠,更新实时。每天检查同步情况。
  • 此项目仅是源镜像仓库 (Registry) 的 Mirror
    • 所有 hash(sha256) 均和源保持一致 (懒加载机制)。
    • 由于缓存的存在, 可能存在 1 小时的延迟。
    • 如超过 1 小时还未更新, 估计是国际带宽挂了。
  • 对于 镜像层(blob) 会缓存在第三方对象存储上
    • 当前暂未对内容做任何检测, 计划会添加检测。

快速开始

docker run -d -P m.daocloud.io/docker.io/library/nginx

使用方法

增加前缀 (推荐方式)。比如:

              docker.io/library/busybox
                 |
                 V
m.daocloud.io/docker.io/library/busybox

或者 支持的镜像仓库 的 前缀替换 就可以使用。比如:

           docker.io/library/busybox
             |
             V
docker.m.daocloud.io/library/busybox

单次单镜像同步

!!!!!!!!!!!!!!!!!!!!!!!!强烈推荐!!!!!!!!!!!!!!!!!!!!!!!!

您可以根据 镜像同步 Issue 模板 创建一个 Issue, 将会有机器人帮您优先主动同步指定的镜像

原先已经在下的镜像还是会继续走原来的, 需要重启 docker 再重新拉取才能走已经同步好的缓存过, 所以推荐先单次同步再尝试拉取 对于 latest 这种经常内容会发生变更的 tag 变更后会需要重新同步

懒加载

仅推荐用于小于 20MiB 的镜像 这条通道主要用于保持 image 是最新的, 每次拉取都会检查是否和上游保持同步

如果您看到下没有进度这是由于带宽有限只要有几人在下较大的文件就会阻塞后续的下载, 可以尝试单次单镜像同步

就算没同步也能 直接拉取, 初次拉取会比已经同步过的慢.

所有懒加载 带宽

  • 国际带宽 6 * 30 Mbps

定期同步列表 (不推荐)

强烈建议使用单次单镜像同步

mirror.txt

如果想要新增, 提 PR 修改即可。例如 PR#1, 并请在 PR 提交前排序: ./hack/fmt.sh mirror.txt

支持前缀替换的 Registry (不推荐)

推荐使用添加前缀的方式.

前缀替换的 Registry 的规则, 这是人工配置的, 有需求提 Issue.

源站 替换为 备注
cr.l5d.io l5d.m.daocloud.io 将废弃请使用添加前缀的方式
docker.elastic.co elastic.m.daocloud.io
docker.io docker.m.daocloud.io
gcr.io gcr.m.daocloud.io
ghcr.io ghcr.m.daocloud.io
k8s.gcr.io k8s-gcr.m.daocloud.io k8s.gcr.io 以被迁移到 registry.k8s.io
registry.k8s.io k8s.m.daocloud.io
mcr.microsoft.com mcr.m.daocloud.io
nvcr.io nvcr.m.daocloud.io
quay.io quay.m.daocloud.io
registry.jujucharms.com jujucharms.m.daocloud.io 将废弃请使用添加前缀的方式
rocks.canonical.com rocks-canonical.m.daocloud.io 将废弃请使用添加前缀的方式

最佳实践

  • 通过 加速 安装 kubeadm
kubeadm config images pull --image-repository k8s-gcr.m.daocloud.io
  • 通过 加速 安装 kind
kind create cluster --name kind --image m.daocloud.io/docker.io/kindest/node:v1.22.1
  • 通过 加速 部署 应用(这里以 Ingress 为例)
wget -O image-filter.sh https://github.com/DaoCloud/public-image-mirror/raw/main/hack/image-filter.sh && chmod +x image-filter.sh

wget -O deploy.yaml https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/baremetal/deploy.yaml

cat ./deploy.yaml | ./image-filter.sh | kubectl apply -f -
  • Docker 加速

添加到 /etc/docker/daemon.json

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io"
  ]
}

[友情链接]加速三剑客

贡献者

Made with contrib.rocks.

public-image-mirror's People

Contributors

chaunceyjiang avatar cyclinder avatar drivebyer avatar erikjiang avatar fkajerry avatar floatxd avatar github-actions[bot] avatar haleygo avatar huoyinghao avatar jaredtan95 avatar kebe7jun avatar kerthcet avatar kyncc avatar learner0810 avatar lengrongfu avatar lou-lan avatar muma378 avatar pacoxu avatar panpan0000 avatar scydas avatar ssmallmonster avatar wawa0210 avatar weizhoublue avatar wilsonwu avatar wzshiming avatar xulongju avatar yankay avatar ye-ting avatar zgfh avatar zhuohuouoo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

public-image-mirror's Issues

Failed to pull

docker pull m.daocloud.io/registry.k8s.io/build-image/kube-cross:v1.26.0-go1.19.4-bullseye.1
v1.26.0-go1.19.4-bullseye.1: Pulling from registry.k8s.io/build-image/kube-cross
4948a51a9a3f: Pull complete 
b4da1b3775b3: Pull complete 
6efc1b20f435: Pull complete 
4c81e9b9b636: Pull complete 
cba7ab2dd679: Pull complete 
3ba0ec045e9d: Downloading [=================================================> ]  114.1MB/115.2MB
0a317f9f8ea9: Download complete 
4f4fb700ef54: Download complete 
51f8d15afdec: Download complete 
74d5db56232b: Download complete 
133265ae10e5: Downloading 
50bed5563018: Downloading 
02ca928c3ed2: Download complete 
be0ef21e3e6d: Download complete 
error parsing HTTP 403 response body: invalid character 'c' looking for beginning of value: "connecting to docker-cn.cn-sh2.ufileos.com:80: connecting to 106.75.235.58:80: dial tcp 106.75.235.58:80: i/o timeout"

感觉 us3 的服务挂了

/bug

unable to pull ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.34b0

$ docker pull ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.34b0
Error response from daemon: manifest for ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.34b0 not found: manifest unknown: manifest unknown

$ docker pull ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:0.3.1-beta.1
Error response from daemon: manifest for ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:0.3.1-beta.1 not found: manifest unknown: manifest unknown

failed to sync veth-plugin

➜   docker pull ghcr.io/spidernet-io/cni-plugins/veth:v0.1.1-amd64
v0.1.1-amd64: Pulling from spidernet-io/cni-plugins/veth
213ec9aee27d: Already exists
ce898f80885e: Pull complete
470881f24a7d: Pull complete
Digest: sha256:3aab10cf52cb49c656ee081b40e8379f15a790416277a259e7d9e2659b2e6fa1
Status: Downloaded newer image for ghcr.io/spidernet-io/cni-plugins/veth:v0.1.1-amd64
ghcr.io/spidernet-io/cni-plugins/veth:v0.1.1-amd64

➜   docker pull ghcr.m.daocloud.io/spidernet-io/cni-plugins/veth:v0.1.1-amd64
Error response from daemon: manifest for ghcr.m.daocloud.io/spidernet-io/cni-plugins/veth:v0.1.1-amd64 not found: manifest unknown: manifest unknown

pull image very slow

I pull the image of [docker.m.daocloud.io/redis:7.2-rc2-bookworm],the pull rate of the part layer[layer-sha256:edc694ca19a6c032cd855e0b47af01def1a682deb1fb14bf1e417437ab7c69c3] is very slow.
And the other parts are both very fast.
I don't know why the slow rate.
1111
I don't think it is because local network.

elastic.m.daocloud.io 貌似不生效

in k8s:

Failed to pull image "elastic.m.daocloud.io/elasticsearch/elasticsearch:7.16.2": rpc error: code = Unknown desc = Error response from daemon: manifest for elastic.m.daocloud.io/elasticsearch/elasticsearch:7.16.2 not found: manifest unknown: manifest unknown

for docker pull:

docker pull elastic.m.daocloud.io/docker.elastic.co/eck/eck-operator:1.9.1
Error response from daemon: manifest for elastic.m.daocloud.io/docker.elastic.co/eck/eck-operator:1.9.1 not found: manifest unknown: manifest unknown

同步情况日报(不要删)

此 ISSUE 用于机器人汇报同步情况

同步架构:

SRC => MIDDLE(jp) => DEST(cn)。

一天 = 86400s

SYNC IMAGE

SYNC docker.io/library/busybox:latest

Not all tags being sync ? if so, should we document it ?

for example. minio/minio:RELEASE.2022-07-29T19-40-48Z is not sync.
If it's expected behavior, I guess some regular expression filter it out ? (maybe only sync those tags with vx.y.z ?)
if so ,please write this NOTES down in documents to avoid confusion.

# docker pull docker.m.daocloud.io/minio/minio:RELEASE.2022-07-29T19-40-48Z
Error response from daemon: manifest for docker.m.daocloud.io/minio/minio:RELEASE.2022-07-29T19-40-48Z not found: manifest unknown: manifest unknown

image sync error

gcr.m.daocloud.io/tekton-releases/github.com/tektoncd/dashboard/cmd/dashboard:v0.29.2@sha256:67425f5fa32c591578ba6c8b6d4d6a135f8ca195745e023f3f311e3f1ee6ea37 is not work

manifest unknown: manifest unknown

docker pull quay.m.daocloud.io/iovisor/bcc:latest
Error response from daemon: manifest for quay.m.daocloud.io/iovisor/bcc:latest not found: manifest unknown: manifest unknown

深度同步 和 检查深度同步 的 CI 执行速度提升

找个方式提升镜像深度对比的速度

造成的影响

  • 一些固定名字的镜像(如 latest , v1等) 可能不会更新到

已经采取的优化措施

  • 跳过明确不会更新的镜像(如 v1.0.0 等明确版本号的) 的深度对比

/bug
/assign

SYNC IMAGE

SYNC docker.io/library/busybox:latest

Add kubeflow:v1.7 related images

gcr.io/arrikto/kubeflow/oidc-authservice

gcr.io/ml-pipeline/api-server
gcr.io/ml-pipeline/cache-server
gcr.io/ml-pipeline/frontend
gcr.io/ml-pipeline/metadata-writer
gcr.io/ml-pipeline/minio
gcr.io/ml-pipeline/mysql
gcr.io/ml-pipeline/persistenceagent
gcr.io/ml-pipeline/scheduledworkflow
gcr.io/ml-pipeline/viewer-crd-controller
gcr.io/ml-pipeline/visualization-server
gcr.io/ml-pipeline/workflow-controller
gcr.io/tfx-oss-public/ml_metadata_store_server
docker.io/kubeflowkatib/enas-cnn-cifar10-cpu
docker.io/kubeflowkatib/katib-controller
docker.io/kubeflowkatib/katib-db-manager
docker.io/kubeflowkatib/katib-ui
docker.io/kubeflowkatib/mxnet-mnist
docker.io/kubeflowkatib/pytorch-mnist-cpu
docker.io/kubeflownotebookswg/centraldashboard
docker.io/kubeflownotebookswg/jupyter-web-app
docker.io/kubeflownotebookswg/kfam
docker.io/kubeflownotebookswg/notebook-controller
docker.io/kubeflownotebookswg/poddefaults-webhook
docker.io/kubeflownotebookswg/profile-controller
docker.io/kubeflownotebookswg/tensorboard-controller
docker.io/kubeflownotebookswg/tensorboards-web-app
docker.io/kubeflownotebookswg/volumes-web-app
docker.io/metacontrollerio/metacontroller
docker.io/seldonio/mlserver

SYNC IMAGE docker.io/library/busybox:latest

SYNC docker.io/library/busybox:latest

请修改上面的内容,将 docker.io/library/busybox:latest 改为你要同步的镜像
注意, 标题不要改哦

或者可以直接使用命令

gh -R DaoCloud/public-image-mirror issue create \
  --title "SYNC IMAGE" \
  --body "SYNC docker.io/library/busybox:latest"

无法拉取redis:7.0.4-alpine

redis已经在mirror.list里了
但是

docker pull docker.m.daocloud.io/library/redis:7.0.4-alpine
7.0.4-alpine: Pulling from library/redis
no matching manifest for linux/amd64 in the manifest list entries
docker pull docker.m.daocloud.io/redis:7.0.4-alpine
7.0.4-alpine: Pulling from redis
no matching manifest for linux/amd64 in the manifest list entries

直接拉可以

docker pull redis:7.0.4-alpine
7.0.4-alpine: Pulling from library/redis
Digest: sha256:dc1b954f5a1db78e31b8870966294d2f93fa8a7fba5c1337a1ce4ec55f311bc3
Status: Image is up to date for redis:7.0.4-alpine
docker.io/library/redis:7.0.4-alpine

增加健康检查脚本

当 镜像拉取失败,报错为 500 Internal Server Error, 通常是因为 ufile 故障导致的。

此时 比较简单的解决方法是 重启对应的容器。(需要验证)
镜像仓库不能自动恢复。

必要时需要重启docker 😓

短域名

m.daocloud.io/ 的前缀感觉有点长啊, 是不是搞一个短域名, 让使用起来更加方便

Image Pull Failure: 503 Error Encountered

I'm encountering a '503 Service Temporarily Unavailable' error when I attempt to pull any image using ctr. Please take a look.

ctr image pull m.daocloud.io/gcr.io/ml-pipeline/mysql:5.6
m.daocloud.io/gcr.io/ml-pipeline/mysql:5.6:                                       resolved       |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:a5c683ba65b44dbd7fd09e62c1ab23def0f3957bab0f670ad5c92693ae230a4f: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:8a01a78fff5a38ac5f471df1ff3dc4e9f1ece82eae5e9d55555ad6053d7dc5c5:    downloading    |--------------------------------------|    0.0 B/121.0 B
config-sha256:3ed1080b793fc4a10cab741a04ce090caf1ad2932cbcc679b6587624af9f6157:   downloading    |--------------------------------------|    0.0 B/6.8 KiB
layer-sha256:fc7181108d403205fda45b28dbddfa1cf07e772fa41244e44f53a341b8b1893d:    waiting        |--------------------------------------|
layer-sha256:787a24c80112f841ccb00f57af3f3ee555c5a758adc0c70b4488834ca42c12cc:    waiting        |--------------------------------------|
layer-sha256:a08cb039d3cd3acf3a5bf2ed1ff76fc1eb7ea0c6db0689de8c34f5f7a2138bd6:    downloading    |--------------------------------------|    0.0 B/4.3 MiB
layer-sha256:4f7d35eb5394caab0079bcfc00af4bd30e83cc1b47a201a78c203efdff5649c8:    downloading    |--------------------------------------|    0.0 B/1.2 MiB
layer-sha256:5aa21f895d959ad145996cdc9696faef2c27111fa6b46b16078f21566eb127c7:    waiting        |--------------------------------------|
layer-sha256:345649b63bc3b040f1ec6621892ad657005c5c6f707e5d8fcc1d1d51b5b7eb21:    waiting        |--------------------------------------|
layer-sha256:591a87fc59ec1810ebb02cfb88a30efa5bd8ea6e1208aad23086607645124662:    waiting        |--------------------------------------|
layer-sha256:6019ecdb5901fcfab79fc7ea21ed7e1c6a861d8098a35b61314da24a007e98eb:    waiting        |--------------------------------------|
layer-sha256:aadc682b6a759c6d9f572a665a1da3eae0603b509ff06d5f974a1c74616e9638:    waiting        |--------------------------------------|
layer-sha256:e0969183ab5f6f774417a2a4035c694577778233f0af2cf1a1b9699108f35092:    downloading    |--------------------------------------|    0.0 B/2.8 KiB
elapsed: 3.4 s                                                                    total:  2.6 Ki (770.0 B/s)
ctr: failed to copy: httpReadSeeker: failed open: unexpected status code https://m.daocloud.io/v2/gcr.io/ml-pipeline/mysql/blobs/sha256:591a87fc59ec1810ebb02cfb88a30efa5bd8ea6e1208aad23086607645124662: 503 Service Temporarily Unavailable

/bug

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.