docker之旅(第一篇):docker介绍、背景、docker与虚拟化、docker与虚拟机

一、什么是Docker

Docker 开源项目背景

Docker 是基于Go 语言实现的开源容器项目,诞生于2013 年年初,最初发起者是 dotCloud 公司。Docker 自开源后受到广泛的关注和l 讨论,目前已有多个相关项目(包括 Docker 三剑客、Kubemetes 等),逐渐形成了围绕Docker 容器的生态体系。 由于Docker 在业界造成的影响力实在太大, dotCloud 公司后来也直接改名为Docker Inc ,并专注于Docker 相关技术和产品的开发。

 

Docker的概念

Docker 是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。

 

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。

Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。

Docker的版本变迁

自从dotCloud公司开源其Docker项目后,凭借其便捷的Docker镜像技术解决了当时困扰众多PaaS项目的难题:如何为应用打包,让用户将本地的应用顺利迁移到PaaS平台,而不用顾忌应用的开发语言、配置、依赖包等诸多因素,也因此开启了全新的Docker容器时代。

 

随着扩张步伐的加快,dotCloud公司后来又实行了一系列大动作。诸如公司更名为Docker,意欲彻底控制相关商业业务;再到后来发布进军PaaS的Swarm项目,挑起Swarm、Mesos及K8S的鼎足之战。如今战事早已落幕,胜负已定,PaaS虽然竞争激烈,但幕后的 Docker还是那个深受喜爱的Docker,而其版本、包名称也在容器的变革中发生诸多变更。

下面针对相关容易混淆的版本做个总结说明,比如docker-io,docker-engine有啥区别,后来的moby又怎么回事。

实际上,从2013年3月开始推出0.1.0版本,到17年2月1.13的版本都采用x.x的形式,后来为了专注于Docker的商业业务,Docker公司将Docker项目改名为Moby,交由社区自行维护,将Docker本身拆分为Docker-CE免费版和Docker-EE商业版,由自身维护,此举几乎是全部将原先的Docker用户转移到Docker公司产品下。下面表格详细列举说明了各个版本情况。

版本名 版本号 说明
Docker(docker.io,docker-engine) 1.x.x 以前的Docker开源版本,docker.io是由Ubuntu发布的deb包,docker-engine是Docker公司官方发布的deb包
Moby YY.MM 更名后由社区维护的开源项目,不过不知为什么,github上才17版本
Docker-CE YY.MM,例如19.06,代表19年6月 由Docker公司维护的免费版本,CE分为Edge和Stable版本,Edge: 月版本,每月发布一次 Stable: 季度版本,每季度最后一月发布一次
Docker-EE YY.MM Docker商业版,只有Stable版本,每季度发布一次

 

 

 

二、 为什么要使用Docker

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

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

1、更快速的交付和部署

使用Docker ,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接使用完全相同环境来部署代码。只要开发测试过的代码,就可以确保在生产环境无缝运行。Docker 可以快速创建和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。并且,整个过程全程可见,使团队更容易理解应用的创建和工作过程。

2、更高效的资源利用

Docker 容器的运行不需要额外的虚拟化管理程序(Virtual Machine Manager, VMM ,以及Hypervisor)支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。跟传统虚拟机方式相比,要提高一到两个数量级。

3、更轻松的迁移和扩展

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等,同时支持主流的操作系统发行版本。这种兼容性让用户可以在不同平台之间轻松地迁移应用。

4、更简单的更新管理

使用Dockerfile ,只需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。

 

三、Docker与虚拟化

虚拟化

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

可见,虚拟化的核心是对资源的抽象,目标往往是为了在同一个主机上同时运行多个系 统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处。 从大类上分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化。其中,真正 意义上的基于硬件的虚拟化技术不多见,少数如网卡中的单根多IO 虚拟化( Single Root I/ O Virtualization and Sharing Specification , SR-IOV ) 等技术,也超出了本书的讨论范畴。 基于软件的虚拟化从对象所在的层次,又可以分为应用虚拟化和平台虚拟化(通常说的 虚拟机技术即属于这个范畴) 。其中,前者一般指的是一些模拟设备或诸如Wine 这样的软 件。后者又可以细分为如下几个子类:

1、完全虚拟化。

虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无需进行修改。例如IBM p 和z 系列的虚拟化、VMware Workstation 、VirtuaboX 、QEMU 等。

2、硬件辅助虚拟化。

利用硬件(主要是CPU )辅助支持(目前x86 体系结构上可用的硬件辅助虚拟化技术包括Intel- T 和AMD-V )处理敏感指令来实现完全虚拟化的功能,客户操作系统元需修改,例如VMware Workstation 、Xen 、KVM。

3、部分虚拟化。

只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改。现在有些虚拟化技术的早期版本仅支持部分虚拟化。

4、准虚拟化( paravirtualization ) 。

部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改,例如早期的Xen 。

5、操作系统级虚拟化。

内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。容器相关技术即在这个范畴。

可见, Docker 以及其他容器技术,都属于操作系统虚拟化这个范畴,操作系统虚拟化最大的特点就是不需要额外的supervisor 支持。

Docker 虚拟化方式之所以有众多优势,这与操作系统虚拟化技术自身的设计和实现是分 不开的。

 

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

 

 

 

 

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

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多;Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。

 

四、Docker 与虚拟机比较

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

Docker 容器除了运行其中应用外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减小系统开销。传统虚拟机方式运行N 个不同的应用就要起N 个虚拟机(每个虚拟机需要单独分配独占的内存、磁盘等资源),而Docker 只需要启动N 个隔离的“很薄的”容器,并将应用放进容器内即可。应用获得的是接近原生的运行性能。

 

当然,在隔离性方面,传统的虚拟机方式提供的是相对封闭的隔离。但这并不意味着Docker 就不安全, Docker利用Linux 系统上的多种防护技术实现了严格的隔离可靠性,并且可以整合众多安全工具。从1.3.0 版本开始, Docker 重点改善了容器的安全控制和镜像的安全机制,极大提高了使用Docker 的安全性。在已知的大规模应用中,目前尚未出现值得担忧的安全隐患。

 

 

 

参考资料

[1]https://blog.csdn.net/thollych/article/details/102717701

猜你喜欢

转载自www.cnblogs.com/Nicholas0707/p/12506186.html