🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[info] Docker 开源项目背景 ![](https://img.kancloud.cn/a6/be/a6be48f2744c846879645f0530e13cf4_791x653.png) Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,最初发起者是dotCloud公司 。 Docker自开源后受到广泛的关注和讨论,目前已有多个相关项目(包括Docker三剑客、Kubemetes 等),逐渐形成了围绕 Docker容器的生态体系。 ***** 由于 Docker 在业界造成的影响力实在太大, dotCloud 公司后来也直接改名为 DockerInc ,并专 注于 Docker 相关技术和产品的开发。 ***** 现在主流的 Linux 操作系统都已经支持 Docker 例如,红帽公司的RHEL 6.5/CentOS 6.5 往上的操 作系统、 Ubuntu 14.04 往上的操作系统,都已经在软件源中默认带有 Docker软件包。 ***** Docker 的构想是要实现“ Build, Ship and Run Any App, Anywhere ”,即通过对应用的装( Packaging )、分发( Distribution )、部署( Deployment )、运行( Runtime )生命周期进行管 理,达到应用组件“一次封装,到处运行”的目的 这里的应用组件,既可以是一个Web用、个编译环境, 也可以是一套数据库平台服务,甚至是一个操作系统或集群。 ***** 基于 Linux 平台上的多项开源技术, Docker 提供了高效、敏捷和轻量级的容器方案,并支持部署 到本地环境和多种主流云平台 可以说, Docker 首次为应用的开发、运行和部署提供了“ 一站式”的实用 解决方案。 >[info] 容器简介 **1. 对比传统虚拟机** * 在没有Docker的时代,商家通常使用硬件虚拟化(也称为虚拟机),以提供隔离。虚拟机提供虚拟的 硬件,可安装一个操作系统:和其他程序。需要很长的时间(通常以分钟计)来创建,也需要显著的资源开 销,因为它们除了要执行你需要的软件,还得运行整 个操作系统的副本。 * 不同于虚拟机,Docker容器不使用硬件虚拟化。运行在Docker容器中的程序接口和主机的Linux内 核直接打交道。因为容器中运行的程序和计算机的操作系统之间没有额外的中间层,没有资源被冗余软 件的运行或虚拟硬件的模拟而浪费掉。这是个很重要的区别。 ***** **2. Docker容器和虚拟机之间有什么不同** * 容器与虚拟机是互补的。虚拟机是用来进行硬件资源划分的完美解决方案,它利用了硬件虚拟化技 术,例如VT-x、AMD-V 或者privilege level (权限等级)会同时通过一个hypervisor层来实现对资源的彻 底隔离;而容器则是操作系统级别的虚拟化,利用的是内核的Cgroup和Namespace特性,此功能完全通 过软件来实现,仅仅是进程本身就可以与其他进程隔离开,不需要任何辅助。 * Docker容器与主机共享操作系统内核,不同的容器之间可以共享部分系统资源,因此容器更加轻量 级,消耗的资源也更少。而虛拟机会独占分配给自己的资源,几乎不存在资源共享,各个虚拟机实例之 间近乎完全隔离,因此虚拟机更加重量级,也会消耗更多的资源。我们可以很轻松地在-台普通的Linux 机器上运行100个或者更多的Docker容器,而且不会占用太多系统资源(如果容器中没有执行运算任务 或I/O操作);而在单台机器上不可能创建100台虚拟机,因为每一个虚拟机实例都会占用-个完整的操作系 统所需要的所有资源。 * 另外,Docker容器启动很快,通常是秒级甚至是毫秒级启动。而虚拟机的启动虽然会快于物理机 器,但是启动时间也是在数秒至数十秒的量级。因此,可以根据需求的不同选择相应的隔离方式。如果 需要资源完全隔离并且不考虑资源消耗,可以选择使用虚拟机;而若是想隔离进程并且需要运行大量进程 实例,则应该选择Docker容器。 ![](https://img.kancloud.cn/26/5e/265ed1005982952a3026266878ed7b80_592x168.png) **3. 总结:** * (Docker以及其他容器技术,都属于操作系统虚拟化这个范畴) 作为一种新兴的虚拟化方式, Docker 跟传统的虚拟化方式相比具有众多的优势。 * 传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层,Docker容器 是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。 * 容器和虚拟机各有各的优缺点,容器也并不是虚拟机的替代品,只是二者在适应不同的需求下各有优 点。 >[info] docker的优势 **1. 更高效的利用系统资源** 由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机 技术,一个相同配置的主机,往往可以运行更多数量的应用。 ***** **2. 更快速的启动时间** 传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内 核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部 署的时间。 ***** **3. 一致的运行环境** 开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致 有些 bug 并未在开发过程中被发现。 而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。 ***** **4. 持续交付和部署** 对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。 使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。 开发人员可以通过 Dockerfile 来进行镜像构建,并结合持续集成(ContinuousIntegration) 系统进行集 成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(Continuous Delivery/Deployment) 系统进行自动部署。 而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队 理解应用运行所需条件,帮助更好的生产环境中部署该镜像。 ***** **5. 更轻松的迁移** 由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运 行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本, 其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不 用担心运行环境的变化导致应用无法正常运行的情况。 ***** **6. 更轻松的维护和扩展** Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更 新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。 此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境 使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。 ***** **7. 更简单的更新管理** 使用 Dockerfile ,只需要小小的配置修改,就可以替代以往大量的更新工作 并且所有修改都以增 量的方式被分发和更新,从而实现自动化并且高效的容器管理。 ***** **8. 更快速的交付和部署** 使用docker,开发人员可以使用镜像来快速构建 套标准的开发环境;开发完成之后,测试和运维人 员可以直接使用完全相同环境来部署代码。 只要开发测试过的代码,就可以确保在生产环境无缝运行 Docker 可以快速创建和删除容器,实现快速 迭代,大量节约开发、测试、部署的时间 并且,整个过程全程可见,使团队更容易理解应用的创建和工 作过程。