图解 Docker 架构,还有谁不会?(1)

简介: 图解 Docker 架构,还有谁不会?(1)

01 Docker 的总体架构

Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,模块各司其职。下图是它的总体架构图:

5f6a7a32968b4057b39d5b442d1b2883.jpg1 用户是使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者。


2 Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。


3 Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。


4 Job 的运行过程中,当需要容器镜像时,则从 Docker Registry 中下载镜像,并通过镜像管理驱动 Graphdriver 将下载镜像以 Graph 的形式存储。


5 当需要为 Docker 创建网络环境时,通过网络管理驱动 Networkdriver 创建并配置 Docker容器网络环境。


6 当需要限制 Docker 容器运行资源或执行用户指令等操作时,则通过 Execdriver 来完成。


7 Libcontainer 是一项独立的容器管理包,Networkdriver 以及 Execdriver 都是通过 Libcontainer 来实现具体对容器进行的操作。


02 Docker 各模块组件分析

2.1 Docker Client「发起请求」

1 Docker Client 是 和 Docker Daemon 建立通信的客户端。用户使用的可执行文件为 docker(一个命令行可执行文件),docker 命令使用后接参数的形式来实现一个完整的请求命令(例如:docker images,docker 为命令不可变,images 为参数可变)。


2 Docker Client 可以通过以下三种方式和 Docker Daemon 建立通信:tcp://host:port、unix://pathtosocket 和 fd://socketfd


3 Docker Client 发送容器管理请求后,由 Docker Daemon 接受并处理请求,当 Docker Client 接收到返回的请求相应并简单处理后,Docker Client 一次完整的生命周期就结束了。(一次完整的请求:发送请求→处理请求→返回结果),与传统的 C/S 架构请求流程并无不同。


2.2 Docker Daemon(后台守护进程)

Docker daemon 架构图

bb779e20d0c745d082cca8ceb9a0db48.jpgDocker Server 架构图

0f358c79c57f42eeab39111665b9ebc8.jpg

1 Docker Server 相当于 C/S 架构的服务端。功能为接受并调度分发 Docker Client 发送的请求。接受请求后,Docker Server 通过路由与分发调度,找到相应的 Handler 来执行请求。


2 在 Docker 的启动过程中,通过包 gorilla/mux 创建了一个 mux.Router 来提供请求的路由功能。在 Golang 中 gorilla/mux 是一个强大的 URL 路由器以及调度分发器。该 mux.Router 中添加了众多的路由项,每一个路由项由 HTTP 请求方法(PUT、POST、GET 或DELETE)、URL、Handler 三部分组成。


3 创建完 mux.Router 之后,Docker 将 Server 的监听地址以及 mux.Router 作为参数来创建一个 httpSrv=http.Server{},最终执行 httpSrv.Serve() 为请求服务。


4 在 Docker Server 的服务过程中,Docker Server 在 listener 上接受 Docker Client 的访问请求,并创建一个全新的 goroutine 来服务该请求。在 goroutine 中,首先读取请求内容并做解析工作,接着找到相应的路由项并调用相应的 Handler 来处理该请求,最后 Handler 处理完请求之后回复该请求。


2.3 Docker Engine

5 Docker Engine 是 Docker 架构中的运行引擎,同时也 Docker 运行的核心模块。它扮演 Docker Container 存储仓库的角色,并且通过执行 Job 的方式来操纵管理这些容器。


6 在 Docker Engine 数据结构的设计与实现过程中,有一个 Handler 对象。该 Handler 对象存储的都是关于众多特定 Job 的 Handler 处理访问。举例说明: Docker Engine 的Handler 对象中有一项为:{“create”: daemon.ContainerCreate,},则说明当名为”create” 的 Job 在运行时,执行的是 daemon.ContainerCreate 的 Handler。


Job

1 一个 Job 可以认为是 Docker 架构中 Docker Engine 内部最基本的工作执行单元。Docker 可以做的每一项工作,都可以抽象为一个 Job。例如:在容器内部运行一个进程,这是一个 Job;创建一个新的容器,这是一个 Job。Docker Server 的运行过程也是一个 Job,名为 ServeApi。


2 Job 的设计者,把 Job 设计得与 Unix 进程相仿。比如说:Job 有一个名称、有参数、有环境变量、有标准的输入输出、有错误处理,有返回状态等。


2.4 Docker Registry(镜像注册中心)

1 Docker Registry 是一个存储容器镜像的仓库(注册中心),可理解为云端镜像仓库。按 Repository 来分类,docker pull 按照 [repository]:[tag] 来精确定义一个具体的 Image。


2 在 Docker 的运行过程中,Docker Daemon 会与 Docker Registry 通信,并实现搜索镜像、下载镜像、上传镜像三个功能,这三个功能对应的 Job 名称分别为:“search”、”pull” 与 “push”。


3 Docker Registry 可分为公有仓库( Docker Hub)和私有仓库。


相关文章
|
11月前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
11月前
|
存储 安全 应用服务中间件
【赵渝强老师】Docker的体系架构
Docker采用客户端-服务器架构,客户端与守护进程通过sockets或RESTful API通信。守护进程负责构建、运行和分发容器。镜像仓库(如Docker Hub和Harbor)存储镜像,容器则基于镜像创建,是运行应用的安全平台。
214 2
【赵渝强老师】Docker的体系架构
|
5月前
|
消息中间件 数据可视化 Kafka
docker arm架构部署kafka要点
本内容介绍了基于 Docker 的容器化解决方案,包含以下部分: 1. **Docker 容器管理**:通过 Portainer 可视化管理工具实现对主节点和代理节点的统一管理。 2. **Kafka 可视化工具**:部署 Kafka-UI 以图形化方式监控和管理 Kafka 集群,支持动态配置功能, 3. **Kafka 安装与配置**:基于 Bitnami Kafka 镜像,提供完整的 Kafka 集群配置示例,涵盖 KRaft 模式、性能调优参数及数据持久化设置,适用于高可用生产环境。 以上方案适合 ARM64 架构,为用户提供了一站式的容器化管理和消息队列解决方案。
393 10
|
9月前
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
767 90
|
10月前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
343 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
11月前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
515 60
|
11月前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
11月前
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
11月前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
266 1
|
11月前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
267 1

热门文章

最新文章