docker概述

什么是 Docker?

Docker 是一种 Linux 容器技术,一种高效、敏捷、和轻量级的容器解决方案,并且支持在多种主流平台(PaaS)和本地部署。Docker 是基于 Go 语言实现的云开源项目,诞生于2013 年,最初发起者是 DotCloud 公司,后来改名为 Docker Inc,之后专注于 Docker 相关技术和产品的开发。Docker 项目目前已经加入了 Linux 基金会,遵循 Apache 2.0 开源协议,全部开源代码均在 https://github.com/docker 上进行相关维护,官网地址为:https://www.docker.com/,有相关文档可以参考,现在 docker 与 openstack 同为最受欢迎的云计算开源项目。
docker 的 Logo 设计为蓝色鲸鱼,拖着许多集装箱。docker 的构想思想是要实现“Build, Ship and Run Any App, Anywhere”,即通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件“一次封装,到处运行”的目的。这里的应用组件,既可以是一个 Web 应用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。基于 Linux 平台上的多项开源技术,Docker 提供了高效、敏捷和轻量级的容器方案,并支持部署到本地环境和多种主流云平台。可以说,Docker 首次为应用的开发、运行和部署提供了“一站式”的实用解决方案。
docker概述_第1张图片
1.png
跟大部分新兴技术的诞生一样,Docker 也并非“从石头缝里蹦出来的”,而是站在前人的肩膀上,其中最重要的就是 Linux 容器(Linux Containers,LXC)技术。

操作系统级虚拟化的历史:

1982 年:你一定会很惊讶,第一个操作系统级的虚拟化技术是什么。答案就是 chroot,直到现在我们依然在使用的一个系统调用。这个系统调用会改变运行进程的工作目录,并且只能在这个目录里面工作。这种操作其实就是一种文件系统层的隔离。
2000 年:FreeBSD jail,真正意义上的第一个功能完整的操作系统级虚拟化技术。所以,真正的容器化技术出现到现在已经过去了 16 年,并不是几年的时间。
2005 年:OpenVZ,这是 linux 平台上的容器化技术实现,同时也是 LXC,即 docker 最初使用的容器技术核心实现。
2008 年:LXC 发布,这是 docker 最初使用的具体内核功能实现。
2013 年:Docker 发布,可以看出,docker 最初是使用了 LXC,同时封装了其他的一些功能。Docker 的成功,与其说是技术的创新,还不如说是一次组合式的创新。

总结:iPhone 你要说有多创新,真的说不上。手机很早就有了,电脑很早就有,触摸屏很早就有,但是苹果将所有这些有机的组合到了一起,再提供极致的用户体验,就产生跨时代的产品。同样 Docker 所使用的技术也都不是新技术,它将这一系列技术有机的组合到一起,并提供极致的用户体验,就产生了垮时代意义的产品。

为何要使用 docker?

1.Docker 容器虚拟化的好处

Docker 项目的发起人和 Docker 公司 CTO Solomon Hykes 曾认为,Docker 在正确的地点、正确的时间顺应了正确的趋势——如何正确地构建应用。

在云时代,开发者创建的应用必须要能很方便地在网络上传播,也就是说应用必须脱离底层物理硬件的限制;同时必须是“任何时间、任何地点”可获取的。因此,开发者需要一种新型的创建分布式应用程序的方式,快速分发和部署,这正是 Docker 所能够提供的最大优势。

举个简单的例子,假设用户试图基于最常见的LAMP(Linux+Apache+MySQL+PHP)组合来构建一个网站。按照传统的做法,首先,需要安装 Apache、MySQL 和 PHP 以及它们各自运行所依赖的环境;之后分别对它们进行配置(包括创建合适的用户、配置参数等);经过大量的操作后,还需要进行功能测试,看是否工作正常;如果不正常,则进行调试追

踪,意味着更多的时间代价和不可控的风险。可以想象,如果应用数目变多,事情会变得更加难以处理。

更为可怕的是,一旦需要服务器迁移(例如从亚马逊云迁移到其他云),往往需要对每个应用都进行重新部署和调试。这些琐碎而无趣的“体力活”,极大地降低了工作效率。究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致。

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

2.Docker 在开发和运维中的优势

对开发和运维(DevOps)人员来说,可能最梦寐以求的效果就是一次创建或配置,之后可以在任意地方、任意时间让应用正常运行。而 Docker 恰恰是可以实现这一终极目标的“瑞士军刀”。

具体说来,Docker 在开发和运维过程中,具有如下几个方面的优势:

更快速的交付和部署。使用 Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接使用完全相同环境来部署代码。只要开发测试过的代码,就可以确保在生产环境无缝运行。Docker 可以快速创建和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。并且,整个过程全程可见,使团队更容易理解应用的创建和工作过程。
更高效的资源利用。Docker 容器的运行不需要额外的虚拟化管理程序(VirtualMachine Manager,VMM,以及 Hypervisor)支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。跟传统虚拟机方式相比,要提高一到两个数量级。更轻松的迁移和扩展。Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等,同时支持主流的操作系统发行版本。这种兼容性让用户可以在不同平台之间轻松地迁移应用。
更简单的更新管理。使用 Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。

3.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 容器技术与传统虚拟机技术的特性比较
docker概述_第2张图片
2.png

Docker 与虚拟化

虚拟化(Virtualization)技术是一个通用的概念,在不同领域有不同的理解。在计算领域,一般指的是计算虚拟化(Computing Virtualization),或通常说的服务器虚拟化。维基百科上的定义如下:“虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。”
可见,虚拟化的核心是对资源的抽象,目标往往是为了在同一个主机上同时运行多个系统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处。从大类上分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化,基于软件的虚拟化从对象所在的层次,又可以分为应用虚拟化和平台虚拟化(通常说的虚拟机技术即属于这个范畴)。其中,前者一般指的是一些模拟设备或诸如 Wine 这样的软件。后者又可以细分为如下几个子类:
完全虚拟化。虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无需进行修改。例如 IBM p 和 z 系列的虚拟化、VMware Workstation、VirtualBox、QEMU等。
硬件辅助虚拟化。利用硬件(主要是 CPU)辅助支持(目前 x86 体系结构上可用的硬件辅助虚拟化技术包括 Intel-VT 和 AMD-V)处理敏感指令来实现完全虚拟化的功能,客户操作系统无需修改,例如 VMware Workstation、Xen、KVM。
部分虚拟化。只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改。现在有些虚拟化技术的早期版本仅支持部分虚拟化。
准虚拟化(paravirtualization)。部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改,例如早期的 Xen。操作系统级虚拟化。内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。容器相关技术即在这个范畴。可见,Docker 以及其他容器技术,都属于操作系统虚拟化这个范畴,操作系统虚拟化最大的特点就是不需要额外的 supervisor 支持。
Docker 虚拟化方式之所以有众多优势,这与操作系统虚拟化技术自身的设计和实现是分不开的。
docker概述_第3张图片
3.png
传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker 容器是在操作系统层面上实现虚化,直接复用本地主机的操作系统,因此更加轻量级。

你可能感兴趣的:(docker概述)