docker镜像源
目录
简介
为什么会有这篇文章, 是因为我总是会遇到 docker, Containerd, k8s, minikube 等等网络问题.
统一在这里进行测试解决, 并且做成可用的方案. 工作和学习中无限使用!
搭建 registry
registry-demo:
restart: always
image: registry:2
ports:
- 5000:5000
volumes:
- /data/registry:/var/lib/registry
#todo/笔记 !!!!!!
- 搭建多个站点的 registry
- Registery 全部走 clash 代理! 因为域名确认, 所以这里的 url 是能够确认的!
- Nginx 域名代理
- Containerd, k 8 s, docker, minikube 统一都走 nginx 不同域名.
- cf-worker代理
- 用 horbar 或者 Nexus 来代理,缓存镜像?减少运行时的配置复杂度,统一管理
可以参考, 做个 k 3 d 的教程?! k8s 代理问题一站式解决 - 知乎
公共镜像源
配置示例 /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerproxy.net",
"https://dockerpull.org"
]
}
镜像下载流程
- Docker 发送
image名称:tag
到 registry 请求manifest.list
数据, registry 返回一个不同架构的列表 - 拿到
linux+amd64
的image-digest
, 请求服务器manifest
数据 config.digest
就是你本地docker images
中的docker id
. 如果本地存在就不会再拉取镜像- 镜像不存在则继续查看是否有 layers 已经存在, 存在的就不会去下载
- 通过带上
layersDigest
请求 registry, 下载不存在的 layers
验证镜像一致性
这里拿 nginx:1.24
来举例.
# 从网易源拉取镜像,提示repo-digest值
docker pull hub-mirror.c.163.com/library/nginx:1.24
Digest: sha256:a195f9fb6503531660b25f9aeefef1f48bbaf56f46da04bffe1568abb3d3aff6
# 请求镜像源
curl -v --location 'https://hub-mirror.c.163.com/v2/library/nginx/manifests/1.24' \
--header 'Accept: application/vnd.docker.distribution.manifest.list.v2+json'
# 在返回的数据中:
# 1 header的Docker-Content-Digest与上面repo-digest一致 sha256:a195f9fb6503531660b25f9aeefef1f48bbaf56f46da04bffe1568abb3d3aff6
# 2 找到对应架构的image-digest用于在dockerhub进行核对
# 例如amd64,linux的digest为
# sha256:4a1d2e00b08fce95e140e272d9a0223d2d059142ca783bf43cf121d7c11c7df8
开始核对. 打开 DockerHub的站点,可以发现 image-digest
匹配.
而 image-digest
是镜像 manifest 的 sha256 的哈希值. 而 manifest 记录着镜像每一层的 layers 哈希值.
也就是说, 网易源和 dockerhub 的每一层 layers 完全一致.
镜像 tag 脚本
docker login --username=你的用户名 registry.cn-shanghai.aliyuncs.com
# 输入密码
docker tag 镜像id xxx.com/a/b:v1
docker push xxx.com/a/b:v1
或者
for i in 镜像名1 镜像名2 镜像名3
do
docker pull $i
docker tag $i 镜像源.com/xxx/$i
docker push 镜像源.com/xxx/$i
docker rmi $i
done