docker仓库的工作原理

仓库中的三个角色
index docker 索引服务,负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。
registry docker 仓库,是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过 Index
Auth service 的 Token 的方式进行认证
Registry Client Docker 充当 registry 客户端来维护推送和拉取,以及客户端的授权。
pull 原理
镜像拉取分为以下几步:
1.docker 客户端向 index 发送镜像拉去请求并完成与 index 的认证
2.index 发送认证 token 和镜像位置给 dockerclient
3.dockerclient 携带 token 和根据 index 指引的镜像位置取连接 registry
4.Registry 会根据 client 持有的 token 跟 index 核实身份合法性
5.index 确认此 token 合法性
6.Registry 会根据 client 的请求传递镜像到客户端。
镜像上传的步骤:
1.client 向 index 发送上传请求并完成用户认证
2.index 会发方 token 给 client 来证明 client 的合法性
3.client 携带 index 提供的 token 连接 Registry
4.Registry 向 index 合适 token 的合法性
5.index 证实 token 的合法性
6.Registry 开始接收客户端上传过来的镜像

Docker仓库的拉取(pull)和推送(push)动作是Docker生态系统中非常重要的功能,它们分别用于从远程仓库获取镜像、将本地镜像上传到远程仓库。

Docker仓库拉取(pull)动作原理

  1. 用户认证 :在拉取私有仓库中的镜像之前,通常需要通过docker login命令进行用户认证,提供正确的用户名和密码或访问令牌。

  2. 请求镜像 :用户通过docker pull命令指定要拉取的镜像名称和标签(tag),Docker客户端将这一请求发送给Docker守护进程(Docker Daemon)。

  3. 解析镜像地址:Docker守护进程首先会查询Docker Hub或配置的私有仓库,以找到镜像的完整地址。对于私有仓库,可能还需要配置registry的URL。

  4. 下载镜像层:镜像是由多个层(layer)组成的,每个层都是文件系统的快照。Docker守护进程会从远程仓库中逐个下载这些镜像层。在下载过程中,如果本地已经存在某个层,Docker会复用这一层,以减少下载的数据量。

  5. 解压并保存镜像 :下载完成后,Docker守护进程会将镜像层解压,并保存到本地Docker的存储目录中(通常是/var/lib/docker/下的某个子目录)。

  6. 创建镜像元数据:最后,Docker守护进程会创建镜像的元数据,包括镜像的ID、标签、大小等信息,并将其保存在本地Docker的数据库中。

Docker仓库推送(push)动作原理

  1. 用户认证 :在推送镜像之前,同样需要通过docker login命令进行用户认证,确保只有授权的用户才能将镜像推送到远程仓库。

  2. 标记镜像 :使用docker tag命令为本地镜像添加一个远程仓库的URL和标签(如果镜像尚未标记)。这个标签指定了镜像将被推送到哪个仓库以及在该仓库中的名称和版本。

  3. 推送镜像 :通过docker push命令发起推送请求,Docker客户端将这一请求发送给Docker守护进程。守护进程随后将本地的镜像层打包成一个或多个tar文件,并通过网络传输到远程仓库。

  4. 上传镜像层:在上传过程中,Docker守护进程会逐个上传镜像层。如果远程仓库中已存在某个层,Docker会跳过该层的上传,以节省时间和带宽。

  5. 保存镜像:远程仓库在接收到所有镜像层后,会将其解压并保存在仓库中。同时,仓库还会更新镜像的元数据,包括镜像的ID、标签、大小等信息。

  6. 验证和可用性 :一旦镜像被推送到远程仓库,其他用户就可以通过docker pull命令拉取并使用这个镜像了。远程仓库还会确保镜像的完整性和可用性,以便用户能够随时访问。

总结来说,Docker仓库的拉取和推送动作是通过Docker客户端与Docker守护进程的交互来实现的。这些动作涉及到用户认证、镜像层的下载/上传、解压/打包以及元数据的创建/更新等多个步骤。

相关推荐
cpolar技术支持9 分钟前
Docker 容器启动失败怎么查?端口、日志、权限与网络排障完整教程
linux·docker·容器·cpolar·网络排障
重生之我是Java开发战士2 小时前
【Spring Cloud】Nacos注册中心
后端·spring·spring cloud
一技安身2 小时前
【大模型】Win11 部署 DeepSeek+ RAGFlow0.27.2 (Ollama方案,断网可用)
docker·ai·语言模型
新时代牛马3 小时前
docker run 起不来?从dockerd、containerd 到runc 一条线讲透
运维·docker·容器
JavaPub-rodert3 小时前
Docker 安装 MySQL 完整教程:从零部署数据库,到生产环境持久化配置
数据库·mysql·docker
努力努力再努力wz5 小时前
【Docker 入门系列】:从 Namespace、CGroup 到 LXC:理解容器运行时、rootfs 与 LXC 实战
运维·docker·容器
JavaPub-rodert5 小时前
Docker 多阶段构建:为什么生产环境镜像可以小 90%
运维·docker·容器
PC2005-cloud7 小时前
Qdrant 连接失败排查:localhost 解析到 __1,而 Docker 只绑了 IPv4
运维·docker·容器
喵喵爱自由8 小时前
Deepseek Harness镜像离线部署
docker·ai·语言模型
一技安身8 小时前
【信创】Ollama 手动提取 deepseek-r1:1.5b模型迁移到内网机器
服务器·docker·语言模型