01-Docker介绍

虚拟化

虚拟化技术是一种将计算机物理资源进行抽象、转换为虚拟的计算机资源提供给程序使用的技术。
这里所指的计算机资源,就包括了 CPU 提供的运算控制资源,硬盘提供的数据存储资源,网卡提供的网络传输资源等。

虚拟化是 提高了 资源使用率,也就是用到尽可能接近100%的性能, 而虚拟化技术本身是会占用一定的资源的

对于虚拟化技术的分类,有很多种不同的方式,有的之间也有互相重合的部分,但总体来说可以区分为两大类:硬件虚拟化、软件虚拟化。

  • 平台虚拟化:在操作系统和硬件平台间搭建虚拟化设施,使得整个操作系统都运行在虚拟后的环境中。
  • 应用程序虚拟化:在操作系统和应用程序间实现虚拟化,只让应用程序运行在虚拟化环境中。
  • 内存虚拟化:将不相邻的内存区,甚至硬盘空间虚拟成统一连续的内存地址,即我们常说的虚拟内存。
  • 桌面虚拟化:让本地桌面程序利用远程计算机资源运行,达到控制远程计算机的目的。

虚拟机

在这些虚拟化分类或者说是虚拟化实现中,我们要着重讲一下虚拟机 ( Virtual Machine )。所谓虚拟机,通常来说就是通过一个虚拟机监视器 ( Virtual Machine Monitor ) 的设施来隔离操作系统与硬件或者应用程序和操作系统,以此达到虚拟化的目的。这个夹在其中的虚拟机监视器,常常被称为 Hypervisor。

之所以我们在这里单独谈谈虚拟机,是因为它对于我们开发者来说是个再熟悉不过的概念了。从我们习惯用来搭建虚拟操作系统环境的 VMware Workstation、Xen 等软件,到 Java 虚拟机 JVM,PHP 虚拟机 HHVM 等等,都充活跃在我们程序开发到程序运行的过程中。

容器技术

容器技术是一种全新意义上的虚拟化技术,按分类或者实现方式来说,其应该属于操作系统虚拟化的范畴,也就是在由操作系统提供虚拟化的支持。

所谓容器技术,指的是操作系统自身支持一些接口,能够让应用程序间可以互不干扰的独立运行,并且能够对其在运行中所使用的资源进行干预。当然,目前来说容器技术还没有一个严格的定义,其实现方式也各有不同,所以这里只能算是我的一点小小总结归纳。

由于应用程序的运行被隔离在了一个独立的运行环境之中,这个独立的运行环境就好似一个容器,包裹住了应用程序,这就是容器技术名字的由来。

容器技术近年来已经是一个火遍大江南北的概念了,其之所以能名声大噪,很重要的一个原因是其在运行性能上要远超虚拟机等其他虚拟化实现。更甚一步说,运行在容器虚拟化中的应用程序,在运行效率上与真实运行在物理平台上的应用程序不相上下。

为什么容器技术能够造就近乎完美的运行效率呢?这就得从容器技术如何实现应用程序的指令转换开始说起。下面这张图展示了容器技术如何进行指令转换的。

实在无奈,没有找到容器技术进行指令转换的图片,因为容器技术压根没有做指令转换。是的,你没有听错,有时候解决问题的最佳方法就是不解决它。

由于没有指令转换,运行在容器中的应用程序自身必须支持在真实操作系统上运行,也就是必须遵循硬件平台的指令规则。

很多同学这时候就有疑问了,指令都不转换,也没有解决程序跨平台兼容的问题,这算哪门子虚拟化技术。

没错,正是这种原因,很多人并不认同容器技术属于虚拟化技术的范畴。不过另一派观点认为,容器技术提供了相对独立的应用程序运行的环境,也提供了资源控制的功能,所以我们依然可以归纳其为一种实现不完全的虚拟化技术。

虚拟机与容器

属性 虚拟机 Docker
启动速度 分钟级 秒级
硬盘使用 GB 级 MB 级
性能 较低 接近原生
普通机器支撑量 几个 数百个

由于没有了虚拟操作系统和虚拟机监视器这两个层次,大幅减少了应用程序运行带来的额外消耗。

更准确的来说,所有在容器中的应用程序其实完全运行在了宿主操作系统中,与其他真实运行在其中的应用程序在指令运行层面是完全没有任何区别的。

docker 起源

如果说 Docker 的诞生,就必须从 Docker 这个开源项目提起 ( 虽然它现在已经不叫 Docker 了 )。Docker 项目是一个由 Go 语言实现的容器引擎,它最初由 dotCloud 这家做云服务的公司在 2013 年开源。

由于 Docker 带来的巨大的便利,让很多开发、测试和运维等软件开发环节上的工作被简化甚至省去,所以在短短的几年间便成为虚拟化乃至整个技术领域的热词。同时,许多开发者乃至大型科技企业都参与到了 Docker 相关领域的贡献中来,为 Docker 及其生态圈贡献了许多优秀的软件项目,这大大提高了 Docker 生态的完整性,也让 Docker 日益健壮。

也许 dotCloud 自己也没有想到,云服务没卖出几个钱,反倒是 Docker 越来越火。拥有商业头脑的他们,干脆不再做云服务了,也把公司名字改成 Docker Inc. 专门从事 Docker 周边的生意。

当然,Docker 的商业化也带来了一定的变化。为了更好的进行商业运作,Docker Inc. 将 Docker 开源项目的名称修改为了 Moby,所以大家要是在 GitHub 上没有搜索到 Docker 不要觉得惊讶,因为它现在的名字是 Moby ( github.com/moby/moby )。

Docker能做什么

天下武功,唯快不破

Docker 的实现,主要归结于三大技术:命名空间 ( Namespaces ) 、控制组 ( Control Groups ) 和联合文件系统 ( Union File System )

命名空间 ( Namespaces )

制作一个空间,出来给容器使用,例如pid,容器内的pid始终从0开始

控制组 ( Control Groups )

控制资源、让资源的使用率最大化,比如控制内存/控制cpu个数

联合文件系统 ( Union File System )

层叠式架构,就跟git类似

docker与devops

devops:简而言之,就是流水线。DevOps是一种思维方式。
点一下构建,就把代码部署到测试服务器--自动化测试--构建到线上

docker就是devops的一个组件

posted @ 2019-02-25 19:06  汉克书  阅读(144)  评论(0编辑  收藏  举报