1.1 什么是docker

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。

docker是基于go语言实现的开源容器项目。

docker是 linux容器(Linux Containers,LXC)的一种封装。在LXC的基础上,docker进一步优化了容器的使用体验。首先,docker提供了各种容器管理工具(如分发、版本、移植等),让用户无须关注底层的操作,更加简明地管理和使用容器。其次,docker通过引入分层文件系统构建和高效的镜像机制,降低了迁移难度,极大地改善了用户体验。

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

1.2  为什么要使用docker

一、docker在开发和运维中的优势

  • 更快速的交付和部署

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

  • 更高效的资源利用

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

  • 更轻松的迁移和扩展

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

  • 更简单的更新管理

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

1.3 docker与虚拟机的区别

虚拟机:我们传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给他的资源将全部被占用。每一个虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

Docker:容器技术是和我们的宿主机共享硬件资源及操作系统可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。

 

虚拟机和容器都是在硬件和操作系统以上的,虚拟机有Hypervisor(即虚拟机管理程序)层,Hypervisor是整个虚拟机的核心所在。他为虚拟机提供了虚拟的运行平台,管理虚拟机的操作系统运行。每个虚拟机都有自己的系统和系统库以及应用。

容器没有Hypervisor这一层,并且每个容器是和宿主机共享硬件资源及操作系统,那么由Hypervisor带来性能的损耗,在linux容器这边是不存在的。

但是虚拟机技术也有其优势,能为应用提供一个更加隔离的环境,不会因为应用程序的漏洞给宿主机造成任何威胁。同时还支持跨操作系统的虚拟化,例如你可以在linux操作系统下运行windows虚拟机。

从虚拟化层面来看,传统虚拟化技术是对硬件资源的虚拟,容器技术则是对进程的虚拟,从而可提供更轻量 级的虚拟化,实现进程和资源的隔离。

从架构来看,Docker比虚拟化少了两层,取消了hypervisor层和GuestOS层,使用 Docker Engine 进行调度和隔离,所有应用共用主机操作系统,因此在体量上,Docker较虚拟机更轻量级,在性能上优于虚拟化,接近裸机性能。从应用场景来 看,Docker和虚拟化则有各自擅长的领域,在软件开发、测试场景和生产运维场景中各有优劣

 

docker与虚拟机具体对比:

1. docker启动快速属于秒级别。虚拟机通常需要几分钟去启动。

2. docker需要的资源更少,docker在操作系统级别进行虚拟化,docker容器和内核交互,几乎没有性能损耗,性能优于通过Hypervisor层与内核层的虚拟化。;

3. docker更轻量,docker的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境,Docker运行的镜像数远多于虚拟机数量。对系统的利用率非常高

4. 与虚拟机相比,docker隔离性更弱,docker属于进程之间的隔离,虚拟机可实现系统级别隔离;

5. 安全性: docker的安全性也更弱。Docker的租户root和宿主机root等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用如IntelVT-dVT-xring-1硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击。

6. 可管理性:docker的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如VMware vCenter提供完备的虚拟机管理能力。

7. 高可用和可恢复性:docker对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制,VMware可承诺虚拟机99.999%高可用,保证业务连续性。

8. 快速创建、删除:虚拟化创建是分钟级别的,Docker容器创建是秒级别的,Docker的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间。

9. 交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化;DockerDockerfile中记录了容器构建过程,可在集群中实现快速分发和快速部署。

 

拿它们与住房做一个比喻

物理机 –> 一栋楼一户人家。独立地基,独立花园。

虚拟机 –> 一栋楼包含多套房,一套房一户人家。共享地基,共享花园,独立卫生间、厨房、宽带。

docker容器 –> 一套房隔成多个小隔间(胶囊式公寓),每位胶囊住一位租户。共享地基,共享花园,还共享卫生间、厨房、宽带。

 

版权声明:本文为PaperBoat3-0原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/PaperBoat3-0/p/13568508.html