了解docker架构

搭建好环境后,要先了解docker的架构,知道有哪些模块,然后挑感兴趣的模块学习。源码阅读环境我前面的文章有写。

1、Docker有哪些模块

下图取自于微信读书里面的《Docker源码分析》一书

在这里插入图片描述

docker架构中主要的模块有:DockerClient、DockerDaemon、Docker Registry、Graph、Driver、libcontainer以及Docker Container。

以下是各个模块的功能说明

1.1. Docker Client

在这里其实就是指的docker命令行 cli。用户通过 Docker Client 发起命令,如 docker rundocker pulldocker build 等。本质是将用户的命令翻译为 HTTP API 请求,发送给 Docker Daemon。

1.2. Docker Daemon

其实就是我们常说的docker守护进程,也就是我们之前编译的dockerd。它负责接收来自 Docker Client 的请求。

  • 管理容器的创建、运行、销毁,以及镜像的下载和存储。
  • 提供 Docker API,作为客户端和其他工具(如 Kubernetes)与 Docker 交互的接口。
  • 协调其他模块(如存储驱动、网络等)完成用户请求。

1.3. Docker Registry

用于存储和分发 Docker 镜像。Docker Client 可以通过 docker pull 从 Registry 拉取镜像,或通过 docker push 将镜像上传到 Registry。

1.4. Graph

Graph 是 Docker 用于管理镜像和容器分层存储的逻辑组件。它的主要功能由 GraphDriver(存储驱动) 和相关模块实现,负责文件系统操作、数据复用以及镜像和容器元数据管理。虽然 Docker 的文档中不直接提到 “Graph” 作为模块名称,但这一逻辑是 Docker 分层存储机制的核心。

1.5. Driver

Driver是Docker架构中的驱动模块。通过Driver驱动,Docker可以实现对Docker容器运行环境的定制,定制的维度主要有网络环境、存储方式以及容器执行方式。需要注意的是,Docker运行的生命周期中,并非用户所有的操作都是针对Docker容器的管理,同时包括用户对Docker运行信息的获取,还包括Docker对Graph的存储与记录等。

1.6. libcontainer

Docker 用来与容器功能(如 cgroups、namespace、AppArmor、seccomp 等)交互的库。通过直接调用 Linux 内核的低级 API 创建和管理容器。是一个轻量级、高性能的运行时,后来被 Docker 的更通用运行时工具(如 containerd 和 runc)替代,但仍是核心功能的基础。

1.7. Docker Container

经过一系列组件的配置与封装最终运行起来的进程就是Container。

2、查看API对应的逻辑

docker是CS架构,当我们在命令行执行docker命令的时候,其实就是将请求封装成rest请求发送给docker的守护进程, 由守护进程执行对应的操作。

因此我们要知道我们执行docker命令的时候,对应API是啥。

debug模式启动docker守护进程(dockerd)

./bundles/binary-daemon/dockerd --debug

启动完成后会等待请求,如下图所示,可以看到守护进程有哪些api
在这里插入图片描述

然后执行docker命令

./build/docker info

再看守护进程的后台输出
在这里插入图片描述

v1.48后面就是对应的API, 在代码中搜索,找到像下面这样的
在这里插入图片描述

跳转就找到对应的处理逻辑了
在这里插入图片描述

3、docker官方API文档

https://docs.docker.com/reference/api/engine/

在这里插入图片描述

这里可以看到各个版本的API介绍以及介绍如何用SDK去编码实现docker的自动化运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值