第一本 Docker 书

🌙
手机阅读
本文目录结构

第一本 Docker 书

编辑推荐

  • Docker 技术图书中文版。
  • Docker 核心团队成员著作。
  • 非常适合作为学习 Docker 的第 1 本入门书。
  • 本书基于 Docker 1.9 及以上版本。

Docker 是一个开源的应用容器引擎,让开发者可以将他们的应用和依赖包打包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口。几乎没有性能开销,可以很容易地在机器和数据中心中运行。重要的是,它不依赖于任何语言、框架或包装系统。

内容简介

Docker 是一个开源的应用容器引擎,开发者可以利用 Docker 打包自己的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

本书由 Docker 公司前服务与支持副总裁 James Turnbull 编写,是 Docker 开发指南。本书专注于 Docker 1.9 及以上版本,指导读者完成 Docker 的安装、部署、管理和扩展,带领读者经历从测试到生产的整个开发生命周期,让读者了解 Docker 适用于什么场景。书中先介绍 Docker 及其组件的基础知识,然后介绍用 Docker 构建容器和服务来完成各种任务:利用 Docker 为新项目建立测试环境,演示如何使用持续集成的工作流集成 Docker,如何构建应用程序服务和平台,如何使用 Docker 的 API,如何扩展 Docker。

作者简介

James 是一位技术作家,还是一名开源极客。他的大作是一本讲述流行开源日志工具的书——The LogStash Book。James 还写了两本关于 Puppet 的书,一本是 Pro Puppet,另一本是较早的 Pulling Strings with Puppet: Configuration Management Made Easy。此外,James 还写了 Pro Linux System Administration、Pro Nagios 2.0 和 Hardening Linux 这三本书。

James 是 Kickstarter 公司的 CTO。之前,James 曾担任 Docker 公司服务与支持副总裁、Venmo 公司工程副总裁和 Puppet Labs 的技术运

李兆海 网名 Googol Lee。使用 Googol 这个名字真的是因为“10 的 100 次方”这个意思,和后来的 Google 公司没有一点儿关系。多年后端程序员,早期以 C、C++ 为主,后来转向 Python,现在以 Go 为生。曾写过《Golang 初探》发表于 2011 年 2 月号《程序员》。Docker 早期使用者。平时喜欢乱翻书,遇到感兴趣的都会研究一番。

刘斌 具有 10 余年软件开发经验,关注后台开发技术和各种编程语言。做过电子商务、金融、企业系统以及 Android 手机开发;写过 Delphi,也兼做系统管理员和 DBA(现在都改叫 DevOps 了);既做后台应用,也要调用前台 CSS 和 JavaScript,可还是不敢自称“全栈”(Full Stack);今又舶来“增长黑客”(Growth Hacker),我想我要做一个“增长工程师”(Growth Engineer)。

巨震 北京大学软件工程硕士,服务器端开发者。目前就职于创业公司,使用 Node.js、Golang 进行服务器端开发。2013 年年底开始研究 Docker,是 Docker 中文社区的活跃贡献者,负责 Docker 技术文章和视频的翻译、校对工作。生活中喜欢美食、骑行,热衷于 PC 硬件,喜爱折腾,热爱一切计算机相关的技术,坚信技术改变世界。崇拜的技术传奇人物是前 id Software 首席程序员、现 Oculus VR 首席技术官 John Carmack。

目录

第 1 章 简介 1

  • 1.1 Docker 简介 2
  • 1.1.1 提供一个简单、轻量的建模方式 2
  • 1.1.2 职责的逻辑分离 3
  • 1.1.3 快速、高效的开发生命周期 3
  • 1.1.4 鼓励使用面向服务的架构 3
  • 1.2 Docker 组件 3
  • 1.2.1 Docker 客户端和服务器 4
  • 1.2.2 Docker 镜像 5
  • 1.2.3 Registry 5
  • 1.2.4 容器 5
  • 1.3 能用 Docker 做什么 6
  • 1.4 Docker 与配置管理 7
  • 1.5 Docker 的技术组件 8
  • 1.6 本书的内容 9
  • 1.7 Docker 资源 10

