Docker架构主要包含什么以及周边生态详解

我们看如下图:

图片[1]-Docker架构主要包含什么以及周边生态详解-不念博客
Docker引擎(Engine)结构
图片[2]-Docker架构主要包含什么以及周边生态详解-不念博客
docker架构


docker架构主要包含:

Docker Client:docker client 是docker架构中用户用来和docker daemon建立通信的客户端,用户使用的可执行文件为docker,通过docker命令行工具可以发起众多管理container的请求。docker client发送容器管理请求后,由docker daemon接受并处理请求,当docker client 接收到返回的请求相应并简单处理后,docker client 一次完整的生命周期就结束了,当需要继续发送容器管理请求时,用户必须再次通过docker可以执行文件创建docker client。

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

  • Daemon:docker daemon 是docker架构中一个常驻在后台的系统进程,功能是:接收处理docker client发送的请求。该守护进程在后台启动一个server,server负载接受docker client发送的请求;接受请求后,server通过路由与分发调度,找到相应的handler来执行请求。docker daemon启动所使用的可执行文件也为docker,与docker client启动所使用的可执行文件docker相同,在docker命令执行时,通过传入的参数来判别docker daemon与docker client。
  • Containerd:Docker 引擎中的 Containerd 组件确保了 Docker 镜像能够以正确的 OCI Bundle 的格式传递给 Runc;
  • Runc:实质上是一个轻量级的、针对 Libcontainer 进行了包装的命令行交互工具,可以理解为一个独立的容器运行时工具。作用只有一个——创建容器。

Docker Driver:

  • Execdrive:存储了容器定义的配置信息了,Libcontainer 拿到这些配置信息后,将会调用底层的 Namespace 和 Cgroup 等技术来完成容器的创建和管理;
  • Networkdirver:主要作用是完成 Docker 容器的网络环境配置,包括容器的 IP 地址、端口、防火墙策略,以及与主机的端口映射等;
  • Graphdriver:主要负责对容器镜像的管理。

Linux Kernel:

  • Chroot:即 change root directory (主要用来更改 root 目录)。在 Linux 系统中,系统默认的目录结构都是以 /,即以根 (root) 开始的。而在使用 Chroot 之后,系统的目录结构将以指定的位置作为 / 位置;
  • Namespace:是 Linux 内核用来隔离内核资源的方式,目的就是实现轻量级虚拟化(容器)服务,为 Docker 等容器技术提供了基础条件;
  • Cgroup:是 Linux 内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 CPU、内存等资源实现精细化的控制,Docker 就使用了 Cgroup提供的资源限制能力来完成 CPU,内存等部分的资源控制;
  • Network:为 Docker 容器提供多种网络解决方案;
  • Capability:Linux 引入了 Capabilities 机制对 root 权限进行细粒度的控制,实现按需授权,从而减小系统的安全攻击面;
  • Seccomp:即安全计算模式,可以使用它来限制容器内可用的操作。seccomp()系统调用在调用进程的seccomp状态下运行。Docker 中使用此功能来限制应用程序的访问;
  • Filesystem:UnionFS 通过 Linux Filesystem 为容器提供高效的管理能力。Docker 的镜像就采用了 UnionFS 技术,从而实现了分层的镜像。

Docker的生命周期:

图片[3]-Docker架构主要包含什么以及周边生态详解-不念博客
Docker的生命周期

Docker周边生态

如果需要搭建“企业级容器化标准”,那么一定要对 Docker 周边生态有足够的了解,不妨一起从下图中感受整个技术体系。

图片[4]-Docker架构主要包含什么以及周边生态详解-不念博客
Docker周边生态

从生态图中我们看到,Docker涉及到很多工具或平台。但万变不离其宗,“企业容器化标准”可以归纳以下几方面:

  • 服务发现:Etcd、ZooKeeper、Consul、Eureka、istio
  • 负载均衡:Nginx、F5、LVS、DNS
  • 日志管理:两种模式Daemonset集中式和Sidecar自定义,ELK
  • 链路追踪:Pinpoint、Jaeger 、SkyWalking、Zipkin、SkyWalking
  • 容器编排:Swarm、Kubernetes、Mesos、consul
  • 数据存储:Redis、MySQL、MongoDB、Nebula
  • 弹性部署:定时扩容、手动扩容、自动扩容
  • 网络选型:Flannel、Calico、Weave、自研
  • 存储系统:PV/PVC声明文件、StorageClass动态供给
  • 部署发布:Jenkins、GitLab、Registry
  • 服务监控:Zabbix、Nagios、cAdvisor、Prometheus
  • 集群可靠性:资源预留、集群预留、集群组件(API Server、Etcd集群方案、kube-scheduler与controller-manager)
© 版权声明
THE END