内容简介
第1部分 保持一台整洁的机器
第1章 欢迎来到Docker世界
1.1 什么是Docker
1.1.1 容器
1.1.2 容器不是虚拟化
1.1.3 在隔离的容器中运行软件
1.1.4 分发容器
1.2 Docker解决了什么问题
1.2.1 组织有序
1.2.2 提高可移植性
1.2.3 保护你的机器
1.3 为什么Docker如此重要
1.4 何时何处使用Docker
1.5 案例:“Hello World”
1.6 小结
第2章 在容器中运行软件
2.1 从Docker命令行工具获得帮助
2.2 控制容器:建立一个网站的监控器
2.2.1 创建和启动一个新的容器
2.2.2 运行交互式容器
2.2.3 列举、停止、重新启动和查看容器输出
2.3 已解决的问题和PID命名空间
2.4 消除元数据冲突:构建一个网站农场
2.4.1 灵活的容器标识
2.4.2 容器的状态和依赖
2.5 构建与环境无关的系统
2.5.1 只读文件系统
2.5.2 环境变量的注入
2.6 建立持久化的容器
2.6.1 自动重启容器
2.6.2 使用init和supervisor进程维持容器的运行状态
2.7 清理
2.8 小结
第3章 软件安装的简化
3.1 选择所需的软件
3.1.1 什么是仓库
3.1.2 使用标签
3.2 查找和安装软件
3.2.1 命令行使用Docker Hub
3.2.2 通过网站访问Docker Hub
3.2.3 使用替代注册服务器
3.2.4 镜像文件
3.2.5 从Dockerfile安装
3.3 安装文件和隔离
3.3.1 镜像层实战
3.3.2 分层关系
3.3.3 容器文件系统抽象和隔离
3.3.4 分层文件系统及其工具的优点
3.3.5 Union文件系统的不足
3.4 小结
第4章 持久化存储和卷间状态共享
4.1 存储卷的简介
4.1.1 存储卷提供容器无关的数据管理方式
4.1.2 NoSQL数据库使用存储卷
4.2 存储卷的类型
4.2.1 绑定挂载卷
4.2.2 Docker管理卷
4.3 共享存储卷
4.3.1 主机依赖的共享
4.3.2 共享和volumes-from标志
4.4 管理卷的生命周期
4.4.1 管理卷的权限
4.4.2 存储卷的清理
4.5 存储卷的高级容器模式
4.5.1 卷容器模式
4.5.2 数据打包的存储卷容器
4.5.3 多态容器模式
4.6 小结
第5章 网络访问
5.1 网络相关的背景知识
5.1.1 基础:协议,接口和端口
5.1.2 高级:网络,NAT和端口转发
5.2 Docker的网络
5.2.1 本地Docker网络的拓扑结构
5.2.2 四种网络容器原型
5.3 Closed容器
5.4 Bridged容器
5.4.1 访问外部网络
5.4.2 自定义命名解析
5.4.3 开放对容器的访问
5.4.4 跨容器通信
5.4.5 修改网桥接口的配置
5.5 Joined容器
5.6 Open容器
5.7 跨容器依赖
5.7.1 链接——本地服务发现
5.7.2 链接别名
5.7.3 环境变量的改动
5.7.4 链接的本质和缺点
5.8 小结
第6章 隔离——限制危险
6.1 资源分配
6.1.1 内存限制
6.1.2 CPU
6.1.3 设备的访问权
6.2 共享内存
6.2.1 跨容器的进程间通信
6.2.2 开放内存容器
6.3 理解用户
6.3.1 Linux用户命令空间
6.3.2 run-as用户
6.3.3 用户和卷
6.4 能力——操作系统功能的授权
6.5 运行特权容器
6.6 使用加强工具创建更健壮的容器
6.6.1 指定额外的安全选项
6.6.2 微调LXC
6.7 因地制宜地构建容器
6.7.1 应用
6.7.2 高层的系统服务
6.7.3 低层的系统服务
6.8 小结
第2部分 镜像发布:如何打包软件
第7章 在镜像中打包软件
7.1 从容器构建镜像
7.1.1 打包Hello World
7.1.2 打包Git
7.1.3 审查文件系统的改动
7.1.4 Commit——创建新镜像
7.1.5 可配置的镜像属性
7.2 深入Docker镜像和层
7.2.1 深入联合文件系统
7.2.2 重新认识镜像、层、仓库和标签
7.2.3 镜像体积和层数限制
7.3 导出和导入扁平文件系统
7.4 版本控制的最佳实践
7.5 小结
第8章 构建自动化和高级镜像设置
8.1 使用Dockerfile打包Git
8.2 Dockerfile入门
8.2.1 元数据指令
8.2.2 文件系统指令
8.3 注入下游镜像在构建时发生的操作
8.4 使用启动脚本和多进程容器
8.4.1 验证环境相关的先决条件
8.4.2 初始化进程
8.5 加固应用镜像
8.5.1 内容可寻址镜像标识符
8.5.2 用户权限
8.5.3 SUID和SGID权限
8.6 小结
第9章 公有和私有软件分发
9.1 选择一个分发方法
9.1.1 分发选项图谱
9.1.2 选择标准
9.2 通过托管Registry发布
9.2.1 通过公有仓库发布:你好!Docker Hub
9.2.2 使用自动构建发布公有项目
9.2.3 私有托管仓库
9.3 私有Registry介绍
9.3.1 使用Registry镜像
9.3.2 从Registry使用镜像
9.4 镜像的手动发布和分发
9.5 镜像源代码分发工作流程
9.6 小结
第10章 运行自定义Registry
10.1 运行个人Registry
10.1.1 再度介绍镜像
10.1.2 介绍V2 API
10.1.3 定制镜像
10.2 集中式Registry的增强
10.2.1 创建一个反向代理
10.2.2 在反向代理上配置HTTPS (TLS)
10.2.3 添加身份认证层
10.2.4 客户端兼容性
10.2.5 应用于生产环境之前
10.3 持久化的BLOB存储
10.3.1 微软Azure托管远程存储
10.3.2 AWS S3托管远程存储
10.3.3 RADOS(Ceph)的内部远程存储
10.4 扩展访问和延迟的改进
10.4.1 与元数据缓存集成
10.4.2 使用存储中间件简化BLOB传输
10.5 通过通知集成
10.6 小结
第3部分 多容器和多主机环境
第11章 Docker Compose声明式环境
11.1 DockerCompose:第一天的启动并运行
11.1.1 用一个简单的开发环境入门
11.1.2 一个复杂的架构:分布式系统和Elasticsearch的集成
11.2 环境内的迭代
11.2.1 构建、启动和重新构建服务
11.2.2 服务伸缩和删除
11.2.3 迭代和持久化状态
11.2.4 网络和连接问题
11.3 开始一个新项目:三个示例中的Compose YAML
11.3.1 启动前的构建、环境、元数据和网络
11.3.2 已知的组件和绑定挂载卷
11.3.3 卷容器和扩展服务
11.4 小结
第12章 Docker Machine和Swarm集群
12.1 介绍Docker Machine
12.1.1 构建和管理Docker Machine
12.1.2 配置Docker客户端与远程Daemon工作
12.2 Docker Swarm介绍
12.2.1 借助于Docker Machine构建Swarm集群
12.2.2 Swarm扩展了Docker远程API
12.3 Swarm调度
12.3.1 Spread算法
12.3.2 用过滤器调整调度
12.3.3 BinPack和随机调度算法
12.4 Swarm服务发现
12.4.1 Swarm和单主机网络
12.4.2 服务发现生态系统和权宜之计
12.4.3 展望多主机网络
12.5 小结
后记