Docker生产环境实践指南.[美]Joe Johnston(带书签文字版).pdf
本书围绕“Docker该如何应用到生产环境”这一核心问题展开。在本书中,读者将接触到多个IT企业应用Docker到生产环境的成功案例,了解Docker实际投产时将会面临的问题,以及它与现有基础设施存在的矛盾与冲突,了解构建Docker生态系统所需的配套设施,包括安全、构建镜像、持续集成持续交付、镜像存储、配置管理、网络实现、服务发现、持久化存储以及日志监控等模块具体选型方案及利弊所在。本书编写时一些案例参考的Docker版本是Docker1.6版本或Docker1.7。本书要求读者具备一定的容器管理和运维的基础知识,适合在生产环境中使用Docker的相关技术人员阅读,尤其适合具有中高级DevOps和运维背景的读者阅读。 第1章 入门 1 1.1 术语 1 1 .1.1 镜像与容器 1 1.1.2 容器与虚拟机 1 1.1.3 持续集成/持续交付 2 1.1.4 宿主机管理 2 1.1.5 编排 2 1.1.6 调度 2 1.1.7 发现 2 1.1.8 配置管理 2 1.2 从开发环境到生产环境 3 1.3 使用Docker的多种方式 3 1.4 可预期的情况 4 第2章 技术栈 7 2.1 构建系统 8 2.2 镜像仓库 8 2.3 宿主机管理 8 2.4 配置管理 9 2.5 部署 9 2.6 编排 9 第3章 示例:极简环境 11 3.1 保持各部分的简单 11 3.2 保持流程的简单 13 3.3 系统细节 14 3.4 集群范围的配置、通用配置及本地配置 18 3.5 部署服务 19 3.6 支撑服务 21 3.7 讨论 21 3.8 未来 22 3.9 小结 22 第4章 示例:Web环境 23 4.1 编排 24 4.1.1 让服务器上的Docker进入准备运行容器的状态 25 4.1.2 让容器运行 25 4.2 连网 28 4.3 数据存储 28 4.4 日志 29 4.5 监控 30 4.6 无须担心新依赖 30 4.7 零停机时间 30 4.8 服务回滚 31 4.9 小结 31 第5章 示例:Beanstalk环境 33 5.1 构建容器的过程 34 5.2 日志 35 5.3 监控 36 5.4 安全 36 5.5 小结 36 第6章 安全 37 6.1 威胁模型 37 6.2 容器与安全性 38 6.3 内核更新 39 6.4 容器更新 39 6.5 suid及guid二进制文件 40 6.6 容器内的root 40 6.7 权能 41 6.8 seccomp 41 6.9 内核安全框架 42 6.10 资源限制及cgroup 42 6.11 ulimit 43 6.12 用户命名空间 43 6.13 镜像验证 44 6.14 安全地运行Docker守护 进程 45 6.15 监控 45 6.16 设备 45 6.17 挂载点 45 6.18 ssh 46 6.19 私钥分发 46 6.20 位置 46 第7章 构建镜像 49 7.1 此镜像非彼镜像 49 7.1.1 写时复制与高效的镜像存储与分发 50 7.1.2 Docker对写时复制的使用 51 7.2 镜像构建基本原理 52 7.2.1 分层的文件系统和空间控管 54 7.2.2 保持镜像小巧 57 7.2.3 让镜像可重用 58 7.2.4 在进程无法被配置时,通过环境变量让镜像可配置 59 7.2.5 让镜像在Docker变化时对自身进行重新配置 62 7.2.6 信任与镜像 67 7.2.7 让镜像不可变 67 7.3 小结 68 第8章 存储Docker镜像 69 8.1 启动并运行存储的Docker镜像 69 8.2 自动化构建 70 8.3 私有仓库 71 8.4 私有registry的扩展 71 8.4.1 S3 72 8.4.2 本地存储 72 8.4.3 对registry进行负载均衡 72 8.5 维护 73 8.6 对私有仓库进行加固 73 8.6.1 SSL 73 8.6.2 认证 73 8.7 保存/载入 74 8.8 最大限度地减小镜像体积 74 8.9 其他镜像仓库方案 75 第9章 CI/CD 77 9.1 让所有人都进行镜像构建与推送 79 9.2 在一个构建系统中构建所有镜像 80 9.3 不要使用或禁止使用非标准做法 80 9.4 使用标准基础镜像 80 9.5 使用Docker进行集成测试 81 9.6 小结 81 第10章 配置管理 83 10.1 配置管理与容器 83 10.2 面向容器的配置管理 84 10.2.1 Chef 85 10.2.2 Ansible 87 10.2.3 Salt Stack 89 10.2.4 Puppet 90 10.3 小结 92 第11章 Docker存储引擎 93 11.1 AUFS 94 11.2 DeviceMapper 99 11.3 BTRFS 104 11.4 OverlayFS 108 11.5 VFS 112 11.6 小结 114 第12章 Docker网络实现 115 12.1 网络基础知识 116 12.2 IP地址的分配 119 12.3 域名解析 124 12.4 服务发现 128 12.5 Docker高级网络 132 12.5.1 网络安全 132 12.5.2 多主机的容器间通信 136 12.5.3 共享网络命名空间 138 12.6 IPv6 141 12.7 小结 142 第13章 调度 145 13.1 什么是调度 146 13.2 调度策略 147 13.3 Mesos 147 13.4 Kubernetes 148 13.5 OpenShift 149 第14章 服务发现 153 14.1 DNS服务发现 155 14.2 Zookeeper 159 14.3 基于Zookeeper的服务发现 160 14.4 etcd 161 14.5 consul 165 14.5.1 基于consul的服务发现 167 14.5.2 registrator 168 14.6 Eureka 171 14.7 Smartstack 174 14.7.1 基于Smartstack的服务发现 175 14.7.2 Nerve 175 14.7.3 Synapse 176 14.8 nsqlookupd 177 14.9 小结 177 第15章 日志和监控 179 15.1 日志 179 15.1.1 Docker原生的日志 支持 180 15.1.2 连接到Docker容器 181 15.1.3 将日志导出到宿主机 182 15.1.4 发送日志到集中式的日志 平台 183 15.1.5 在其他容器一侧收集 日志 184 15.2 监控 185 15.2.1 基于宿主机的监控 187 15.2.2 基于Docker守护进程的 监控 188 15.2.3 基于容器的监控 191 15.3 小结 194 .1.1 镜像与容器 1 1.1.2 容器与虚拟机 1 1.1.3 持续集成/持续交付 2 1.1.4 宿主机管理 2 1.1.5 编排 2 1.1.6 调度 2 1.1.7 发现 2 1.1.8 配置管理 2 1.2 从开发环境到生产环境 3 1.3 使用Docker的多种方式 3 1.4 可预期的情况 4 第2章 技术栈 7 2.1 构建系统 8 2.2 镜像仓库 8 2.3 宿主机管理 8 2.4 配置管理 9 2.5 部署 9 2.6 编排 9 第3章 示例:极简环境 11 3.1 保持各部分的简单 11 3.2 保持流程的简单 13 3.3 系统细节 14 3.4 集群范围的配置、通用配置及本地配置 18 3.5 部署服务 19 3.6 支撑服务 21 3.7 讨论 21 3.8 未来 22 3.9 小结 22 第4章 示例:Web环境 23 4.1 编排 24 4.1.1 让服务器上的Docker进入准备运行容器的状态 25 4.1.2 让容器运行 25 4.2 连网 28 4.3 数据存储 28 4.4 日志 29 4.5 监控 30 4.6 无须担心新依赖 30 4.7 零停机时间 30 4.8 服务回滚 31 4.9 小结 31 第5章 示例:Beanstalk环境 33 5.1 构建容器的过程 34 5.2 日志 35 5.3 监控 36 5.4 安全 36 5.5 小结 36 第6章 安全 37 6.1 威胁模型 37 6.2 容器与安全性 38 6.3 内核更新 39 6.4 容器更新 39 6.5 suid及guid二进制文件 40 6.6 容器内的root 40 6.7 权能 41 6.8 seccomp 41 6.9 内核安全框架 42 6.10 资源限制及cgroup 42 6.11 ulimit 43 6.12 用户命名空间 43 6.13 镜像验证 44 6.14 安全地运行Docker守护 进程 45 6.15 监控 45 6.16 设备 45 6.17 挂载点 45 6.18 ssh 46 6.19 私钥分发 46 6.20 位置 46 第7章 构建镜像 49 7.1 此镜像非彼镜像 49 7.1.1 写时复制与高效的镜像存储与分发 50 7.1.2 Docker对写时复制的使用 51 7.2 镜像构建基本原理 52 7.2.1 分层的文件系统和空间控管 54 7.2.2 保持镜像小巧 57 7.2.3 让镜像可重用 58 7.2.4 在进程无法被配置时,通过环境变量让镜像可配置 59 7.2.5 让镜像在Docker变化时对自身进行重新配置 62 7.2.6 信任与镜像 67 7.2.7 让镜像不可变 67 7.3 小结 68 第8章 存储Docker镜像 69 8.1 启动并运行存储的Docker镜像 69 8.2 自动化构建 70 8.3 私有仓库 71 8.4 私有registry的扩展 71 8.4.1 S3 72 8.4.2 本地存储 72 8.4.3 对registry进行负载均衡 72 8.5 维护 73 8.6 对私有仓库进行加固 73 8.6.1 SSL 73 8.6.2 认证 73 8.7 保存/载入 74 8.8 最大限度地减小镜像体积 74 8.9 其他镜像仓库方案 75 第9章 CI/CD 77 9.1 让所有人都进行镜像构建与推送 79 9.2 在一个构建系统中构建所有镜像 80 9.3 不要使用或禁止使用非标准做法 80 9.4 使用标准基础镜像 80 9.5 使用Docker进行集成测试 81 9.6 小结 81 第10章 配置管理 83 10.1 配置管理与容器 83 10.2 面向容器的配置管理 84 10.2.1 Chef 85 10.2.2 Ansible 87 10.2.3 Salt Stack 89 10.2.4 Puppet 90 10.3 小结 92 第11章 Docker存储引擎 93 11.1 AUFS 94 11.2 DeviceMapper 99 11.3 BTRFS 104 11.4 OverlayFS 108 11.5 VFS 112 11.6 小结 114 第12章 Docker网络实现 115 12.1 网络基础知识 116 12.2 IP地址的分配 119 12.3 域名解析 124 12.4 服务发现 128 12.5 Docker高级网络 132 12.5.1 网络安全 132 12.5.2 多主机的容器间通信 136 12.5.3 共享网络命名空间 138 12.6 IPv6 141 12.7 小结 142 第13章 调度 145 13.1 什么是调度 146 13.2 调度策略 147 13.3 Mesos 147 13.4 Kubernetes 148 13.5 OpenShift 149 第14章 服务发现 153 14.1 DNS服务发现 155 14.2 Zookeeper 159 14.3 基于Zookeeper的服务发现 160 14.4 etcd 161 14.5 consul 165 14.5.1 基于consul的服务发现 167 14.5.2 registrator 168 14.6 Eureka 171 14.7 Smartstack 174 14.7.1 基于Smartstack的服务发现 175 14.7.2 Nerve 175 14.7.3 Synapse 176 14.8 nsqlookupd 177 14.9 小结 177 第15章 日志和监控 179 15.1 日志 179 15.1.1 Docker原生的日志 支持 180 15.1.2 连接到Docker容器 181 15.1.3 将日志导出到宿主机 182 15.1.4 发送日志到集中式的日志 平台 183 15.1.5 在其他容器一侧收集 日志 184 15.2 监控 185 15.2.1 基于宿主机的监控 187 15.2.2 基于Docker守护进程的 监控 188 15.2.3 基于容器的监控 191 15.3 小结 194
用户评论