1. 前言2. Docker 简介i. 什么是 Dockerii. 为什么要用 Docker3. 基本概念i. 镜像ii. 容器iii. 仓库4. 安装i. Ubuntuii. CentOS5. 镜像i. 获取镜像ii. 列出iii. 创建iv. 存出和载入v. 移除vi. 实现原理6. 容器i. 启动ii. 守护态运行iii. 终止iv. 进入容器v. 导出和导入vi. 删除7. 仓库i. Docker Hubii. 私有仓库iii. 配置文件8. 数据管理i. 数据卷ii. 数据卷容器iii. 备份、恢复、迁移数据卷9. 使用网络i. 外部访问容器ii. 容器互联10. 高级网络配置i. 快速配置指南ii. 配置 DNSiii. 容器访问控制iv. 端口映射实现v. 配置 docker0 网桥vi. 自定义网桥vii. 工具和示例viii. 编辑网络配置文件Table of Contentsix. 实例:创建一个点到点连接11. 实战案例i. 使用 Supervisor 来管理进程ii. 创建 tomcat/weblogic 集群iii. 多台物理主机之间的容器互联iv. 标准化开发测试和生产环境12. 安全i. 内核名字空间ii. 控制组iii. 服务端防护iv. 内核能力机制v. 其它安全特性vi. 总结13. Dockerfilei. 基本结构ii. 指令iii. 创建镜像14. 底层实现i. 基本架构ii. 名字空间iii. 控制组iv. 联合文件系统v. 容器格式vi. 网络15. 附录一:命令查询16. 附录二:常见仓库介绍i. Ubuntuii. CentOSiii. MySQLiv. MongoDBv. Redisvi. Nginxvii. WordPressviii. Node.js17. 附录三:有用的资源v0.3.0Docker 是个伟大的项目,它彻底释放了虚拟化的威力,极大降低了云计算资源供应的成本,同时让应用的分发、测试、部署和分发都变得前所未有的高效和轻松!本书既适用于具备基础 Linux 知识的 Docker 初学者,也希望可供理解原理和实现的高级用户参考。同时,书中给出的实践案例,可供在进行实际部署时借鉴。本书前六章为基础内容,供用户理解 Docker 的基本概念和操作;7 ~ 9 章介绍一些高级操作;第 10 章给出典型的应用场景和实践案例;11 ~ 13 章介绍关于 Docker 实现的相关技术。最新版本在线阅读:GitBook 或 DockerPool。欢迎关注 DockerPool 社区微博 @dockerpool,或加入DockerPool QQ 群(341410255),分享 Docker 资源,交流 Docker 技术。《Docker 技术入门与实战》一书已经正式出版,包含大量第一手实战案例,欢迎大家阅读使用。China-Pub京东图书当当图书亚马逊图书0.4: 2015-01-TBD进行中……0.3: 2014-11-25完成仓库章节;重写安全章节;修正底层实现章节的架构、名字空间、控制组、文件系统、容器格式等内容;Docker —— 从入门到实践主要版本历史添加对常见仓库和镜像的介绍;添加 Dockerfile 的介绍;重新校订中英文混排格式。修订文字表达。发布繁体版本分支:zh-Hant。0.2: 2014-09-18对照官方文档重写介绍、基本概念、安装、镜像、容器、仓库、数据管理、网络等章节;添加底层实现章节;添加命令查询和资源链接章节;其它修正。0.1: 2014-09-05添加基本内容;修正错别字和表达不通顺的地方。本书源码在 Github 上维护,欢迎参与:。贡献者 名单。在 GitHub 上 fork 到自己的仓库,如 docker_user/docker_practice ,然后 clone 到本地,并设置用户信息。$ git clone git@github.com:docker_user/docker_practice.git$ cd docker_practice$ git config user.name yourname$ git config user.email your email修改代码后提交,并推送到自己的仓库。$ #do some change on the content$ git commit -am Fix issue #1: change helo to hello$ git push在 GitHub 网站上提交 pull request。定期使用项目仓库内容更新自己仓库内容。$ git remote add upstream git fetch upstream$ git checkout master$ git rebase upstream/master$ git push -f origin master参加步骤本章将带领你进入 Docker 的世界。什么是 Docker?用它会带来什么样的好处?好吧,让我们带着问题开始这神奇之旅。简介Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub上进行维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。什么是 Docker作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。具体说来,Docker 在如下几个方面具有较大的优势。对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。特性容器虚拟机启动秒级分钟级硬盘使用一般为 MB一般为 GB性能接近原生弱于系统支持量单机支持上千个容器一般几十个为什么要使用 Docker?更快速的交付和部署更高效的虚拟化更轻松的迁移和扩展更简单的管理对比传统虚拟机总结Docker 包括三个基本概念镜像(Image)容器(Container)仓库(Repository)理解了这三个概念,就理解了 Docker 的整个生命周期。基本概念Docker 镜像就是一个只读的模板。例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。Docker 镜像Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。*注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。Docker 容器仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。*注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。Docker 仓库官方网站上有各种环境下的 安装指南,这里主要介绍下Ubuntu和CentOS系列的安装。安装Ubuntu 14.04 版本系统中已经自带了 Docker 包,可以直接安装。$ sudo apt-get update$ sudo apt-get install -y docker.io$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io如果使用操作系统自带包安装 Docker,目前安装的版本是比较旧的 0.9.1。 要安装更新的版本,可以通过使用 Docker 源的方式。要安装最新的 Docker 版本,首先需要安装 apt-transport-https 支持,之后通过添加源来安装。$ sudo apt-get install apt-transport-https$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9$ sudo bash -c echo deb docker main /etc/apt/sources.list.d/docker.list$ sudo apt-get update$ sudo apt-get install lxc-docker如果是较低版本的 Ubuntu 系统,需要先更新内核。