编辑推荐
    快速掌握Docker容器,打造面向开发者与运营者的部署系统,轻松应对技术冲击。
应用部署系统,实现“一次构建,处处运行”。
构建无虚拟机负荷的轻量级虚拟环境,不受约束实现快速处理。
      内容简介
   本书从Docker基础理论出发,更侧重实际业务中的技术与应用。重点在于后半部分在、Google Colud Platform等平台上的使用方法,以及Rails与Django应用程序构建方法等,都是能够直接运用于实操的技术点。本书是利用Docker构建开发系统、测试系统、操作系统的杰出指南,非常适合一线开发人员。
     作者简介
   李在弘
目前管理PYRASIS.COM个人网站,编写并发布了多种技术文档。曾在NC Software参与开发游戏《天堂永恒》(Lineage Eternal),并在Ntreev开发移动游戏服务器,还曾负责FFS File System Driver for Windows开源项目。近期正在研究Cocos2d-x移动游戏引擎的Tizen应用,现在主要关注操作系统内核、文件系统、软件开发自动化、游戏引擎、云平台、分布式处理系统。梦想打造个性化的全自动家居,以及设立开源基金会。 
主要著作 《Windows项目必读实用工具:Subversion, Trac, CruiseControl.NET》  
     目录
   目录   
第1 章 Docker 1  
1.1 虚拟机与Docker 3  
1.1.1 虚拟机 4  
1.1.2 Docker 5  
1.1.3 Linux 容器 6  
1.2 Docker 镜像与容器 8  
第2 章 安装Docker 11  
2.1 Linux 11  
2.1.1 自动安装脚本 11  
2.1.2 Ubuntu 11  
2.1.3 RedHat Enterprise Linux、CentOS 12  
2.1.4 使用最新二进制文件 12  
2.2 Mac OS X 13  
2.3 Windows 16  
第3 章 使用Docker 23  
3.1 使用search 命令搜索镜像 23  
3.2 使用pull 命令下载镜像 25  
3.3 使用images 命令列出镜像目录 25  
3.4 使用run 命令创建容器 25  
3.5 使用ps 命令查看容器列表 26  
3.6 使用start 命令启动容器 26  
3.7 使用restart 命令重启容器 27  
3.8 使用attach 命令连接容器 27  
3.9 使用exec 命令从外部运行容器内的命令 27  
3.10 使用stop 命令终止容器 28  
3.11 使用rm 命令删除容器 28  
3.12 使用rmi 命令删除镜像 29  
第4 章 创建Docker 镜像 31  
4.1 熟悉Bash 31  
目录  
4.2 编写Dockerfile 36  
4.3 使用build 命令创建镜像 37  
第5 章 查看Docker 39  
5.1 使用history 命令查看镜像历史 39  
5.2 使用cp 命令复制文件 40  
5.3 使用commit 命令从容器的修改中创建镜像 40  
5.4 使用diff 命令检查容器文件的修改 40  
5.5 使用inspect 命令查看详细信息 41  
第6 章 灵活使用Docker 43  
6.1 搭建Docker 私有仓库 43  
6.1.1 存储镜像数据到本地 43  
6.1.2 使用push 命令上传镜像 44  
6.1.3 存储镜像数据到Amazon S3 45  
6.1.4 使用默认认证 46  
6.2 连接Docker 的容器 52  
6.3 连接到其他服务器的Docker 容器 53  
6.4 使用Docker 数据卷 56  
6.5 使用Docker 数据卷容器 59  
6.6 创建Docker 基础镜像 60  
6.6.1 创建Ubuntu 基础镜像 60  
6.6.2 创建CentOS 基础镜像 61  
6.6.3 创建空基础镜像 62  
6.7 在Docker 内运行Docker 64  
第7 章 详细了解Dockerfile 67  
7.1 .dockerignore 68  
7.2 FROM 68  
7.3 MAINTAINER 69  
7.4 RUN 69  
7.5 CMD 70  
7.6 ENTRYPOINT 71  
7.7 EXPOSE 73  
7.8 ENV 73  
7.9 ADD 74  
7.10 COPY 76  
7.11 VOLUME 77  
7.12 USER 77  
7.13 WORKDIR 78  
7.14 ONBUILD 79  
第8 章 使用Docker 部署应用程序 81  
8.1 向一台服务器部署应用程序 81  
8.1.1 在开发者PC 安装Git 并创建仓库 82  
8.1.2 在开发者PC 中使用Node.js 编写Web 服务器 83  
8.1.3 在开发者PC 中编写Dockerfile 文件 84  
8.1.4 在开发者PC 中生成SSH 密钥 85  
8.1.5 在服务器端安装Git 并创建仓库 86  
8.1.6 在服务器中安装Docker 87  
8.1.7 在服务器中安装SSH 密钥 88  
8.1.8 在服务器中安装Git Hook 89  
8.1.9 在开发者PC 中推送源代码 90  
8.2 向多台服务器部署应用程序 91  
8.2.1 在开发者PC 安装Git 并创建仓库 92  
8.2.2 在开发者PC 中使用Node.js 编写Web 服务器 93  
8.2.3 在开发者PC 中编写Dockerfile 文件 94  
8.2.4 在开发者PC 中生成SSH 密钥 95  
8.2.5 在部署服务器安装Git 并创建仓库 96  
8.2.6 在部署服务器中生成SSH 密钥 97  
8.2.7 在部署服务器中安装Docker 98  
8.2.8 在部署服务器中安装Docker 注册服务器 99  
8.2.9 在部署服务器中安装SSH 密钥 100  
8.2.10 在部署服务器中安装Git Hook 101  
8.2.11 在应用程序服务器中安装Docker 103  
8.2.12 在应用程序服务器中安装SSH 密钥 104  
8.2.13 在开发者PC 中推送源代码 105  
第9 章 Docker 监控 107  
9.1 编写监控服务器Dockerfile 108  
9.2 编写应用程序服务器Dockerfile 111  
9.3 在Web 浏览器中查看图表 114  
第10 章 在Amazon Web Services 中使用Docker 117  
10.1 在Amazon EC2 中使用Docker 117  
10.2 在AWS Elastic Beanstalk 中使用Docker 119  
10.2.1 在AWS 控制台部署Docker 应用程序 119  
10.2.2 使用Docker Hub 公开仓库镜像 129  
10.2.3 使用Docker Hub 私有仓库的镜像 131  
10.2.4 使用Git 部署Elastic Beanstalk Docker 应用程序 139  
第11 章 在Google Cloud Platform 中使用Docker 145  
11.1 安装Goolge Cloud SDK 145  
11.2 在Compute Engine 中使用Docker 147  
11.3 在Container Engine 中使用Docker 148  
第12 章 使用Docker Hub 151  
12.1 加入Docker Hub 151  
12.2 使用push 命令上传镜像 153  
12.3 创建Docker Hub 私有仓库 155  
12.4 使用Docker Hub Automated Build 157  
第13 章 使用Docker Remote API 167  
13.1 使用Docker Remote API Python 库 169  
13.1.1 创建并启动容器 169  
13.1.2 创建镜像 173  
13.1.3 显示容器列表 175  
13.1.4 显示镜像列表 176  
13.1.5 其他示例与函数 176  
13.2 使用Docker Remote API Python 库进行HTTPS 通信 187  
13.2.1 创建证书 187  
13.2.2 使用Python 库 191  
第14 章 使用CoreOS 193  
14.1 在VirtualBox 中安装CoreOS 196  
使用systemd 运行服务 205  
14.2 使用Vagrant 安装CoreOS 206  
14.3 使用etcd 211  
14.3.1 创建etcd 键与目录 211  
14.3.2 输出etcd 键与目录列表 212  
14.3.3 设置自动删除etcd 键与目录 212  
14.3.4 监视etcd 键 213  
14.3.5 etcd 其他命令 214  
14.4 使用fleet 214  
14.4.1 输出fleet 机器列表 215  
14.4.2 使用fleet 运行Unit 215  
14.4.3 输出fleet Unit 列表 217  
14.4.4 查看fleet Unit 状态 217  
14.4.5 测试fleet 的自动恢复功能 218  
14.4.6 使用fleet 专用选项 219  
14.4.7 灵活使用fleet Unit 文件模板 222  
14.4.8 灵活使用fleet sidekick 模型 224  
14.4.9 fleet 其他命令 227  
14.5 在云服务中使用CoreOS 227  
14.5.1 在Amazon EC2 中使用CoreOS 227  
14.5.2 在Google Compute Engine 中使用CoreOS 229  
第15 章 使用Docker 搭建WordPress 博客 231  
15.1 编写WordPress Dockerfile 文件 232  
15.2 编写MySQL 数据库Dockerfile 文件 233  
15.3 创建WordPress 与数据库容器 236  
第16 章 使用Docker 构建Ruby on Rails 应用 237  
16.1 安装Ruby 与Rails 238  
16.2 编写Rails Dockerfile 240  
16.3 编写PostgreSQL 数据库Dockerfile 文件 245  
16.4 创建Rails 与数据库容器 247  
第17 章 使用Docker 构建Django 应用 249  
17.1 安装Django 250  
17.2 编写Django Dockerfile 文件 253  
17.3 编写Oracle 数据库Dockerfile 文件 258  
17.4 创建Django 与数据库容器 261  
第18 章 Docker 应用案例 263  
18.1 与负载平衡相关的自动伸缩 263  
18.2 整合开发、测试、运营 264  
18.3 轻松迁移服务 265  
18.4 用于测试 267  
第19 章 Docker 命令与选项列表 269  
19.1 attach 270  
19.2 build 271  
19.3 Commit 273  
19.4 cp 273  
19.5 create 274  
19.6 diff 277  
19.7 events 277  
19.8 exec 278  
19.9 export 280  
19.10 history 280  
19.11 images 281  
19.12 import 281  
19.13 info 282  
19.14 inspect 283  
19.15 kill 284  
19.16 load 284  
19.17 login 285  
19.18 logout 286  
19.19 logs 286  
19.20 port 287  
19.21 pause 287  
19.22 ps 287  
19.23 pull 288  
19.24 push 289  
19.25 restart 289  
19.26 rm 289  
19.27 rmi 290  
19.28 run 291  
19.29 save 296  
19.30 search 297  
19.31 start 297  
19.32 stop 298  
19.33 tag 298  
19.34 top 299  
19.35 unpause 299  
19.36 version 300  
19.37 wait 300  
附录 编译Docker 301      
前言/序言
       
				 
				
				
					《容器化之道:从零开始的现代应用部署》  在快速迭代和持续交付成为软件开发常态的今天,如何高效、稳定、可移植地部署和管理应用程序,是每一位开发者和运维工程师必须面对的核心挑战。传统的部署方式往往伴随着环境配置复杂、依赖冲突频发、迁移成本高昂等诸多痛点,严重制约了开发效率和业务的敏捷性。正是为了解决这些根深蒂固的问题,一种革命性的技术应运而生——容器化。  《容器化之道:从零开始的现代应用部署》并非一本关于特定工具的教程,而是一次深入探索容器化技术核心理念、设计哲学及其在现代化应用架构中扮演的关键角色的旅程。本书旨在为读者构建一个全面而深刻的理解框架,帮助您摆脱对单一工具的依赖,真正掌握容器化背后的原理,并能够灵活地将其应用于各种复杂的部署场景。  第一部分:理解容器化 — 核心概念与演进之路  在深入实践之前,我们首先需要理解“容器化”究竟是什么,以及它为何能解决传统部署难题。本部分将带您回顾软件部署的历史演变,从简单的脚本部署到虚拟机时代,再到容器技术的兴起。我们将详细解析容器的核心特征:轻量级、隔离性、可移植性、一致性。     为何需要容器? 深入剖析传统部署方式的痛点,例如“在我机器上可以运行”的尴尬、环境不一致导致的部署失败、资源浪费等,从而引出容器化作为解决方案的必然性。    容器与虚拟机:异同探析 详细对比容器和虚拟机的底层工作原理,重点解释容器如何共享宿主机内核,以及这种共享带来的效率提升和潜在的安全考量。理解它们在资源利用、启动速度、隔离级别等方面的差异,帮助您在不同场景下做出明智的技术选择。    容器化技术栈概览 介绍构成现代容器化生态的关键组件,如容器运行时(如containerd, CRI-O)、镜像构建工具(如Buildah)以及容器编排系统(如Kubernetes)。本书将聚焦于理解这些组件如何协同工作,而不是深入讲解某个特定工具的API。    容器化设计的哲学 探讨容器化所倡导的“一次构建,随处运行”的理念,以及它如何促进微服务架构、DevOps文化的落地。理解容器化背后的设计哲学,将帮助您更好地应用这项技术。  第二部分:构建可移植的应用 — 容器镜像的设计与管理  容器的核心在于其不可变的基础——镜像。一个优秀的镜像,是实现应用跨环境无缝迁移的关键。本部分将聚焦于如何设计、构建和管理高质量的容器镜像。     镜像的组成与原理 剖析容器镜像的分层结构,理解UnionFS/OverlayFS等文件系统的工作机制,以及为何分层能够实现高效的存储和分发。    编写高效的Dockerfile 深入探讨Dockerfile中各个指令的含义、最佳实践以及潜在的陷阱。我们将重点关注如何构建体积小、安全性高、可维护性强的镜像。例如,如何利用多阶段构建(multi-stage builds)来减小最终镜像的体积,如何选择合适的基线镜像,如何安全地处理敏感信息。    最小化镜像体积的艺术 探讨各种减小镜像体积的策略,包括使用更精简的基础镜像(如Alpine Linux)、清理不必要的依赖、优化文件复制等。    安全地构建镜像 讲解如何在构建过程中提升镜像的安全性,例如,避免在镜像中包含敏感信息、使用非root用户运行构建过程、定期扫描镜像中的漏洞等。    镜像的生命周期管理 讨论镜像的注册与分发,包括公共镜像仓库(如Docker Hub)和私有镜像仓库的使用,以及如何管理镜像的版本和生命周期。  第三部分:编排与调度 — 走向分布式容器管理  当应用规模增大,需要部署和管理成百上千个容器时,手动操作将变得不可行。容器编排系统应运而生,它们负责自动化容器的部署、扩展、联网和管理。本部分将深入理解容器编排的核心概念和工作原理,为构建大规模分布式系统奠定基础。     编排的挑战与必要性 分析在分布式环境中管理大量容器所面临的挑战,如服务发现、负载均衡、滚动更新、故障恢复等,以及为何需要专门的编排系统来解决这些问题。    声明式配置与期望状态 讲解容器编排系统中普遍采用的声明式配置模型,即用户只需定义期望的应用状态,系统会自动将其维持在该状态。理解这一核心理念对于使用任何编排工具都至关重要。    核心编排概念解析 深入探讨编排系统中的关键概念,如Pod(或Service)、ReplicaSet(或Deployment)、Service、Ingress、Volume等。本书将从概念层面解释这些资源的用途和相互关系。    服务发现与负载均衡 剖析容器编排系统如何实现服务之间的自动发现和负载均衡,以确保高可用性和可扩展性。    滚动更新与零宕机部署 讲解容器编排系统如何支持应用程序的平滑升级,实现滚动更新和零宕机部署,最大程度地减少对用户的影响。    持久化存储的管理 探讨在容器化环境中如何管理应用程序的持久化数据,包括理解Volume、PersistentVolume、StorageClass等概念,以及它们在数据生命周期管理中的作用。  第四部分:容器化网络的奥秘  网络是分布式系统的血脉。在容器化环境中,为容器提供高效、安全、灵活的网络连接是构建复杂应用的基石。本部分将深入探讨容器网络的设计和实现。     容器网络模型基础 讲解Linux网络命名空间、虚拟网桥(veth pair)、Linux Bridge等底层技术,这些技术是容器网络隔离和连接的基础。    CNI(Container Network Interface) 介绍CNI作为容器运行时与网络插件之间的标准接口,以及它如何促进容器网络插件生态的繁荣。    容器网络插件的功能与类型 探讨不同类型的容器网络插件(如Overlay网络、路由网络),以及它们如何解决跨主机通信、IP地址管理、网络策略等问题。    网络策略与安全隔离 讲解如何通过网络策略来控制容器之间的访问权限,实现细粒度的网络安全隔离,防止未授权的访问。    服务网格(Service Mesh)的引入 简要介绍服务网格的概念,以及它如何为微服务架构提供更高级别的通信控制、可观察性和安全性。  第五部分:容器化生态与未来趋势  容器化技术仍在快速发展,并不断演进,形成了庞大而活跃的生态系统。本部分将带领读者展望容器化技术的未来,以及其在更广阔的领域中的应用。     DevOps与容器化 深入分析容器化技术如何成为DevOps实践的催化剂,促进开发、测试、部署、运维各个环节的自动化和协作。    云原生(Cloud Native)架构 探讨容器化与云原生理念的紧密联系,以及它们如何共同构建现代化、可伸缩、弹性、韧性的应用架构。    Serverless与容器 分析Serverless计算模型与容器化技术的融合,以及这种融合带来的新的应用开发和部署模式。    安全性在容器化中的挑战与对策 总结容器化安全性的主要挑战,并探讨多层次的安全防护策略,包括镜像安全、运行时安全、网络安全、身份认证与授权等。    面向未来的探索 展望容器化技术在边缘计算、物联网、AI/ML等新兴领域的应用前景,以及未来可能的技术发展方向。  《容器化之道:从零开始的现代应用部署》的目标是为您提供一套系统性的知识体系,让您不仅能够理解容器化技术的“是什么”,更能够深入理解“为什么”和“怎么做”。本书避免陷入具体工具的使用细节,而是聚焦于底层原理和设计思想,从而赋予您跨越工具版本、应对技术变迁的强大能力。无论您是渴望提升应用部署效率的开发者,还是致力于优化基础设施运维的工程师,本书都将是您在容器化浪潮中稳健前行的宝贵指南。踏上这条容器化之道,您将解锁更高效、更可靠、更具弹性的应用交付新篇章。