提起 Docker,很多软件工程师都会认为那是运维工程师需要掌握的技能。殊不知互联网日益内卷,极限环境下如何脱颖而出——成为佼佼者,这才是值得思考的问题。因此,我们不要局限在特定领域的“一亩三分地”,掌握“应用全生命周期”的各个环节,才是万全之策。当“领域深耕+边界扩宽”逐渐成为一种趋势,T 型人才将会立于不败之地,这就是所谓的底层逻辑。

而 Docker 技术就是这样一种神奇的存在:懂,万物皆可容器化;不懂,则重复“搬砖”,繁忙而不自知。

因此,作为软件工程师,不妨提高自身壁垒,储备一些 Docker 技术知识体系以备不时之需。

值得关注的是,Docker 一词的“谷歌趋势”稳定在 75 分以上(热度最高的字词得 100 分),可以看出来近一年 Docker 技术的热度“有增无减”。

本文将围绕以下三点展开:

1.Docker 能做什么

2.Docker 技术体系

◦ Docker 架构

◦ Docker 周边生态

◦ 理论实践相结合

3.如何快速掌握

◦ Docker 学习体系

◦ 书籍推荐

◦ 其他

言归正传,开篇我们先来讲一讲 Docker 技术体系,“扩宽边界”从场景出发。

01
Docker 能做什么
开始之前,先来盘一下日常的开发中什么情况会接触到 Docker 技术。

(1)固化配置,提高效率
Docker 提供了一个通用配置文件。在初次配置成功后,研发人员可以将配置文件固化,之后碰到相同的配置需求,直接复制即可使用。

随着应用逐渐增多,研发人员只需维护好与之对应的 Docker 配置文件即可,而这个配置文件则存储了Docker 运行、启动、部署的命令。

(2)自动化CI/CD流程
Docker 提供了一组应用打包构建、传输及部署的方法,以便于用户能够轻而易举地在容器内运行任何应用。Docker 还提供了跨越这些异构环境以满足一致性的微环境——从开发到部署、再到流畅发布。

以上这些只是Docker的基本能力,除此之外,它最强大的地方是:可以和Jenkins、GitLab 等串联起来,融入项目开发的CI/CD(持续集成与持续发布)流程中,让一键部署成为可能。

(3)DevOps节点运行能力
在传统软件开发过程中,开发和运维是两个极其割裂的环节。对于互联网公司而言,其业务高速发展,需要通过“小步快跑”的方式进行敏捷开发,以此来满足用户差异化的需求、应对竞争对手的产品策略。因此,在极端情况下,如:每周发布多次甚至每天发布多次的场景,高效的团队协作就显得尤为重要。

DevOps 在这种场景下应运而生,它打破了开发人员和运维人员之间的壁垒,通过“节点服务”组成工作流,串联项目完整生命周期,涵盖了研发、构建、测试、发布、监控及反馈等流程,从而促进了软件的一致性和标准化。

标准的“节点服务”依赖一些隔离的执行环境:既要快速启停、又要服务稳定执行、还要支持高并发调度,这一切都可以通过 Docker 来轻松实现。

(4)自动化测试
测试人员每天都需要完成大量的测试任务,手动执行测试会耗费大量的时间,这时可以考虑使用 Docker 进行自动化改造。自动化的成本是首次自动化程序的编写和维护,而收益则是解放人力、提高生产力。

测试人员在进行一些功能测试、性能测试以及UI测试时,需要快速搭建不同的运行环境、掌握Docker技术,可以让测试人员如虎添翼。

(5)应用隔离
读者或许会疑惑,为什么需要应用隔离?例如,服务器上混部了两个服务:

Node服务,用来启动Web服务;

Java服务,用来提供前后端分离的API接口。

可能出现这种情况——两个服务争夺服务器的CPU资源,无论哪一方失败都将造成灾难。如下图所示,服务器的CPU资源已经被Java服务占满。

在资源有限的前提下,同一时间无法同时满足多个进程的过度使用。当然,在这种场景下可以通过独立部署、为虚拟机设定资源优先级等方案解决。

但在 Docker中,这些完全没有必要担心,因为Docker提供了进程级的隔离,可以更加精细地设置CPU和内存的使用率,进而更好地利用服务器的资源。

(6)动态扩容/缩容
在企业中,如果存在大促或流量不均的场景,则服务器的自动扩容/缩容就会很关键。

在流量低谷时进行自动缩容,可以大幅度减少服务器成本。

在峰值来临时,通过服务器性能嗅探,可以预测到瓶颈即将来临,自动触发服务器扩容操作,从而保证服务器稳定运行。

这一切在传统的虚拟机中显得十分笨重,而在Docker中却非常灵活并且高效,因为,每个容器都可作为单独的进程运行,并且可以共享底层操作系统的系统资源。这样可以提高容器的启动和停止效率,扩容也就毫不费力了。

(7)节省成本,一体化管理
节省成本也是很多企业使用Docker的原因之一。传统企业一般会使用虚拟机,虚拟机虽然可以隔离出很多“子系统”,但占用的空间更大,启动更慢。

Docker技术不需要虚拟出整个操作系统,只需要虚拟出一个小规模的环境,与“沙箱”类似。

