来自:https://blog.csdn.net/xiaowang627/article/details/70164225
开发语言:Golang
一 概述
个人主机时代——CPU主频的高低和内存的大小;云计算时代——虚拟化技术。
虚拟化既可以通过硬件模拟来实现,也可以通过操作系统来实现。
容器虚拟化方案,充分利用了操作系统本身已有的机制和特性,可以实现轻量级的虚拟化,Docker是其中佼佼者。
二 什么是Docker
2.1 Docker开源项目
Docker是基于Go语言实现的云开源项目,全部开源代码均在https://github.com/docker/docker上进行维护,Docker是仅次与OpenStack的最受欢迎的云计算开源项目。
Docker的主要目标:Build, Ship and Run Any App, Anywhere
2.2 Linux容器技术
容器有效的将由单个操作系统管理的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求,与虚拟化相比,这样既不需要指令集模拟,也不需要及时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制,此外也避免了准虚拟化和系统调用替换中的复杂性。
Linux容器技术(LXC)借鉴了前人成熟的容器设计理念,基于一系列新的内核特性实现了更具扩展性的虚拟化容器方案,并被集成到了主流Linux内核中,成为了Linux系统轻量级容器技术的事实标准。Docker引擎的基础是Linux容器技术。
2.3 从Linux容器到Docker
Docker在LXC基础之上进一步优化了容器的使用体验,提供各种容器管理工具(如分发,版本,移植等),让用户无需关注底层的操作。
可将Docker容器理解为一种沙盒:每个容器内运行一个应用,不同的容器相互隔离,容器之间也可以建立通信机制,容器的创建和停止都十分快速,容器自身对资源需求十分有限,远远低于虚拟机,有时甚至把容器直接当成应用本身。
三 为什么要用Docker
3.1 Docker容器虚拟化的好处
高效构建应用。通过容器打包应用,若需要迁移应用,只需要在新的服务器上启动需要的容器即可。
3.2 Docker在开发和运维中的优势
一次性的创建或配置,任意环境,任意时间运行。具体优势:
(1)更快速的交付和部署:可使用镜像来快速构建一套标准的开发环境,测试和运维人员可以直接使用相同的环境来部署代码。Docker可以快速创建和删除容器,实现快速迭代。
(2)更高效的资源利用:它是内核级虚拟化,可以实现更高的性能 ,同时对资源的额外需求很低。
(3)更轻松的迁移和扩展:Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑和服务器等。
(4)更简单的更新管理:Dockerfile只需要小小的配置修改,就可以替代以往大量的更新工作。
3.3 Docker与虚拟机比较
(1)Docker容器很快。
(2)Docker容器对系统资源需求很少。
(3)学习成本较低。
(4)工作效率高。
四 虚拟化与Docker
虚拟化核心:对资源进行抽象。
虚拟化目标:在同一个主机上运行多个系统或应用——》提高资源利用率,降低成本,方便管理,容错容灾。
虚拟化分类:基于硬件的虚拟化(比较少见)和基于软件的虚拟化(应用虚拟化(如wine)和平台虚拟化)。
平台虚拟化:
完全虚拟化:模拟完整的底层硬件环境和特权指令的执行过程,如VMware workstation和VirtualBox等。
硬件辅助虚拟化:如Xen。
部分虚拟化:针对部分硬件资源虚拟化。
超虚拟化:如早起的Xen。
操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程,容器相关技术即在这个范畴,Docker也属于该范畴。
Docker和常见的虚拟机方式的不同之处如下所示:
可见Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。
openstack基于KVM ,docker基于LXC。
docker是通过内核虚拟化技术((namespaces及cgroups等),KVM呢是通过硬件虚拟化技术,CPU支持的。)来提供容器的资源隔离与 安全保障等。
在非linux平台是没法使用docker的,因为他是基于内核技术来实现资源隔离和安全保障的。
由于dockers通过操作系统层的虚拟化实现隔离,所以docker容器在运行的时候,不需要类似虚拟机(VM)额外的操作系统开销,提高了资源的利用率。