Docker 简介
Docker 项目诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目,基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
1. Docker 是什么
Docker 是一个开源的应用容器引擎,开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上。
如图所示的是一个 Docker 的 Logo,它生动描述了 Docker 这个产品的本质:软件行业的集装箱。
集装箱是指具有一定强度、刚度和规格专供周转使用的大型装货容器。对于绝大多数的货物,我们不需要专门定制化运输船。在一艘大型货船上,各种各样的货物被集装箱标准化,可以把货物规整地摆放运输,各个集装箱之间互相隔离,不会影响。
我们将 Docker 与集装箱做个类比,方便我们理解 Docker:
传统行业集装箱 | Docker |
---|---|
货物的实体 | 软件应用和自身运行依赖的环境 |
具有统一的规格,便于运输 | 运行环境的统一性 |
与外界环境隔离 | 容器之间互不影响 |
2. Docker 诞生背景
一个新技术的普及过程中,除了带有技术本身的酷炫色彩,一定也伴随着生产效率的提升和成本的降低。
在软件产品的传统开发流程中,软件从开发到上线,从操作系统安装,到运行环境依赖,再到应用配置,需要消耗大量技术资源在很多琐碎无意义的运维工作上。
随着虚拟机和云计算的普及,许多公司开始租用 AWS 或 OpenStack 的虚拟机,用脚本在这些机器上自动化部署,但这个过程中会碰到云端虚拟机和本地环境不一致的问题, 解决起来依旧费时费力。
为了解决这些问题,PaaS 平台服务(Platform-as-a-service)诞生了。 PaaS 有应用托管的能力,提供与开发环境相同的运行环境。PaaS 会为每一个应用单独创建一个隔离环境,然后在隔离环境中启动这些应用进程,从而达到多个用户的应用互不干涉地在虚拟机里批量、自动运行起来的目的。
而 Docker 属于新一代的 PaaS 项目, 它脱胎于 Linux Container (LXC)技术,与先前的 PaaS 不同的是,Docker 把 Cgroups、Namespace 和 UnionFS 等一系列技术整合起来,极大地降低了容器技术的复杂度,提升了开发者的用户体验。Docker 公司定义了以容器镜像为标准的应用打包格式,并且建立 Docker Hub 服务进行镜像分发和协作。这些举措迅速创建了一个良好的社区和合作伙伴生态圈,其中包括 AWS、Google、Microsoft、IBM 等行业巨头和国内的众多公司。
3. 为什么要学习 Docker ?
这里我们先打打“鸡血”。对于个人来说,我们学习的动力主要有两部分,其一是掌握 Docker 使用可以提升自身竞争力,其二是 Docker 在我们日常使用中也能提供不少便利,掌握接下来的基础部分后,我们会有一节重新仔细地总结一下 Docker 的优势。
4. 本课程的学习基础
除了前言部分提到的 Linux 基础,我们最好对计算机网络和操作系统方面的知识也有所涉猎。当然,在学习的过程中,遇到不理解的知识再去学习也是一个不错的方法,带着问题学技术也是快速提升自己能力的一个好办法。
5. 小结
由于 Docker 带来的巨大的便利,让很多开发、测试和运维等软件开发环节上的工作被简化,许多大型科技企业都参与到了 Docker 相关领域的贡献中来,为 Docker 及其生态圈贡献了许多优秀的软件项目,大大丰富了 Docker 生态。
Docker 技术带来了很多新的概念和工具,通过综合运用这些技术,用户可以快速构建和部署这些容器。后面的小节中我们会一一将 Docker 的魅力展现给大家。