★★第1章 快速了解Docker /1 1.1 Docker简介 /1 1.1.1 通过“盖房子”来理解Docker—— 一次构建,处处运行 /1 1.1.2 Docker的适用人群 /3 1.1.3 Docker能解决什么问题 /4 1.1.4 如何快速入门 /6 1.2 Docker的基本组成 /7 1.2.1 Docker的三大组成部分 /7 1.2.2 Docker的三大核心概念 /8 1.3 入门必备基础知识 /10 1.3.1 Linux基本操作 /10 1.3.2 Shell基础命令 /22 1.3.3 网络调试基础 /27 1.3.4 Nginx配置 /34 1.3.5 区分物理机、虚拟机与容器 /41 1.4 安装Docker /44 1.4.1 在Windows中安装 /44 1.4.2 在macOS中安装 /47 1.4.3 在CentOS中安装 /49 1.4.4 在Ubuntu中安装 /50 1.4.5 配置镜像加速 /52 1.5 使用Docker桌面端工具 /54 1.5.1 基本功能介绍 /54 1.5.2 使用镜像仓库 /61 1.6 Docker常用命令1——镜像命令 /65 1.6.1 Dockerfile配置示例 /65 1.6.2 FROM命令 /66 1.6.3 MAINTAINER命令 /66 1.6.4 RUN命令 /67 1.6.5 ADD命令和COPY命令 /69 1.6.6 ENV命令 /69 1.6.7 WORKDIR命令 /70 1.6.8 EXPOSE命令 /70 1.6.9 CMD命令和ENTRYPOINT命令 /70 1.6.10 VOLUME命令 /71 1.7 Docker常用命令2——容器命令 /72 1.7.1 clone命令 /72 1.7.2 build命令 /73 1.7.3 run命令 /73 1.7.4 share命令 /75 1.7.5 push命令 /76 1.8 本章小结 /77

★★第2章 开始**个Docker项目 /78 2.1 项目开发的主要阶段 /78 2.1.1 一般项目开发的主要阶段 /78 2.1.2 Docker项目开发的主要阶段 /79 2.2 项目前期准备 /80 2.2.1 准备相关环境 /80 2.2.2 准备项目 /81 2.3 对Web项目进行容器化改造 /84 2.3.1 构建项目 /84 2.3.2 配置Nginx文件 /85 2.3.3 创建和配置Dockerfile文件 /88 2.4 构建项目镜像 /89 2.4.1 准备启动环境 /89 2.4.2 构建镜像 /89 2.5 在容器中运行项目镜像 /91 2.5.1 运行容器 /92 2.5.2 管理容器 /92 2.5.3 在浏览器中打开 /93 2.5.4 进程管理 /93 2.5.5 日志查看 /96 2.6 管理镜像 /97 2.6.1 了解镜像仓库 /97 2.6.2 *大的镜像仓库——Docker Hub /98 2.6.3 把项目镜像推送到远程镜像仓库中 /98 2.7 发布项目 /102 2.7.1 准备服务器环境 /102 2.7.2 部署项目 /103 2.7.3 确定容器是否运行正常 /103 2.7.4 线上验证 /105 2.8 本章小结 /106

★★第3章 了解Docker的核心原理 /107 3.1 熟悉Docker架构 /107 3.2 Linux的Namespace机制 /112 3.3 Linux底层的Cgroup隔离机制 /117 3.4 容器的生命周期 /120 3.4.1 容器的生命状态 /121 3.4.2 容器状态之间的关系 /121 3.4.3 终止进程的SIGKILL信号和SIGTERM信号 /123 3.5 Docker的网络与通信 /124 3.5.1 网络驱动程序 /124 3.5.2 网桥网络 /125 3.5.3 覆盖网络 /127 3.5.4 Macvlan网络 /131 3.5.5 禁用Docker上的网络 /133 3.6 Docker UnionFS的原理 /135 3.6.1 UnionFS的概念 /135 3.6.2 加载Docker镜像的原理 /135 3.7 Device Mapper存储 /138 3.7.1 镜像分层和共享 /138 3.7.2 在Docker中配置devicemapper /139 3.7.3 配置loop-lvm模式 /140 3.7.4 配置direct-lvm模式 /142 3.7.5 *佳实践 /146 3.8 Compose容器编排 /146 3.8.1 安装Docker Compose /147 3.8.2 基本使用 /148 3.8.3 验证服务是否正常 /150 3.8.4 绑定目录与更新应用 /150 3.8.5 在后台启动服务 /151 3.8.6 部署分布式应用 /151 3.9 Docker源码分析 /156 3.9.1 给初学者的建议 /156 3.9.2 学习Docker源码的思路 /157 3.9.3 容器是如何被启动的 /158 3.9.4 Docker Client是如何访问Docker Server的 /165 3.9.5 Docker Engine是如何工作的 /166 3.10 本章小结 /169