此外,虚拟机一般要占用很大的存储空间(可以达到数十GB);而容器只需要占用很小的存储空间(最小的仅为几KB),这样就能节省出更多的服务器资源,从根本上节省成本。

可以看出,Docker已经渗透到了日常开发的方方面面。那么究竟Docker的技术体系有多大,不妨一起来探究下。

02
Docker技术体系
(1)Docker架构

我们先从Docker技术体系展开,如下图:

简单说明下,架构主要包含这些部分:

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

从生态图中我们看到,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 来对多容器进行界面化管理;

打开浏览器进行访问。

架构图如下:

看到这里,相信读者也猜到了,我们实现了一个“多容器化部署”的案例。它有什么意义呢?

首先,当然是环境隔离了,研发每人一个容器开发,互不干扰;

其次,我们可以做很多小流量、灰度发布等事情;

最后,低成本隔离,自动化部署,一站式的流程体验;

Docker 技术体系相当庞大,这也就导致了很多新人望而生畏。因此,我整理了一套Docker学习体系,为读者快速掌握提供帮助。

03
如何快速掌握
(1)Docker 学习体系
市场上不乏 Docker 技术相关的书籍,或围绕官方基础文档缺乏新意,或直入源码让新人望而却步。鲜有既满足读者入门需要,又结合企业实际案例的佳作。

《Docker实战派:容器入门七步法》正是看到了这一点,另辟蹊径,从读者角度出发,首次提出了“七步法”的概念。

何谓“七步法”?七是人们最容易记住的数字,也是人类瞬间记忆的极限,本书正是立意于此。

第一步,从具象的故事开始,开门见山、降低认知门槛。

第二步,通过“第一个Docker 项目”,帮助读者快速上手。在读者建立起体系概念后;

第三步,直切核心原理,围绕Docker 架构展开,由浅入深的讲解了Docker 底层隔离机制、容器生命周期、网络与通讯、存储原理以及源码。深入剖析,知其然而知其所以然。

第四步,趁热打铁,围绕前后端项目,从全栈角度进行项目实战。

第五步,从Docker容器运维角度出发,进一步补充读者知识图谱,这也是初学者最容易忽视的内容。

第六步,步入高级教程,该部分重点围绕Docker 技术最佳实践展开,提供了容器与进程、文件存储与备份、网络配置、镜像优化以及安全策略等内容,示例丰富,操作性十足。

第七步,全书内容升华。通过云原生持续交付模型、企业容器标准化及两个实际的企业级方案,将本书所有内容进行串联。

至此,七步完成。读者可以清晰的感受每一步带来的技术提升,稳扎稳打,从而完全将 Docker 技术融会贯通。

本书特色

《Docker实战派——容器入门七步法》最大的亮点如下。

(1) 趣味易懂。

书中较多的原理,剥除了Docker 官方文档晦涩难懂的外衣,通过趣味的故事展开。如:

通过“盖房子”的比方来理解Docker 是什么;

通过“别墅与胶囊旅馆”的例子来阐述容器与虚拟机的概念;

通过“工厂和车间”来说明进程和线程等。

读者无须记忆就可轻松理解,这也正是本书想要传达的观点:并非技术晦涩难懂,而是缺乏技巧。

(2) 案例丰富。

本书第2、4、5、6、7章都包含大量的示例。不管是“第一个 Docker 项目”还是项目实战,或者是“企业案例”都包含了大量的代码讲解。

读者完全可以按照教程逐步实现,体验Docker 编程的乐趣。

(3) 实操性强。

值得一提的是,本书中案例均来自于实际的研发过程,为了让读者能够轻松掌握,去除了容器中包含的业务逻辑,保留了Docker 容器最核心的架构,实操性强。

熟练掌握书中的精彩案例,沉淀其所表现出来的方法论,相信读者一定能够在企业应用中灵活运用,事半功倍。

作者简介

王嘉涛(Jartto),高级技术专家,技术博客作者。擅长 Web 领域,对性能优化、工程化、以及容器化略有心得。现就职于美团,负责前端公共技术建设。

李传龙(Alonso),Kubernetes 运维专家。在运维领域积累了丰富的实战经验,尤其是服务容器化、PaaS化、稳定性建设、运维体系建设等方面探索深入。现就职于百度,负责云相关运维。

卢桂周(Storm),前端技术专家。在前端技术升级、UI自动化测试、CI/CD、前端工程化、服务容器化有丰富的实战经验。现就职于拉勾,负责前端团队。

Docker 容器化并不是一个单点的技术,反而涉及工程化以及运维体系的方方面面。因此,特邀请李传龙、卢桂周两位行业大佬通力合作,让本书在该领域更具专业性。而做这一切的目的,就是为读者提供舒适的阅读体验和清晰明了的入门之旅。

也许你暂时不会接触 Docker 容器化技术,但《Docker实战派:容器入门七步法》却值得拥有。因为它能为你指明方向:技术入门,七步可成!



