自建Docker镜像加速教程
在日常生活工作中, 需要经常访问 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个人在用非常稳定😄)
其他说明
- 镜像由上游维护,不保证其安全性
- 使用本服务时已经具备完全民事行为能力。如您不是完全民事行为能力人,请在法定监护人监督下,访问、使用本服务。否则由此导致的一切后果,由您及您的监护人承担`
- 如果发现有问题,请留言反馈