Docker 容器与容器云(第2版) pdf

Docker 容器与容器云(第2版)

内容简介

本书根据Docker 1.10版和Kubernetes 1.2版对第1版进行了全面更新,从实践者的角度出发,以Docker和Kubernetes为重点,沿着“基本用法介绍”到“核心原理解读”到“高级实践技巧”的思路,一本书讲透当前主流的容器和容器云技术,有助于读者在实际场景中利用Docker容器和容器云解决问题并启发新的思考。全书包括两部分,首部分深入解读Docker容器技术,包括Docker架构与设计、核心源码解读和高级实践技巧;第二部分归纳和比较了三类基于Docker的主流容器云项目,包括专注Docker容器编排与部署的容器云、专注应用支撑的容器云以及一切皆容器的Kubernetes,进而详细解读了Kubernetes核心源码的设计与实现,介绍了几种典型场景下的Kubernetes实践。

本书适用于有一定Docker基础的开发者、架构师、IT专业学生以及探索基于Docker构建云计算平台的技术人员,也非常适合作为高校教材或培训资料。

作者简介

浙江大学软件工程实验室(Software Engineering Lab,SEL)云计算团队组建于2011年,组织博士和硕士研究生搭建、分析和钻研开源的云计算技术,包括Docker、Kubernetes、Cloud Foundry、OpenStack、CloudStack、Eucalyptus、Convirt、OpenShift等,积极为开源社区贡献代码,管理和参与线上线下讨论社区,参加国内外云计算技术峰会并发言。以开源社区为技术交流研发平台,浙江大学SEL实验室在4年多的时间里成长为一个充满热情、富有能力的云计算研发团队,也在国内外开源云计算社区,尤其是在Docker、Kubernetes和Cloud Foundry社区得到了广泛认可。

目录