★★第4章 趁热打铁,Docker项目实战 /170 4.1 前端环境准备 /170 4.1.1 Web服务器——安装Nginx /170 4.1.2 服务器端环境——安装Node.js /172 4.2 前端应用1——Web技术栈 /174 4.2.1 Web框架1——React实战 /174 4.2.2 Web框架2——Vue.js实战 /176 4.2.3 Web框架3——其他 /177 4.3 前端应用2——Node.js /180 4.3.1 客户端渲染——CSR实战 /180 4.3.2 服务器端渲染——SSR实战 /180 4.4 后端环境准备 /182 4.4.1 注册中心——ZooKeeper /182 4.4.2 消息队列框架——Kafka /185 4.4.3 微服务框架——Dubbo /188 4.4.4 数据库1——安装Redis /191 4.4.5 数据库2——安装MySQL /192 4.4.6 数据库3——安装MongoDB /193 4.5 后端容器1——Java技术栈 /194 4.5.1 Java常用框架 /194 4.5.2 Java微服务容器化实战——Spring Boot /197 4.5.3 Java技术栈改造的常见问题 /202 4.6 后端容器2——Go语言技术栈 /204 4.6.1 Go语言常用框架 /204 4.6.2 Web框架改造1——Gin实战 /205 4.6.3 Web框架改造2——Beego实战 /209 4.6.4 Go语言技术栈改造的常见问题 /212 4.7 后端容器3——Python技术栈 /213 4.7.1 Python常见框架 /214 4.7.2 Web框架改造——Django实战 /215 4.7.3 微服务框架改造——Nameko实战 /220 4.7.4 Python技术栈改造的常见问题 /223 4.8 Docker测试实战 /224 4.8.1 Docker自动化测试 /225 4.8.2 使用Docker测试静态网站 /227 4.8.3 使用Docker进行UI自动化测试 /230 4.9 本章小结 /237

★★第5章 Docker的持续集成与发布 /238 5.1 准备镜像仓库 /238 5.1.1 仓库选型 /238 5.1.2 原生Docker仓库 /239 5.1.3 Harbor镜像仓库 /240 5.2 初始化容器配置文件 /244 5.2.1 生成Dockerfile文件 /244 5.2.2 Dockerfile文件配置的*佳实践 /245 5.3 通过Jenkins持续集成Docker /248 5.3.1 部署Jenkins /248 5.3.2 创建Jenkins流水线 /250 5.3.3 持续集成Docker /252 5.3.4 前端缓存优化 /255 5.4 通过Jenkins发布Docker /257 5.4.1 使用Jenkins流水线部署容器 /258 5.4.2 基于Jenkins Job的多步构建 /260 5.5 部署Docker容器监控 /262 5.5.1 容器监控的原理 /262 5.5.2 cAdvisor的部署与应用 /263 5.6 本章小结 /265

★★第6章 Docker的高级应用 /266 6.1 Docker的容器与进程 /266 6.1.1 容器是临时的 /266 6.1.2 进程的概念 /267 6.1.3 容器与进程 /269 6.2 Docker的文件存储与备份 /273 6.2.1 数据文件的存储 /273 6.2.2 卷存储 /274 6.2.3 绑定挂载 /276 6.2.4 tmpfs挂载 /277 6.2.5 数据文件的备份 /277 6.3 Docker的网络配置 /278 6.3.1 Flannel网络 /279 6.3.2 Weave网络 /280 6.3.3 Open vSwitch /281 6.3.4 Calico网络 /281 6.4 Docker的镜像优化 /281 6.4.1 常规优化手段 /282 6.4.2 案例实战 /287 6.5 Docker的安全策略与加固 /292 6.5.1 Docker的安全策略 /292 6.5.2 镜像安全 /293 6.5.3 容器网络的安全性 /294 6.5.4 网络攻击与防范 /294 6.6 Docker的集群管理1——Swarm /295 6.6.1 Swarm集群管理1——Docker原生管理 /295 6.6.2 Swarm集群管理2——Swarm集群搭建 /297 6.6.3 Swarm集群管理3——Swarm WordPress部署 /302 6.7 Docker的集群管理2——Kubernetes /303 6.7.1 Kubernetes容器编排1——简介 /303 6.7.2 Kubernetes容器编排2——架构 /304 6.7.3 Kubernetes容器编排3——安装 /306 6.7.4 Kubernetes容器编排4——基本使用 /310 6.7.5 Kubernetes应用实践1——Kafka容器编排 /315 6.7.6 Kubernetes应用实践2——Redis容器编排 /330 6.7.7 Kubernetes应用实践3——部署监控系统 /334 6.8 本章小结 /337

★★第7章 手把手打造企业级应用 /338 7.1 企业级云原生的持续交付模型——GitOps实战 /338 7.1.1 GitOps的兴起 /338 7.1.2 GitOps流水线 /340 7.1.3 GitOps*佳实践 /341 7.1.4 GitOps与可观测性 /341 7.1.5 GitOps的优势 /342 7.2 企业级容器化标准 /343 7.2.1 容器化的目标 /343 7.2.2 架构选型1——服务暴露 /344 7.2.3 架构选型2——网络选型 /348 7.2.4 架构选型3——存储系统 /349 7.2.5 服务治理1——部署发布 /356 7.2.6 服务治理2——服务监控 /358 7.2.7 服务治理3——日志采集 /360 7.2.8 服务治理4——链路追踪 /366 7.2.9 可靠性保障1——弹性部署 /368 7.2.10 可靠性保障2——集群 可靠性 /370 7.3 企业级方案1——微服务应用实践 /372 7.3.1 应用演变过程中的痛点 /372 7.3.2 微服务架构设计 /376 7.3.3 微服务容器化的难点 /381 7.3.4 服务网格1——服务网格与微服务 /384 7.3.5 服务网格2——使用Istio方案 /386 7.3.6 常见问题及解决方案 /395 7.4 企业级方案2——打造多项目并行隔离环境 /401 7.4.1 项目并行开发的痛点 /401 7.4.2 容器化隔离环境方案 /403 7.4.3 用Docker + Jenkins解决工程化问题 /408 7.4.4 实现隔离插件 /414 7.4.5 配置Nginx Cookie识别与代理 /417 7.4.6 使用Kustomize对Kubernetes进行声明式管理 /418 7.5 本章小结 /421