近几年掀起的docker热潮,可谓席卷全球。什么缘由使它这么备受推崇呢?主要是由于它解决了行业痛点。玩linux的都知道,安装个应用时还要先安装所需环境、相关库、解决依赖关系。而docker的出现,很好的解决了服务器应用快速构建、部署和分享的问题,它可以把服务器应用像APP同样简单地安装到各类平台坏境中,而不受真实坏境的影响。linux
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,听从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 自开源后受到普遍的关注和讨论,以致于 dotCloud 公司后来都更名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中普遍应用。+docker
Docker 项目的目标是实现轻量级的操做系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不须要去关心容器的管理,使得操做更为简便。用户操做 Docker 的容器就像操做一个快速轻量级的虚拟机同样简单。
下面的图片比较了 Docker 和传统虚拟化方式的不一样之处,可见容器是在操做系统层面上实现虚拟化,直接复用本地主机的操做系统,而传统方式则是在硬件层面实现。安全
做为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具备众多的优点。
首先,Docker 容器的启动能够在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上能够同时运行数千个 Docker 容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽可能小。传统虚拟机方式运行 10 个不一样的应用就要起 10 个虚拟机,而Docker 只须要启动 10 个隔离的应用便可。
具体说来,Docker 在以下几个方面具备较大的优点。服务器
对开发和运维(devop)人员来讲,最但愿的就是一次建立或配置,能够在任意地方正常运行。
开发者可使用一个标准的镜像来构建一套开发容器,开发完成以后,运维人员能够直接使用这个容器来部署代码。 Docker 能够快速建立容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其余成员更容易理解应用程序是如何建立和工做的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。网络
Docker 容器的运行不须要额外的 hypervisor 支持,它是内核级的虚拟化,所以能够实现更高的性能和效率。运维
Docker 容器几乎能够在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、我的电脑、服务器等。 这种兼容性可让用户把一个应用程序从一个平台直接迁移到另一个。性能
使用 Docker,只须要小小的修改,就能够替代以往大量的更新工做。全部的修改都以增量的方式被分发和更新,从而实现自动化而且高效的管理。测试
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 通常为 MB | 通常为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 通常几十个 |
Docker的三大核心概念:操作系统
镜像 :相似于虚拟机镜像,一个面向Docker引擎的只读模块,包含了文件系统。用来建立Docker容器。镜像采用分层机制,每一个镜像都是只读的,可是能够将写数据的层经过联合文件系统附加在原有的镜像之上。这种增量式修改使得镜像很是容易储存、传输和更新。图片
容器:相似于一个轻量级沙箱,Docker利用容器来运行和隔离应用。容器是从镜像建立的运行实例。它能够被启动、开始、中止、删除。每一个容器都是相互隔离的、保证安全的平台。容器易于交互、便于传输、易移植、易扩展,很是适合进行软件开发、软件测试以及软件产品的部署。
仓库:仓库是集中存放镜像文件的场所。0最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,能够提供大陆用户更稳定快速的访问。固然,用户也能够在本地网络内建立一个私有仓库。当用户建立了本身的镜像以后就可使用 push 命令将它上传到公有或者私有仓库,这样下次在另一台机器上使用这个镜像时候,只须要从仓库上 pull 下来就能够了。