美文网首页
第一章:初识 Docker与容器

第一章:初识 Docker与容器

作者: _Cappuccino_ | 来源:发表于2019-07-17 15:33 被阅读0次

1.1 什么是Docker

Docker的构想

Docker 的构想是要实现"Build , Ship and Run Any App, Anywhere",即通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的"一次封装,到处运行" 。这里的应用组件,既可以是一个Web 应用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。

Docker的作用

基于Linux平台上的多项开源技术,Docker 提供了高效、敏捷和轻量级的容器方案,并 支持部署到本地环境和多种主流云平台。 可以说,Docker首次为应用的开发、运行和部署提 供了“一站式"的实用解决方案。

Linux 容器(Linux Containers, LXC)技术

IBM Developer Works 网站关于容器技术的描述十分准确:容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资惊使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化(para-virtualization)和系统调用替换中的复杂性。

从Linux 容器到Docker

在LXC的基础上, Docker 进一步优化了容器的使用体验,让它进入寻常百姓家。
首先,Docker 提供了各种容器管理工具(如分发、版本、移植等),让用户无须关注底层的操作,更加简单明了地管理和使用容器;其次,Docker通过引人分层文件系统构建和高效的镜像机制,降低了迁移难度,极大地改善了用户体验,用户操作Docer 容器就像操作应用自身一样简单。

早期的Docker 代码实现是直接基于LXC的。自0.9版本开始,Docker开发了libcontainer项目作为更广泛的容器驱动实现,从而替换掉了LXC的实现。目前,Docker还积极推动成立了runC标准项目,并贡献给开放容器联盟,试图让容器的支持不再局限于Linux 操作系统,而是更安全、更开放、更具扩展性。

简单地讲,读者可以将Docker容器理解为一种轻量级的沙盒(sandbox)。每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。容器的创建和停止十分快速,几乎跟创建和终止原生应用-致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。很多时候,甚至直接把容器当作应用本身也没有任何问题。


1.2 为什么要使用Docker

Docker的优点

Docker 提供了一种更为聪明的方式,通过容器来打包应用、解藕应用和运行平台。这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类型的平台。这无疑将帮助我们节约大量的宝贵时间,并降低部署过程出现问题的风险。

Docker 在开发和运维中的优势

  • 更快速的交付和部署
  • 更高效的资源利用
  • 更轻松的迁移和扩展
  • 更简单的更新管理

Docker 与虚拟机比较

作为一种轻量级的虚拟化方式, Docker 在运行应用上跟传统的虚拟机方式相比具有如下显著优势:

  • Docker 容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式(数分钟)要快得多;
  • Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器(在IBM服务器上已经实现了同时运行10K量级的容器实例);
  • Docker 通过类似Git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新;
  • Docker 通过Dockerfile 支持灵活的自动化创建和部署机制,以提高工作效率,并标准化流程。

Docker 容器除了运行其中的应用外,基本不消耗额外的系统资源,在保证应用性能的同时,尽量减小系统开销。传统虚拟机方式运行N个不同的应用就要启用N个虚拟机(每个虚拟机需要单独分配独占的内存、磁盘等资源),而Docker 只需要启动N个隔离得“很薄的"容器,并将应用放进容器内即可。应用获得的是接近原生的运行性能。当然,在隔离性方面,传统的虚拟机方式提供的是相对封闭的隔离。但这并不意味着Docker 不安全。Docker 利用Linux系统上的多种防护技术实现了严格的隔离可靠性,并且可以整合众多安全工具。从1.3.0 版本开始,Docker重点改善了容器的安全控制和镜像的安全机制,极大地提高了使用Docker 的安全性。在已知的大规模应用中,目前尚未出现值得担忧的安全隐患。

Docker容器技术与传统虚拟机技术的比较

特性 容器 虚拟机
启动速度 秒级 分钟级
性能 接近原生 较弱
内存代价 很小 较多
硬盘使用 一般为MB 一般为GB
运行密度 单机支持上千个容器 一般几十个
隔离性 安全隔离 完全隔离
迁移性 优秀 一般

1.3 Docker 与虚拟化

虚拟化(virtualization)技术是一个通用的概念,在不同领域有不同的理解。在计算领域,一般指的是计算虚拟化(computing v irtualization),或通常说的服务器虚拟化。
维基百科上的定义如下:在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用比原本的纽态更好的方式来应用这些资源。

可见,虚拟化的核心是对资源的抽象,目标往往是为了在同一个主机上同时运行多个系统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处。

从大类上分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化。

其中, 真正意义上的基于硬件的虚拟化技术不多见,少数如网卡中的单根多IO 虚拟化(Single Root 1/0 Virtualization and Sharing Specification , SR-IOV)等技术,也超出了本书的讨论范畴。基于软件的虚拟化从对象所在的层次,又可以分为应用虚拟化和平台虚拟化(通常说的虚拟机技术即属于这个范畴) 。

前者一般指的是一些模拟设备或诸如Wine 这样的软件,后者又可以细分为几个子类:

  • 完全虚拟化。虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无须进行修改。例如IBM p 和z 系列的虚拟化、VMware Workstation 、VirtualBox 、QEMU 等;
  • 硬件辅助虚拟化。利用硬件(主要是CPU)辅助支持(目前x86体系结构上可用的硬件辅助虚拟化技术包括Intel-VT 和AMD-V)处理敏感指令来实现完全虚拟化的功能,客户操作系统无须修改,例如VMwar巳Workstation , Xen, KVM;
  • 部分虚拟化。只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改。现在有些虚拟化技术的早期版本仅支持部分虚拟化;
  • 超虚拟化(paravirtualization)。部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改,例如早期的Xen;
  • 操作系统级虚拟化。内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。容器相关技术即在这个范畴。

可见, Docker 以及其他容器技术都属于操作系统虚拟化这个范畴,操作系统虚拟化最大的特点就是不需要额外的supervisor 支持。Docker 虚拟化方式之所以有众多优势,跟操作系统虚拟化技术自身的设计和实现是分不开的。

Docker和常见的虚拟机方式的不同之处。

  • 传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。
  • Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。

相关文章

网友评论

      本文标题:第一章:初识 Docker与容器

      本文链接:https://www.haomeiwen.com/subject/lxnqlctx.html