一文掌握 Docker 技术体系
共 5970字,需浏览 12分钟
·
2022-05-19 16:10
开始之前,先来盘一下日常的开发中什么情况会接触到 Docker 技术。
(1)固化配置,提高效率
(2)自动化CI/CD流程
(3)DevOps节点运行能力
(4)自动化测试
(5)应用隔离
Node服务,用来启动Web服务;
Java服务,用来提供前后端分离的API接口。
(6)动态扩容/缩容
在流量低谷时进行自动缩容,可以大幅度减少服务器成本。
在峰值来临时,通过服务器性能嗅探,可以预测到瓶颈即将来临,自动触发服务器扩容操作,从而保证服务器稳定运行。
(7)节省成本,一体化管理
Docker Client:开发者可以在命令行中使用Docker相关执行与Docker守护进程进行交互,从而管理诸如Image(镜像)、Container(容器)、Network(网络)和Data Volumes(数据卷)等实体。
Docker Server:
◦ Daemon:通过 Libcontainer、LXC 等容器管理工具来接收 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 技术,从而实现了分层的镜像。
(2)Docker 周边生态
服务发现:Etcd、ZooKeeper、Consul、Eureka
负载均衡:Nginx、F5、LVS
网络选型:Flannel、Calico、Weave、自研
存储系统:PV/PVC声明文件、StorageClass动态供给
部署发布:Jenkins、GitLab、Registry
服务监控:Zabbix、Nagios、cAdvisor、Prometheus
日志管理:两种模式Daemonset集中式、Sidecar自定义,ELK
链路追踪:Pinpoint、Jaeger 、SkyWalking、Zipkin
容器编排:Swarm、Kubernetes、Mesos
数据存储:Redis、MySQL、MongoDB
弹性部署:手动扩容、自动扩容、定时扩容
集群可靠性:集群预留、资源预留、集群组件(API Server、Etcd集群方案、kube-scheduler与controller-manager)
(3)理论实践相结合
通过 Docker 对代码进行容器化处理;
通过 Gitlab 托管代码;
Jenkins 监听 Gitlab 下的代码,触发自动构建,并执行 Kustomize 文件;
Kustomize 通过配置文件,设置了 Istio 的配置(染色识别、流量分发),并启动 K8s 部署应用;
最终我们通过 Rancher 来对多容器进行界面化管理;
打开浏览器进行访问。
首先,当然是环境隔离了,研发每人一个容器开发,互不干扰;
其次,我们可以做很多小流量、灰度发布等事情;
最后,低成本隔离,自动化部署,一站式的流程体验;
(1)Docker 学习体系
第一步,从具象的故事开始,开门见山、降低认知门槛。
第二步,通过“第一个Docker 项目”,帮助读者快速上手。在读者建立起体系概念后;
第三步,直切核心原理,围绕Docker 架构展开,由浅入深的讲解了Docker 底层隔离机制、容器生命周期、网络与通讯、存储原理以及源码。深入剖析,知其然而知其所以然。
第四步,趁热打铁,围绕前后端项目,从全栈角度进行项目实战。
第五步,从Docker容器运维角度出发,进一步补充读者知识图谱,这也是初学者最容易忽视的内容。
第六步,步入高级教程,该部分重点围绕Docker 技术最佳实践展开,提供了容器与进程、文件存储与备份、网络配置、镜像优化以及安全策略等内容,示例丰富,操作性十足。
第七步,全书内容升华。通过云原生持续交付模型、企业容器标准化及两个实际的企业级方案,将本书所有内容进行串联。
通过“盖房子”的比方来理解Docker 是什么;
通过“别墅与胶囊旅馆”的例子来阐述容器与虚拟机的概念;
通过“工厂和车间”来说明进程和线程等。
截止时间:2022年5月21日,晚 21:00
领书须知:提供点赞在看和转发朋友圈截图
注意事项:最终获赠者请在24小时以内添加我的微信,备注:赠书👇