关于本书

    Docker可以说是目前增长速度最快的软件项目。它于2013年3月开源,到2016年它已经获得了近30 000个GitHub star以及超过7500次fork。它还接受了大量像Red Hat、IBM、微软、谷歌、思科和Vmware这些厂商的pull request。

    Docker在这个关键时刻的出现正是为了迎合许多软件组织的一个迫切需求:以一种开放和灵活的方式来构建软件,然后在不同环境下能够可靠和一致地部署它。用户不需要学习新的编程语言,购买昂贵的硬件,也无须再为了构建、部署和运行可移植的应用程序而在安装或者配置过程上花费过多工夫。

    本书将会通过我们在不同场景下用到的一些技术,带读者领略真实世界里的Docker实践案例。我们已经竭力尝试阐明这些技术,尽可能做到无须在阅读前事先具备其他相关技术的知识背景。我们假定读者了解一些基本的开发技术和概念,如开发一些结构化代码的能力,以及对软件开发和部署流程的一些了解。此外,我们认为读者还应了解一些核心的源代码管理理念并且对像TCP/IP、HTTP和端口这样的网络基础知识有一个基本的了解。其他不怎么主流的技术会在我们介绍到的时候予以说明。

    我们将从第一部分介绍Docker的基础知识开始,而到了第二部分,我们将把重点放在介绍如何将Docker用到单台机器的开发环境。在第三部分里,我们将介绍Docker在DevOps流水线中的用法,介绍持续集成、持续交付和测试等内容。本书的最后一部分则覆盖了Docker生产实践的内容,重点关注与编排相关的一些备选方案。

    Docker是一个用途广泛、灵活和动态的工具,以至于没有一点儿魄力的话很难追上它快速发展的脚步。我们会尽力通过真实世界的应用和例子让读者更好地理解其中的一些关键概念,目的是希望读者能够有实力、有信心在Docker的生态系统里审慎评估未来采用的工具和技术。我们一直在努力让本书变得更像是一次愉快的旅行,即介绍我们在很多方面见证的Docker是怎样使我们的生活变得更加轻松甚至于更加有趣的。我们正沉浸在Docker以一个别致的方式为我们呈现的覆盖整个软件生命周期的许多有意思的软件技术里,而我们希望本书的读者同样也能分享这样的体验。

    本书包括12章,分为4个部分。

    第一部分奠定了本书其余部分的基础,介绍Docker的概念并且教读者运行一些基本的Docker命令。第2章的一些内容旨在让读者熟悉Docker的客户-服务器架构以及如何调试它,这对在非常规的Docker配置中定位问题是非常有用的。

    第二部分关注熟悉Docker以及在自己的机器上如何充分利用Docker。我们将用到一个读者可能比较熟悉的相关概念——虚拟机,作为第3章的基础,提供Docker使用的一些介绍。然后第 4 章会详细介绍几个我们发现自己每天都在使用的Docker技巧。这一部分的最后一章则探索了更为深入的镜像构建方面的主题。

    第三部分从关注Docker在DevOps上下文中的使用开始,从用它完成软件构建和测试的自动化到将它迁移至不同的环境。这一部分还会花一章的篇幅来总结Docker的虚拟网络,介绍Docker Compose,并且覆盖一些更为高级的网络主题,如网络模拟以及Docker网络插件等。

    第四部分会介绍几个针对在生产环境中如何有效地利用Docker的主题。这一部分从第9章开始,在这一章里我们调研了一些最主流的容器编排工具,然后指出了它们往往倾向用在哪些场景。第10章讨论的是安全性的重要话题,阐明了如何锁定在容器里运行的进程,以及如何限制访问对外暴露的Docker守护进程。最后两章则会细讲一些在生产环境中运行Docker的重要实用信息。第11章会展示如何将经典的系统管理知识应用到容器上下文中,从登录到资源限制,而第12章着眼于一些读者可能遇到的问题并且给出对应的调试和解决步骤。

    附录里则是一些以不同方式安装、使用和配置Docker的具体细节,包括在虚拟机里以及在Windows上。

    本书中用到的所有由作者创建的工具、应用以及Docker镜像的源代码都可以在Manning出版社网站下载,地址是www.manning.com/books/docker-in-practice,读者也可以在GitHub上的docker-in-practise组织https://github.com/docker-in-practice/找到这些源代码。Docker Hub上dockerinpractise用户下的镜像(https://hub.docker.com/u/dockerinpractice/)均是从其中一个GitHub仓库自动构建生成的。在这里,我们已经意识到读者可能会有兴趣对技术背后的一些源代码做进一步的研究,因此在技术讨论里也嵌入了相关仓库的链接。

    为了方便读者跟进,本书中列出的大量代码均以终端会话的形式,与相应的命令输出一起展示。这些会话里有几件事情要注意一下。

    很长的终端命令可能会使用shell的续行字符(\)将一条命令分割成多行。虽然读者直接把它贴到自己的shell下面运行也能工作,但是读者也可以略去这个续行字符,在一行里键入整条命令。

    当输出的部分对于读者来说没有提供额外有用的信息时,它可能会被省略并在相应的位置用省略号([…])替代。

    购买本书的读者还可免费得到由Manning出版社运营的一个私有网站论坛的访问权限,在这里读者可以对本书作出评论,询问技术问题,并获得来自主要作者以及其他读者的帮助。要访问和订阅该论坛的话,请用Web浏览器打开www.manning.com/books/docker-in-practice。该页面将会提供一些信息,包括读者注册后该如何登录到论坛,能获得怎样的帮助,以及论坛里的一些行为准则。

    Manning对读者的承诺是会为其提供一个读者之间以及读者和作者之间进行有价值讨论的场所。但并不承诺作者的参与程度,作者对论坛的贡献目前仍然还是停留在志愿性质(并且是无报酬的)。我们建议读者试着问一些有挑战的问题,以激发作者回答问题的兴趣!作者在线论坛和之前讨论的档案只要书还在发行就一直可以在Manning出版社网站上访问。