第 2 章 安装 Docker 11

  • 2.1 安装 Docker 的先决条件 12
  • 2.2 在 Ubuntu 和 Debian 中安装 Docker 13
  • 2.2.1 检查前提条件 14
  • 2.2.2 安装 Docker 16
  • 2.2.3 Docker 与 UFW 17
  • 2.3 在 Red Hat 和 Red Hat 系发行版中安装 Docker 17
  • 2.3.1 检查前提条件 18
  • 2.3.2 安装 Docker 19
  • 2.3.3 在 Red Hat 系发行版中启动 Docker 守护进程 21
  • 2.4 在 OS X 中安装 Docker Toolbox 22
  • 2.4.1 在 OS X 中安装 Docker Toolbox 22
  • 2.4.2 在 OS X 中启动 Docker Toolbox 23
  • 2.4.3 测试 Docker Toolbox 24
  • 2.5 在 Windows 中安装 Docker Toolbox 24
  • 2.5.1 在 Windows 中安装 Docker Toolbox 25
  • 2.5.2 在 Windows 中启动 Docker Toolbox 25
  • 2.5.3 测试 Docker Toolbox 26
  • 2.6 使用本书的 Docker Toolbox 示例 26
  • 2.7 Docker 安装脚本 27
  • 2.8 二进制安装 28
  • 2.9 Docker 守护进程 28
  • 2.9.1 配置 Docker 守护进程 29
  • 2.9.2 检查 Docker 守护进程是否正在运行 30
  • 2.10 升级 Docker 31
  • 2.11 Docker 用户界面 32
  • 2.12 小结 32

第 3 章 Docker 入门 33

  • 3.1 确保 Docker 已经就绪 33
  • 3.2 运行我们的第一个容器 34
  • 3.3 使用第一个容器 36
  • 3.4 容器命名 38
  • 3.5 重新启动已经停止的容器 39
  • 3.6 附着到容器上 40
  • 3.7 创建守护式容器 40
  • 3.8 容器内部都在干些什么 41
  • 3.9 Docker 日志驱动 42
  • 3.10 查看容器内的进程 43
  • 3.11 Docker 统计信息 44
  • 3.12 在容器内部运行进程 44
  • 3.13 停止守护式容器 45
  • 3.14 自动重启容器 46
  • 3.15 深入容器 47
  • 3.16 删除容器 48
  • 3.17 小结 49

第 4 章 使用 Docker 镜像和仓库 50

  • 4.1 什么是 Docker 镜像 50
  • 4.2 列出镜像 52
  • 4.3 拉取镜像 55
  • 4.4 查找镜像 57
  • 4.5 构建镜像 58
  • 4.5.1 创建 Docker Hub 账号 59
  • 4.5.2 用 Docker 的 commit 命令创建镜像 60
  • 4.5.3 用 Dockerfile 构建镜像 62
  • 4.5.4 基于 Dockerfile 构建新镜像 65
  • 4.5.5 指令失败时会怎样 67
  • 4.5.6 Dockerfile 和构建缓存 68
  • 4.5.7 基于构建缓存的 Dockerfile 模板 69
  • 4.5.8 查看新镜像 70
  • 4.5.9 从新镜像启动容器 70
  • 4.5.10 Dockerfile 指令 74
  • 4.6 将镜像推送到 Docker Hub 88
  • 4.7 删除镜像 92
  • 4.8 运行自己的 Docker Registry 94
  • 4.8.1 从容器运行 Registry 94
  • 4.8.2 测试新 Registry 95
  • 4.9 其他可选 Registry 服务 96
  • 4.10 小结 96

第 5 章 在测试中使用 Docker 97

  • 5.1 使用 Docker 测试静态网站 97
  • 5.1.1 Sample 网站的初始 Dockerfile 98
  • 5.1.2 构建 Sample 网站和 Nginx 镜像 100
  • 5.1.3 从 Sample 网站和 Nginx 镜像构建容器 102
  • 5.1.4 修改网站 104
  • 5.2 使用 Docker 构建并测试 Web 应用程序 105
  • 5.2.1 构建 Sinatra 应用程序 105
  • 5.2.2 创建 Sinatra 容器 107
  • 5.2.3 扩展 Sinatra 应用程序来使用 Redis 110
  • 5.2.4 将 Sinatra 应用程序连接到 Redis 容器 113
  • 5.2.5 Docker 内部连网 114
  • 5.2.6 Docker Networking 119
  • 5.2.7 使用容器连接来通信 131
  • 5.2.8 连接容器小结 132
  • 5.3 Docker 用于持续集成 132
  • 5.3.1 构建 Jenkins 和 Docker 服务器 133
  • 5.3.2 创建新的 Jenkins 作业 137
  • 5.3.3 运行 Jenkins 作业 141
  • 5.3.4 与 Jenkins 作业有关的下一步 143
  • 5.3.5 Jenkins 设置小结 143
  • 5.4 多配置的 Jenkins 143
  • 5.4.1 创建多配置作业 143
  • 5.4.2 测试多配置作业 147
  • 5.4.3 Jenkins 多配置作业小结 149
  • 5.5 其他选择 149
  • 5.5.1 Drone 149
  • 5.5.2 Shippable 149
  • 5.6 小结 149

