Docker实战(第2版)
作者: (美)杰夫·尼克罗夫(Jeff Nickoloff),(美)斯蒂芬·库恩斯利(Stephen Kuenzli) 著;耿苏宁译
出版社:清华大学出版社 2021-03-01
简介:《 Docker实战(第2版)》聚焦于创建、部署和管理运行在Linux操作系统上的Docker容器中的应用程序。本书对内容做了全面更新,新增了4章,修订了更佳实践和示例。书中首先对Docker模型做了清晰解释,然后开始打包应用程序,安全地测试、安装和运行应用程序,并将它们部署到主机集群中。本书通过示例展示了Docker如何使整个开发生命周期受益,读者将学到从开发、测试机器到进行全面云部署的各种技术。 主要内容 在容器中运行软件 为更好地部署而打包软件 安全和分发容器化应用程序【目录】第1 章 欢迎来到Docker的世界 11.1 Docker是什么 21.1.1 “hello,world”示例 31.1.2 容器 41.1.3 容器不是虚拟化 51.1.4 在隔离容器中运行软件 51.1.5 分发容器 71.2 Docker解决了什么问题 71.2.1 变得有组织性 81.2.2 改善可移植性 91.2.3 保护你的计算机 101.3 Docker为什么重要 111.4 何时、何地使用Docker 121.5 更大生态系统中的Docker 131.6 从Docker命令行获取帮助 141.7 本章小结 14第Ⅰ部分 进程隔离与环境独立计算第2 章 在容器中运行软件 192.1 控制容器:构建网站监视器 192.1.1 创建和启动新容器 202.1.2 运行交互式容器 222.1.3 罗列、停止、重启和查看容器的输出 232.2 被解决的问题和PID命名空间 252.3 消除元数据冲突:建立网站农场 282.3.1 灵活的容器识别 292.3.2 容器的状态和依存关系 322.4 构建与环境无关的系统 352.4.1 只读文件系统 352.4.2 注入环境变量 392.5 建立持久的容器 422.5.1 自动重启容器 432.5.2 使用PID 1和init系统 442.6 清除工作 462.7 本章小结 48第3 章 使用Docker安装软件 493.1 识别软件 503.1.1 命名仓库是什么 503.1.2 使用标签 513.2 寻找和安装软件 523.2.1 从命令行使用Docker注册表 523.2.2 使用备用的注册表 533.2.3 将镜像作为文件处理 543.2.4 从Dockerfile进行安装 553.2.5 使用Docker Hub 563.3 安装文件和隔离 583.3.1 实际的镜像层级 583.3.2 层级的关系 603.3.3 容器文件系统的抽象和隔离 613.3.4 这一工具集和联合文件系统结构的优点 623.3.5 联合文件系统的缺点 623.4 本章小结 63第4 章 使用存储和卷 654.1 文件树和挂载点 664.2 绑定挂载 674.3 常驻内存存储 704.4 Docker卷 714.4.1 卷提供容器无关的数据管理 734.4.2 在NoSQL数据库中使用卷 744.5 共享挂载点和共享文件 774.6 清理卷 814.7 使用卷插件的高级存储 834.8 本章小结 83第5 章 单主机网络 855.1 网络背景(面向初学者) 855.1.1 基本知识:协议、接口和端口 865.1.2 深入知识:网络、NAT和端口转发 875.2 Docker容器网络 885.2.1 创建用户自定义的桥接网络 895.2.2 探索桥接网络 915.2.3 更多网络类型 945.3 特殊容器网络:主机网络和none网络 955.4 使用NodePort publishing处理入站流量 965.5 容器网络注意事项和定制化 985.5.1 没有防火墙或网络策略 985.5.2 自定义DNS配置 995.5.3 外部化网络管理 1035.6 本章小结 104第6 章 通过资源控制来限制风险 1056.1 设置资源配额 1066.1.1 内存限制 1066.1.2 CPU 1086.1.3 访问设备 1116.2 共享内存 1116.3 理解用户 1146.3.1 使用运行时用户 1146.3.2 用户和卷 1176.3.3 用户命名空间和UID重映射 1196.4 根据功能集调整操作系统功能访问范围 1216.5 以完全特权运行容器 1236.6 使用增强的工具加固容器 1246.7 构建适合用例的容器 1266.7.1 应用程序 1276.7.2 高层的系统服务 1276.7.3 低层的系统服务 1286.8 本章小结 128第Ⅱ部分 打包软件进行分发第7 章 将软件打包到镜像中 1337.1 从容器构建镜像 1337.1.1 打包“hello,world”程序 1347.1.2 准备打包Git程序 1357.1.3 查看文件系统的更改项 1367.1.4 提交新的镜像 1377.1.5 配置镜像属性 1387.2 深入研究Docker镜像和层级 1407.2.1 探索联合文件系统 1407.2.2 重新认识镜像、层级、仓库和标签 1437.2.3 管理镜像大小和层级的限制 1467.3 导出和导入平面文件系统 1487.4 版本控制的*实践 1517.5 本章小结 153第8 章 使用Dockerfile自动构建镜像 1558.1 使用Dockerfile打包Git程序 1558.2 Dockerfile入门 1608.2.1 元数据指令 1608.2.2 文件系统指令 1658.3 在构建下游层级时注入行为 1698.4 创建可维护的Dockerfile 1728.5 使用启动脚本和多进程容器 1778.5.1 验证前提条件 1778.5.2 初始化进程 1798.5.3 健康检查的目的和用途 1808.6 构建加固的应用程序镜像 1828.6.1 内容可寻址镜像标识符 1838.6.2 用户权限 1838.6.3 SUID和SGID权限 1868.7 本章小结 188第9 章 公共和私有软件分发 1919.1 选择分发方法 1919.1.1 镜像分发频谱 1929.1.2 选择标准 1929.2 在托管注册表中发布镜像 1959.2.1 在Docker Hub的公共仓库中发布镜像 1959.2.2 私有托管仓库 1989.3 引入私有注册表 2009.3.1 使用注册表镜像 2029.3.2 从注册表中消费镜像 2049.4 手动发布和分发镜像 2059.5 镜像源代码分发流程 2119.6 本章小结 213第10 章 镜像构建管道 21510.1 镜像构建管道的目标 21510.2 构建镜像的模式 21710.2.1 多合一镜像 21710.2.2 分离构建时和运行时镜像 21810.2.3 通过多阶段构建来更改运行时镜像 22010.3 在构建镜像时记录元数据 22210.4 在镜像构建管道中测试镜像 22910.5 标记镜像的模式 23210.5.1 背景 23210.5.2 带有*标签的持续交付 23310.5.3 带有具体环境工件的持续交付 23310.5.4 语义版本控制 23510.6 本章小结 236第Ⅲ部分 更高层次的抽象与编排第11 章 Docker和Compose服务 23911.1 “Hello World!”服务 24011.1.1 自动复活和复制 24211.1.2 自动推出 24411.1.3 服务运行状况与回滚 24611.2 使用Compose V3的声明式服务环境 24911.2.1 YAML入门 25111.2.2 Compose V3的服务集合 25311.3 带有状态的服务和保留的数据 25811.4 使用Compose进行负载均衡、服务发现和联网 26011.5 本章小结 264第12 章 一流的配置 26512.1 配置的分发和管理 26612.2 分离应用程序和配置 26712.2.1 使用配置资源 27012.2.2 部署应用程序 27112.2.3 直接管理配置资源 27312.3 一种特殊的配置:机密信息 27712.4 本章小结 285第13 章 使用Swarm在Docker主机集群上编排服务 28713.1 使用Docker Swarm集群 28713.1.1 Docker Swarm模式介绍 28813.1.2 部署Swarm集群 28913.2 将应用程序部署到Swarm集群 29013.2.1 Docker Swarm集群资源类型介绍 29013.2.2 使用Docker服务定义应用程序及其依赖项 29113.2.3 部署应用程序 29713.3 与Swarm集群内运行的服务通信 30313.3.1 使用Swarm路由网格将客户端请求路由到服务 30413.3.2 使用覆盖网络 30613.3.3 在覆盖网络上发现服务 30713.3.4 在覆盖网络上隔离服务之间的通信 31013.3.5 负载均衡 31213.4 将服务任务放置在集群中 31313.4.1 复制服务 31413.4.2 约束任务的运行位置 31813.4.3 使用全局服务方式在每个节点上部署一个任务 32513.4.4 将真实的应用程序部署到真实的集群中 32613.5 本章小结 327