第一部分 开启容器之旅 2
第1章 使用Docker对应用进行容器化 2
1.1 了解容器化应用的优缺点 2
1.1.1 容器化应用不是直接在宿主机上运行的应用 3
1.1.2 容器化应用不是直接在虚拟机上运行的应用 3
1.1.3 了解容器的优点 3
1.1.4 了解容器化应用面临的挑战 4
1.2 了解容器的组成 5
1.2.1 Docker项目 5
1.2.2 Docker Hub Registry 6
1.2.3 Docker镜像和容器 7
1.2.4 docker命令 7
1.3 探究容器 9
1.4 小结 10
第2章 搭建容器运行时环境 11
2.1 标准Linux系统的Docker配置 12
2.1.1 Ubuntu的Docker配置 12
2.1.2 Fedora的Docker配置 14
2.1.3 Red Hat Enterprise Linux的Docker配置 17
2.1.4 其他操作系统的Docker配置 19
2.2 容器式Linux系统的Docker配置 20
2.2.1 Atomic Host的Docker配置 21
2.2.2 CoreOS的Docker配置 23
2.3 小结 25
第3章 搭建私有Docker Registry 26
3.1 获取和启动私有Docker registry 27
3.1.1 在Fedora中搭建Docker registry 27
3.1.2 在Ubuntu中搭建Docker registry 30
3.2 配置私有Docker registry 32
3.2.1 配置docker-registry包 32
3.2.2 配置registry容器 35
3.3 了解Docker镜像命名空间 35
3.4 小结 37
第二部分 玩转单个容器 40
第4章 运行容器镜像 40
4.1 以交互方式运行容器镜像 42
4.1.1 启动交互Bash shell 42
4.1.2 玩些基于字符的游戏 44
4.1.3 在容器内运行管理命令 45
4.2 运行容器化服务 46
4.2.1 运行容器化Web服务器 46
4.2.2 在容器中运行服务时进行资源限制 48
4.3 运行特权容器 49
4.4 小结 50
第5章 查找、拉取、保存和装载容器镜像 51
5.1 搜索镜像 51
5.1.1 用docker命令搜索镜像 52
5.1.2 在Docker Hub上检索镜像 54
5.2 其他repository 55
5.3 从Registry拉取镜像 57
5.4 保存和装载镜像 60
5.5 小结 61
第6章 为镜像添加标签 62
6.1 为镜像分配名称 63
6.2 为镜像分配标签 64
6.3 为镜像分配repository名 65
6.3.1 为镜像附加用户名 65
6.3.2 为镜像附加repository名 67
6.4 小结 68
第7章 探究容器 69
7.1 检视镜像和容器 69
7.2 检视镜像 70
7.2.1 用docker inspect检视基础镜像 70
7.2.2 用docker.inspect检视应用程序镜像 72
7.2.3 查看镜像的历史 73
7.3 检视正在运行的容器 73
7.3.1 启动要检视的容器 73
7.3.2 检视整个容器配置 74
7.3.3 检视单个容器属性 78
7.3.4 检视运行终端会话的容器 79
7.3.5 检视容器的内存和CPU限制 80
7.3.6 检视容器的SELinux上下文 81
7.4 寻找探查容器的更多方法 82
7.4.1 用docker top查看容器进程 82
7.4.2 用docker attach与容器内服务进行交互 83
7.4.3 用docker exec在正在运行的容器中启动新进程 83
7.4.4 用docker logs查看容器进程的输出 84
7.4.5 用docker diff查看容器的变化 84
7.4.6 用docker cp从容器复制文件 85
7.5 小结 85
第8章 容器的启动、停止与重启 86
8.1 停止和启动容器 86
8.1.1 停止和启动分离的容器 87
8.1.2 启动和停止交互式容器 88
8.2 重启容器 89
8.3 向容器发送信号 90
8.4 暂停容器与取消暂停 91
8.5 等待容器的退出代码 91
8.6 重命名容器 92
8.7 创建容器 92
8.8 小结 93
第9章 配置容器的存储 95
9.1 管理容器的存储 95
9.1.1 使用宿主机的卷 95
9.1.2 数据卷容器 97
9.1.3 对挂载写保护 97
9.1.4 挂载设备 98
9.1.5 挂载套接字 98
9.2 Docker宿主机的存储策略 99
9.2.1 附加外部存储到Docker宿主机 101
9.2.2 使用逻辑卷管理器扩展存储 101
9.3 小结 103
第10章 配置容器网络 104
10.1 将端口暴露给其他容器 105
10.2 将端口映射到宿主机外部 106
10.2.1 从被链接的容器映射端口 106
10.2.2 链接不同宿主机上的容器 108
10.3 docker0网桥的替代方法 109
10.3.1 改变容器的网络模式 109
10.3.2 细查网络选项 109
10.4 修改Docker网桥 111
10.5 小结 112
第11章 清理容器 113
11.1 为镜像和容器准备空间 113
11.2 删除镜像 114
11.2.1 删除单个镜像 114
11.2.2 删除多个镜像 116
11.3 删除容器 117
11.3.1 删除单个容器 117
11.3.2 删除多个容器 119
11.4 清理和保存容器 119
11.4.1 清理和保存Ubuntu容器 120
11.4.2 清理和保存Fedora容器 120
11.5 小结 121
第12章 构建容器镜像 122
12.1 进行简单的Docker构建 123
12.2 通过Dockerfile设置要执行的命令 125
12.2.1 使用CMD指令 125
12.2.2 使用ENTRYPOINT指令 126
12.2.3 使用RUN指令 127
12.2.4 通过Dockerfile向镜像添加文件 128
12.3 通过Dockerfile暴露镜像的端口 128
12.4 在Dockerfile中设置环境变量 129
12.5 在Dockerfile中设置标签 130
12.6 使用其他docker build命令选项 131
12.7 构建容器的技巧 132
12.7.1 清理镜像 132
12.7.2 保持构建目录较小 132
12.7.3 保持容器简单 133
12.7.4 管理进行缓存的方法 133
12.8 小结 133
第三部分 在云环境上运行容器 136
第13章 使用超级特权容器 136
13.1 在Atomic Host中使用超级特权容器 137
13.2 了解超级特权容器 137
13.2.1 开放给宿主机的权限 137
13.2.2 访问宿主机的进程表 137
13.2.3 访问宿主机的网络接口 138
13.2.4 访问宿主机的进程间通信 139
13.2.5 访问宿主机的文件系统 139
13.3 准备使用超级特权容器 140
13.4 使用atomic命令 140
13.4.1 用atomic安装SPC镜像 141
13.4.2 用atomic获取SPC镜像的信息 141
13.4.3 用atomic运行SPC镜像 142
13.4.4 用atomic停止和重启SPC 143
13.4.5 更新SPC镜像 143
13.4.6 卸载SPC镜像 144
13.5 尝试一些SPC 144
13.5.1 运行RHEL工具SPC 144
13.5.2 运行日志记录(rsyslog)SPC 145
13.5.3 运行系统监控(sadc)SPC 147
13.6 小结 149
第14章 用Cockpit管理云中的容器 150
14.1 了解Cockpit 151
14.2 着手使用Cockpit 154
14.3 将服务器添加到Cockpit 155
14.4 从Cockpit管理容器 156
14.4.1 向Cockpit添加容器镜像 156
14.4.2 从Cockpit运行镜像 157
14.5 从Cockpit管理网络接口 159
14.6 从Cockpit配置存储 161
14.7 在Cockpit中做其他管理工作 162
14.8 在Cockpit中打开终端 162
14.9 小结 163
第四部分 管理多容器 166
第15章 使用Kubernetes进行容器编排 166
15.1 了解Kubernetes 167
15.2 开始使用Kubernetes 168
15.3 搭建一体化Kubernetes 169
15.3.1 安装并启动Kubernetes 170
15.3.2 在Kubernetes中启动一个pod 171
15.3.3 使用Kubernetes 173
15.4 小结 174
第16章 创建Kubernetes集群 176
16.1 了解Kubernetes的高级特性 176
16.2 搭建Kubernetes集群 177
16.2.1 第1步:安装Linux 177
16.2.2 第2步:搭建Kubernetes master 178
16.2.3 第3步:搭建Kubernetes node 180
16.2.4 第4步:用Flannel进行网络设置 181
16.3 启动Kubernetes集群中的pod 182
16.4 删除复制控制器、服务和pod 186
16.5 小结 187
第五部分 开发容器 190
第17章 开发Docker容器 190
17.1 为容器开发做好准备 190
17.1.1 为Red Hat系统选择容器开发环境 190
17.1.2 来自Docker的容器开发环境 194
17.2 采用良好的开发实践 195
17.2.1 将文件包含到构建中或排除出去 195
17.2.2 利用分层 196
17.2.3 管理构建中的软件包 197
17.3 进一步了解容器构建 198
17.4 小结 198
第18章 探索Dockerfile文件示例 199
18.1 细察官方Docker镜像的Dockerfile 200
18.1.1 查看CentOS的Dockerfile 200
18.1.2 查看busybox的Dockerfile 202
18.2 细察来自开源项目的Dockerfile 203
18.2.1 查看WordPress的Dockerfile 203
18.2.2 查看MySQL的Dockerfile 205
18.3 细察桌面和个人使用的Dockerfile 207
18.3.1 查看Chrome的Dockerfile 207
18.3.2 查看Firefox的Dockerfile 210
18.4 小结 213