一文掌握 Docker 技术体系相关推荐

  1. docker pull下载很慢_一文了解Docker容器技术的操作

    一文了解Docker容器技术的操作 前言 相信点进这篇文章的Coder,不管是在各大技术论坛上.技术交流群,亦或招聘网上,应该都有见到过Doker容器技术的面孔,随着社会节奏的加快以及迫于生活的压力, ...

  2. 一文读懂工业物联网 全面起底核心玩家和技术体系

    来源:智东西 概要:未来10年内,全球物联网将创造10多万亿美元的价值,约占全球经济的1/10,并与城市管理.生产制造.汽车驾驶.能源环保等形成数个千亿级规模以上的细分市场. 物联网进入与传统产业深度 ...

  3. Docker | Docker技术基础梳理(五) - Docker网络管理

    Docker | Docker技术基础梳理(五) - Docker网络管理 链接: 原文链接 原文链接: https://gitbook.cn/books/5b8f3c471966b44b00d265 ...

  4. Docker知识3:Docker的体系简介

    摘要: 本文是关于docker的专题讨论,作者用一组文档尽可能保证完整地阐述Docker到底是啥?如何使用?docker的使用范围等.相关的其它文章是: Docker知识1:Docker-hub简介 ...

  5. 浅淡Kubernetes 与容器技术体系的最佳方法

    我们已经进入到容器化时代,Kubernetes成为了市场上容器编排的事实标准,而且k8S 同样具备了微服务所需要的服务注册与发现.负载均衡.配置中心.Spring cloud 的核心是Netflix微 ...

  6. 解密国内BAT等大厂前端技术体系-腾讯篇(长文建议收藏)

    1 引言 为了了解当前前端的发展趋势,让我们从国内各大互联网大厂开始,了解他们的最新动态和未来规划.这是解密大厂前端技术体系的第三篇,前两篇已经讲述了阿里和百度在前端技术这几年的技术发展.这一篇从腾讯 ...

  7. 解密腾讯前端技术体系

    1 引言 为了了解当前前端的发展趋势,让我们从国内各大互联网大厂开始,了解他们的最新动态和未来规划.这是解密大厂前端技术体系的第三篇,前两篇已经讲述了阿里和百度在前端技术这几年的技术发展.这一篇从腾讯 ...

  8. 【视野】解密腾讯完整前端技术体系

    1 引言 为了了解当前前端的发展趋势,让我们从国内各大互联网大厂开始,了解他们的最新动态和未来规划.这是解密大厂前端技术体系的第三篇,前两篇已经讲述了阿里和百度在前端技术这几年的技术发展.这一篇从腾讯 ...

  9. 解密国内BAT等大厂前端技术体系-阿里篇(长文建议收藏)

    进入2019年,大前端技术生态似乎进入到了一个相对稳定的环境,React在2013年发布至今已经6年时间了,Vue 1.0在2015年发布,至今也有4年时间了. 整个业界在前端框架不断迭代中,也寻找到 ...

  10. java EE技术体系——CLF平台API开发注意事项(4)——API生命周期治理简单说明

    文档说明 截止日期:20170905,作者:何红霞,联系方式:QQ1028335395.邮箱:hehongxia626@163.com 综述 有幸加入到javaEE技术体系的研究与开发,也得益于大家的 ...

最新文章

  1. php t double arrow,关于php:php – 语法错误,意外T_DOUBLE_ARROW
  2. 皮一皮:家里出了个不孝子...
  3. nginx反向代理和rewrite进行解决跨域问题、去掉url中的一部分字符串,通过nginx正则生成新的url
  4. Spring Security3源码分析-http标签解析(转)
  5. 面试官 | Oracle JDK 和 OpenJDK 有什么区别?
  6. 面向车载通信的安全关键技术【会议】
  7. php psr 编码规范_PHP编码风格规范
  8. mysql-installer-web-community和mysql-installer-communityl两个版本的区别
  9. Julia: PyPlot的一些用法整理
  10. 大数据智能推荐系统原理介绍
  11. 对于如何长胖和减肥的研究
  12. APP崩溃的主要原因
  13. Android 绘制录音波浪 + 拓展: 让“字体”迎波而浪
  14. 基于高通SNPE推理引擎的yolov5目标检测算法
  15. 类似苹果数据线的android,除了常见的安卓、苹果、Type-c,还有哪些你不知道的手机数据线?...
  16. 低值易耗材料管理系统
  17. 驱动天文科普_云计算成“仰望星空”的桥梁
  18. 全面解读VTL(虚拟磁带库)
  19. 将一根木棍分成三段,求这三段构成三角形的概率 和  在一圆周上任意取三个点构成锐角三角形的概率是多少
  20. Verilog权重轮询仲裁器设计——Weighted Round Robin Arbiter

热门文章

  1. 高校表白App-团队冲刺第十天
  2. python开发【第一篇】入门
  3. OpenJ_Bailian - 1088 滑雪(记忆化搜索)
  4. [转]Servlet 3.0 新特性详解
  5. 使用Tomcat发布war包
  6. Plants vs. Zombies(二分好题+思维)
  7. Dirichlet分布深入理解
  8. java成神之——集合框架之ArrayList,Lists,Sets
  9. NOIP经典基础模板总结
  10. 概率就是个冷冰冰的坑