第一部分 Docker深入解读
第1章 从容器到容器云  2
1.1 云计算平台  2
1.2 容器,新的革命  3
1.3 进化:从容器到容器云  7
第2章 Docker 基础  8
2.1 Docker的安装  8
2.2 Docker操作参数解读  9
2.3 搭建你的第一个Docker应用栈  16
2.3.1 Docker集群部署  16
2.3.2 第一个Hello World  17
2.3.3 开发、测试和发布一体化  27
第3章 Docker核心原理解读  28
3.1 Docker背后的内核知识  28
3.1.1 namespace资源隔离  28
3.1.2 cgroups资源限制  45
3.2 Docker架构概览  53
3.2.1 Docker daemon  54
3.2.2 Docker client  54
3.2.3 镜像管理  54
3.2.4 execdriver、volumedriver、graphdriver  55
3.2.5 network  55
3.3 client和daemon  56
3.3.1 client模式  56
3.3.2 daemon模式  58
3.3.3 从client到daemon  64
3.4 libcontainer  67
3.4.1 libcontainer的工作方式  69
3.4.2 libcontainer实现原理  70
3.4.3 使用runC与libcontainer进行交互  75
3.5 Docker镜像管理  77
3.5.1 什么是Docker镜像  77
3.5.2 Docker镜像关键概念  80
3.5.3 Docker镜像构建操作  81
3.5.4 Docker镜像的分发方法  84
3.6 Docker存储管理  87
3.6.1 Docker镜像元数据管理  87
3.6.2 Docker存储驱动  89
3.7 Docker数据卷  99
3.7.1 数据卷的使用方式  100
3.7.2 数据卷原理解读  105
3.8 Docker网络管理  108
3.8.1 Docker网络基础  108
3.8.2 Docker daemon网络配置原理  116
3.8.3 libcontainer网络配置原理  119
3.8.4 传统的link原理解析  125
3.8.5 新的link介绍  127
3.9 Docker与容器安全  129
3.9.1 Docker的安全机制  129
3.9.2 Docker安全问题  135
3.9.3 Docker安全的解决方案  139
第4章 Docker 高级实践技巧  151
4.1 容器化思维  151
4.1.1 SSH服务器的替代方案  151
4.1.2 Docker内应用日志管理方案  152
4.1.3 容器化思维及更多  153
4.2 Docker高级网络实践  153
4.2.1 玩转Linux networknamespace  154
4.2.2 pipework原理解析  159
4.2.3 pipework跨主机通信  165
4.2.4 OVS划分VLAN  170
4.2.5 OVS隧道模式  174
4.3 Dockerfile最佳实践  187
4.3.1 Dockerfile的使用  187
4.3.2 Dockerfile实践心得  191
4.4 Docker容器的监控手段  193
4.4.1 Docker容器监控维度  194
4.4.2 容器监控命令  195
4.4.3 常用的容器监控工具  197
4.5 容器化应用构建的基础:高可用配置中心  201
4.5.1 etcd经典应用场景  201
4.5.2 etcd实现原理  206
第二部分 Docker云平台解读
第5章 构建自己的容器云  222
5.1 再谈云平台的层次架构  222
5.2 从小工到专家  225
第6章 专注编排与部署:三剑客与Fleet  230
6.1 编排小神器Fig/Compose  230
6.1.1 再谈容器编排与部署  230
6.1.2 Compose原理:一探究竟  233
6.2 跨平台宿主环境管理工具Machine  237
6.2.1 Machine与虚拟机软件  237
6.2.2 Machine与IaaS平台  238
6.2.3 Machine小结  239
6.3 集群抽象工具Swarm  240
6.3.1 Swarm简介  240
6.3.2 试用Swarm  241
6.3.3 Swarm集群的多种创建方式  243
6.3.4 Swarm对请求的处理  245
6.3.5 Swarm集群的调度策略  245
6.3.6 Swarm集群高可用(HA)  246
6.3.7 Swarm与Machine  247
6.3.8 Swarm小结  248
6.4 编排之秀Fleet  248
6.4.1 旧问题新角度:Docker distro  249
6.4.2 Fleet的原理剖析  252
第7章 专注应用支撑和运行时:Flynn和Deis  258
7.1 Flynn,一个小而美的两层架构  258
7.1.1 第0层:容器云的基础设施  259
7.1.2 第1层:容器云的功能框架  259
7.1.3 Flynn体系架构与实现原理  260
7.2 谈谈Deis与Flynn  270
7.2.1 应用发布上的比较  271
7.2.2 关于Deis的一些思考  273
第8章 一切皆容器:Kubernetes  274
8.1 Kubernetes是个什么样的项目  274
8.2 Kubernetes的设计解读  275
8.2.1 一个典型案例:Guestbook  275
8.2.2 pod设计解读  277
8.2.3 replication controller设计解读  288
8.2.4 service的设计解读  294
8.2.5 新一代副本控制器replica set  306
8.2.6 Deployment  307
8.2.7 DaemonSet  312
8.2.8 ConfigMap  312
8.2.9 Job  317
8.2.10 Horizontal Pod Autoscaler  318
8.3 Kubernetes核心组件解读  320
8.3.1 Kubernetes的整体架构  320
8.3.2 APIServer  321
8.3.3 scheduler  328
8.3.4 controller manager  338
8.3.5 kubelet  346
8.3.6 kube-proxy  352
8.3.7 核心组件协作流程  362
8.4 Kubernetes存储核心原理  366
8.4.1 volume设计解读  366
8.4.2 volume实现原理分析  367
8.4.3 volume使用案例  368
8.4.4 persistent volume  371
8.5 Kubernetes网络核心原理  372
8.5.1 单pod单IP模型  373
8.5.2 pod和网络容器  374
8.5.3 实现Kubernetes的网络模型  377
8.6 Kubernetes多租户管理与资源控制  381
8.6.1 namespace设计解读  381
8.6.2 Kubernetes用户认证机制  385
8.6.3 Kubernetes用户授权机制  387
8.6.4 Kubernetes多维资源管理机制admission control  390
8.7 Kubernetes高级实践  402
8.7.1 应用健康检查  402
8.7.2 高可用性  405
8.7.3 日志  408
8.7.4 集成DNS  410
8.7.5 容器上下文环境  412
8.8 Kubernetes未来动向  414
8.8.1 Ubernetes  414
8.8.2 petSet  415
8.8.3 performance  417
8.8.4 rescheduler  417
8.8.5 OCI标准  419
8.9 不要停止思考  419
第三部分 附录
附录A Docker的安装  424
附录B 阅读Docker源代码的神兵
利器  432
附录C 快速熟悉开源项目  441
附录D cgroups的测试与使用  444
附录E cgroups子系统配置参数介绍  448
附录F Kubernetes的安装  453
后记  457

感悟与笔记

云计算平台

云计算是一种资源的服务模式,该模式可以实现随时随地、便捷按需地从可配置计算资源共享池中获取所需资源(如网络、服务器、存储、应用及服务),资源能够快速供应并释放,大大减少了资源管理工作开销。

Docker

Docker是以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。它是一个跨平台、可移植并且简单易用的容器解决方案。Docker的源代码托管在GitHub上,基于Go语言开发并遵从Apache 2.0协议。Docker可在容器内部快速自动化地部署应用,并通过操作系统内核技术(namespace、cgroups等)为容器提供资源隔离与安全保障。

  • 持续部署与测试:开发人员使用镜像镜像实现标准开发环境的构建,开发完成后通过封装着完整环境和应用的镜像进行迁移。
  • 跨平台支持
  • 环境标准化和版本控制
  • 高资源利用率与隔离:容器没有管理程序的额外开销,与底层共享操作系统,系统负载更低
  • 容器跨平台性与镜像:构建一次,到处运行
  • 易于理解且易用
  • 应用镜像仓库