第 6 章 使用 Docker 构建服务 151

  • 6.1 构建第一个应用 151
  • 6.1.1 Jekyll 基础镜像 152
  • 6.1.2 构建 Jekyll 基础镜像 153
  • 6.1.3 Apache 镜像 153
  • 6.1.4 构建 Jekyll Apache 镜像 154
  • 6.1.5 启动 Jekyll 网站 155
  • 6.1.6 更新 Jekyll 网站 158
  • 6.1.7 备份 Jekyll 卷 159
  • 6.1.8 扩展 Jekyll 示例网站 161
  • 6.2 使用 Docker 构建一个 Java 应用服务 161
  • 6.2.1 WAR 文件的获取程序 161
  • 6.2.2 获取 WAR 文件 162
  • 6.2.3 Tomecat7 应用服务器 163
  • 6.2.4 运行 WAR 文件 165
  • 6.2.5 基于 Tomcat 应用服务器的构建服务 166
  • 6.3 多容器的应用栈 169
  • 6.3.1 Node.js 镜像 169
  • 6.3.2 Redis 基础镜像 172
  • 6.3.3 Redis 主镜像 173
  • 6.3.4 Redis 副本镜像 174
  • 6.3.5 创建 Redis 后端集群 174
  • 6.3.6 创建 Node 容器 178
  • 6.3.7 捕获应用日志 180
  • 6.3.8 Node 程序栈的小结 183
  • 6.4 不使用 SSH 管理 Docker 容器 183
  • 6.5 小结 185

第 7 章 Docker 编配和服务发现 186

  • 7.1 Docker Compose 187
  • 7.1.1 安装 Docker Compose 187
  • 7.1.2 获取示例应用 188
  • 7.1.3 docker-compose.yml 文件 191
  • 7.1.4 运行 Compose 193
  • 7.1.5 使用 Compose 195
  • 7.1.6 Compose 小结 197
  • 7.2 Consul、服务发现和 Docker 197
  • 7.2.1 构建 Consul 镜像 199
  • 7.2.2 在本地测试 Consul 容器 202
  • 7.2.3 使用 Docker 运行 Consul 集群 203
  • 7.2.4 启动具有自启动功能的 Consul 节点 206
  • 7.2.5 启动其余节点 207
  • 7.2.6 配合 Consul,在 Docker 里运行一个分布式服务 212
  • 7.3 Docker Swarm 221
  • 7.3.1 安装 Swarm 222
  • 7.3.2 创建 Swarm 集群 222
  • 7.3.3 创建容器 225
  • 7.3.4 过滤器 227
  • 7.3.5 策略 229
  • 7.3.6 小结 230
  • 7.4 其他编配工具和组件 230
  • 7.4.1 Fleet 和 etcd 230
  • 7.4.2 Kubernetes 231
  • 7.4.3 Apache Mesos 231
  • 7.4.4 Helios 231
  • 7.4.5 Centurion 231
  • 7.5 小结 231

第 8 章 使用 Docker API 233

  • 8.1 Docker API 233
  • 8.2 初识 Remote API 234
  • 8.3 测试 Docker Remote API 236
  • 8.3.1 通过 API 来管理 Docker 镜像 237
  • 8.3.2 通过 API 管理 Docker 容器 239
  • 8.4 改进 TProv 应用 242
  • 8.5 对 Docker Remote API 进行认证 246
  • 8.5.1 建立证书授权中心 246
  • 8.5.2 创建服务器的证书签名请求和密钥 248
  • 8.5.3 配置 Docker 守护进程 250
  • 8.5.4 创建客户端证书和密钥 251
  • 8.5.5 配置 Docker 客户端开启认证功能 253
  • 8.6 小结 254

第 9 章 获得帮助和对 Docker 进行改进 255

  • 9.1 获得帮助 255
  • 9.1.1 Docker 用户、开发邮件列表及论坛 255
  • 9.1.2 IRC 上的 Docker 256
  • 9.1.3 GitHub 上的 Docker 256
  • 9.2 报告 Docker 的问题 257
  • 9.3 搭建构建环境 257
  • 9.3.1 安装 Docker 257
  • 9.3.2 安装源代码和构建工具 257
  • 9.3.3 检出源代码 258
  • 9.3.4 贡献文档 258
  • 9.3.5 构建开发环境 259
  • 9.3.6 运行测试 261
  • 9.3.7 在开发环境中使用 Docker 261
  • 9.3.8 发起 pull request 262
  • 9.3.9 批准合并和维护者 263
  • 9.4 小结 264

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了