dyrnq/mrc

By dyrnq

Updated 5 months ago

https://github.com/dyrnq/mrc

Image
Networking
Developer tools
0

770

dyrnq/mrc repository overview

multi-registry-cache

Inspired by obeone/multi-registry-cache and archef2000/rathole-docker

feature

see Dockerfile

usage

eg.

mkdir -p $HOME/mrc_data
REG_ENV="HTTP_PROXY=\"http://192.168.1.100:9119\",HTTPS_PROXY=\"http://192.168.1.100:9119\",NO_PROXY=\"127.0.0.1,localhost\""
docker run -d \
--name mrc \
--restart always \
--env REG_NAME_0="docker.io" \
--env REG_PORT_0="5000" \
--env REG_PROXY_REMOTEURL_0="https://registry-1.docker.io" \
--env REG_REDIS_ADDR_0="127.0.0.1:6379" \
--env REG_REDIS_DB_0="0" \
--env REG_ENV_0="${REG_ENV}" \
--env REG_NAME_1="registry.k8s.io" \
--env REG_PORT_1="5001" \
--env REG_PROXY_REMOTEURL_1="https://registry.k8s.io" \
--env REG_REDIS_ADDR_1="127.0.0.1:6379" \
--env REG_REDIS_DB_1="1" \
--env REG_ENV_1="${REG_ENV}" \
--env REG_NAME_2="k8s.gcr.io" \
--env REG_PORT_2="5002" \
--env REG_PROXY_REMOTEURL_2="https://k8s.gcr.io" \
--env REG_REDIS_ADDR_2="127.0.0.1:6379" \
--env REG_REDIS_DB_2="2" \
--env REG_ENV_2="${REG_ENV}" \
--env REG_NAME_3="gcr.io" \
--env REG_PORT_3="5003" \
--env REG_PROXY_REMOTEURL_3="https://gcr.io" \
--env REG_REDIS_ADDR_3="127.0.0.1:6379" \
--env REG_REDIS_DB_3="3" \
--env REG_ENV_3="${REG_ENV}" \
-p 5000:5000 \
-p 5001:5001 \
-p 5002:5002 \
-p 5003:5003 \
-v $HOME/mrc_data:/data \
dyrnq/mrc:latest


## docker pull registry.k8s.io/kube-apiserver:v1.29.0
docker pull 127.0.0.1:5001/kube-apiserver:v1.29.0

## docker pull k8s.gcr.io/pause:3.3
docker pull 127.0.0.1:5002/pause:3.3

## docker pull gcr.io/cadvisor/cadvisor
docker pull 127.0.0.1:5003/cadvisor/cadvisor

pstree -lsa
supervisord /usr/bin/supervisord --nodaemon --configuration /etc/supervisord.conf
  ├─redis-server
  │   └─5*[{redis-server}]
  ├─registry serve /etc/distribution/docker.io/config.yml
  │   └─8*[{registry}]
  ├─registry serve /etc/distribution/k8s.gcr.io/config.yml
  │   └─9*[{registry}]
  └─registry serve /etc/distribution/registry.k8s.io/config.yml
      └─10*[{registry}]


root@34b4b2dec8a3:/# tree -L 2 /data/
/data/
├── redis
│   ├── data
│   ├── log
│   └── redis.conf
└── registry
    ├── docker.io
    ├── k8s.gcr.io
    └── registry.k8s.io

root@34b4b2dec8a3:/# tree /etc/supervisor/conf.d/
/etc/supervisor/conf.d/
├── redis-server.ini
├── reg-docker.io.ini
├── reg-k8s.gcr.io.ini
└── reg-registry.k8s.io.ini

1 directory, 4 files

envs description

0~15 because redis defaults to 16 databases, use REDIS_DATABASES env , eg. --env REDIS_DATABASES=32.

namedescriptiondefaultrequired
REG_NAME_namey
REG_PORT_porty
REG_PROXY_REMOTEURL_proxy remoteurly
REG_PROXY_USERNAME_proxy usernamen
REG_PROXY_PASSWORD_proxy passwordn
REG_PROXY_TTL_proxy ttl168hn
REG_REDIS_ADDR_redis addry
REG_REDIS_PASSWORD_redis passwordn
REG_LOG_LEVEL_log levelinfon
REG_ENV_distribution envn
REG_STORAGE_storagefilesystemy
REG_STORAGE_S3_ACCESSKEY_s3 accesskeyy(s3)
REG_STORAGE_S3_SECRETKEY_s3 secretkeyy(s3)
REG_STORAGE_S3_REGIONENDPOINT_s3 regionendpointy(s3)
REG_STORAGE_S3_REGION_s3 regionus-east-1n(s3)
REG_STORAGE_S3_BUCKET_s3 buckety(s3)
REG_STORAGE_S3_ROOTDIRECTORY_s3 rootdirectory/registry/${!name}n(s3)
REDIS_DATABASESredis databases16n

mirrors

docker
cat /etc/docker/daemon.json 
{    
    "registry-mirrors": [ "http://127.0.0.1:5000" ]
}

ref

containerd
mkdir -p /etc/containerd/certs.d/registry.k8s.io
cat > /etc/containerd/certs.d/registry.k8s.io/hosts.toml<<EOF
server = "https://registry.k8s.io"
[host."http://127.0.0.1:5001"]
  capabilities = ["pull","resolve"]
  skip_verify = true
[host."https://k8s.m.daocloud.io"]
  capabilities = ["pull","resolve"]
[host."https://registry.k8s.io"]
  capabilities = ["pull","resolve","push"]
EOF

ref

ref

Tag summary

Content type

Image

Digest

sha256:4d39e7b10

Size

118.6 MB

Last updated

5 months ago

docker pull dyrnq/mrc:2.8.3