容器云

容器云以容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员提供用于构建、发布和运行分布式应用的平台。当容器云专注于资源共享与隔离、容器编排与部署时,它更接近传统的IaaS;当容器云渗透到应用支持与运行时环境使,它更接近传统的PaaS

namespace资源隔离

Docker容器本质上是宿主机上的进程。Docker通过namespace实现了资源隔离,通过cgroups实现了资源限制,通过写时复制机制(copy-on-write)实现了高效的文件操作

Docker的namespace一般有以下几种。如果两个进程指向的namespace编号相同,就说明它们在同一个namespace下,否则便在不同的namespace里面

Linux内核实现namespace的一个主要目的就是实现轻量级虚拟化容器服务,在同一个namespace下的进程可以感知彼此的变化,而对外界的进程一无所知,以达到独立和隔离的目的。

root@ht:~# ls -l /proc/$$/ns
total 0
lrwxrwxrwx 1 root root 0 7月   9 20:00 cgroup -> cgroup:[4026531835]
lrwxrwxrwx 1 root root 0 7月   9 20:00 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 7月   9 20:00 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 7月   9 20:00 net -> net:[4026531957]
lrwxrwxrwx 1 root root 0 7月   9 20:00 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 7月   9 20:00 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 7月   9 20:00 uts -> uts:[4026531838]
  1. UTS namespace
    • UTS(UNIX Time-sharing System)namespace提供了主机名和域名的隔离,这样每个Docker容器就可以拥有独立的主机名和域名了,在网络上可以被视为一个独立的节点。
  2. IPC namespace
    • 进程间通信(Inte-process Communication,IPC)涉及的IPC资源包括常见的信号量、消息队列和共享内存。申请IPC资源就申请了一个全局唯一的32位ID,所以IPC namespace中实际上包含了系统IPC标识符以及实现POSIX消息队列的文件系统。在同一个IPC namespace下的进程彼此可见,不同IPC namespace下的进程则互相不可见。
    • Docker当前使用IPC namespace实现了容器与宿主机、容器与容器之间的IPC隔离
  3. PID namespace
    • PID namespace对进程PID重新标号,即两个不同namespace下的进程可以有相同的PID。每个PID namespace都有自己的计数程序。内核为所有的PID namespace维护了一个树状结构,最顶层的是系统初始时创建的,被称为root namespace。它创建的新PID namespace被称为child namespace,而原先的PID namespace就新创建的PID namespace的parent namespace。通过这种方式,不同的PID namespace会形成一个层次体系。所属的父节点可以看到子节点的进程,并可以通过信号等方式对子节点中的进程产生影响,但子节点却不能看到夫节点PID namespace中的任何内容。
  4. mount namespace
    • mount namespace通过隔离文件系统挂载点对隔离文件系统提供支持。隔离后不同mount namespace中的文件结构发生变化也互不影响。进程在创建mount namespace时,会把当前的文件结构复制给新的namespace。新namespace中的所有mount操作都只影响自身的文件系统。
    • 共享关系:如果两个挂载对象具有共享关系,那么一个挂载对象中的挂载事件会传播到另一个挂载对象,反之亦然
    • 从属关系:如果两个挂载对象形成从属关系,那么一个挂载对象中的挂载事件会传播到另一个挂载对象,但是反之不行。从属对象是事件的接收者。
  5. network namespace
    • network namespace主要提供关于网络资源的隔离,包括网络设备、IPv4和IPv6协议栈、IP路由表、防火墙、、socket等。一个物理的网络设备最多存在于一个network namespace中,可以通过创建veth pair(虚拟网络设备对:有两端,类似通道)在不同的network namespace间创建通道,以达到通信目的。
  6. user namespace
    • user namespace主要隔离了安全相关的标志符(identifier)和属性(attribute),包括用户ID,用户组ID,root目录,密钥及特殊权限。一个普通用户的进程通过clone()创建的新进程在新user namespace中可以拥有不同的用户和用户组。这意味着一个进程在容器外属于一个没有特权的普通用户,但是它创建的容器进程却属于拥有所有权限的超级用户

会员免费下载

链接:https://pan.baidu.com/s/1jVPdh42kpNt_sJ7gsYT8sA

提取码: ****** 查看

¥69/年 开通VIP会员

成为本站VIP会员即可无限下载。 请先点击百度网盘,看资源是否还在,不在请点击链接通知站长补资源。

资源标签点击标签可查看对应分类的资源

其他

资源推荐

免费 图解数据结构:使用Java

C++ 程序设计语言:第4部分 标准库(原书第4版)

C++编程思想(两卷合订本)

CSS世界

JavaScript DOM编程艺术(第2版)

C++ Primer Plus(第6版) 中文版

Vue.js快速入门

Java编程思想(第4版) [thinking in java]

Copyright © 2021-2022 知识猫. All Rights Reserved.