Docker浅谈

最近在研究Docker,总结了一些自己的理解,希望可以与大家分享。有错误的地方,也请大家不吝赐教,共同讨论。

1. docker是什么?

docker是一种轻量的、一次封装即可随处运行的虚拟化技术。


2. docker和 VM等虚拟机的区别是什么?

(1)虚拟化方式:

VM等传统的虚拟机技术,是基于硬件的虚拟化技术。将一个完整的物理机,分成多个子物理机,相互之间完全隔绝。

docker不会对底层硬件进行虚拟化,它的虚拟化是操作系统层级的。多个容器分享一个操作系统内核,不同的docker实例(也就是容器)内部有自己的应用依赖环境。


从外部看来,传统的虚拟化技术(比如VM)每个虚拟机内部的情况是不可见的。而docker则不然,由于是系统层级的虚拟化,所以每个容器在系统看来,都是一个线程(比如下图,一共启动了3个容器,就会出现三个container的线程)



同时,由于docker的虚拟化并不能实现真正的隔绝,所以docker容器中的应用,也同样会暴露在外部的操作系统上(如下图)



(2)操作系统体量:

系统上正常运行程序,离不开操作系统。一个完整的操作系统,包含两部分:内核+文件系统。

对于传统的虚拟机,需要完整的安装内核与文件系统,因此所占空间非常大,比如Ubuntu就需要20G+。

而就docker而言,虚拟化建立于操作系统以上,且不同版本的Linux内核都是基本相同的,因此不需要安装操作系统内核,只需要在引入相应操作系统的镜像即可,镜像中就包含了对应的文件系统。因此docker镜像的提及非常小,同样是Ubuntu,docker镜像,只有80M+。


(3)启动速度:

虚拟机在启动时,需要虚拟化硬件资源,启动完整的操作系统,因此耗时多

docker在启动时,由docker引擎直接在宿主机操作系统上调用硬件资源,以生成应用的方式生成容器,耗时很短


3. 为什么要使用docker?

开发角度:

(1)快速搭建:快速搭建开发环境

(2)提高开发效率:使最终的生产环境与开发环境尽可能的一致,避免因为环境问题导致上线错误

(3)提高利用率:避免使用虚拟机隔绝后造成的资源浪费,同时只使用同一个操作系统,减少了操作系统对内存的占用。

(4)避免冲突:多租户环境,不会造成冲突。

(5)统一管理:在docker仓库中,统一代码的管理

运维角度:

(1)快速部署:测试结果正常的程序,打包成镜像后,可以直接在生产环境上展开。

(2)高效迁移:减少了对于环境的依赖,可以实现一次部署,到处使用。

测试角度:

(1)提高测试准确率:避免因为环境区别导致测试结果误差。

(2)避免打包遗漏:测试成功直接将环境打包为镜像,还原时避免遗漏程序组件。


4. docker的优缺点有哪些?

优点:

(1)轻量:docker镜像体积小

(2)[endif]快速:可以快速生成容器

(3)[endif]一致性:开发->测试-运维上线系统环境完全一致

(4)统一管理:镜像统一上传至镜像库,方便追溯回滚

(5)低环境依赖:由于每个容器内部都有自己的文件系统,可以独立安装依赖环境。因此,对外部操作系统的依赖极低

(6)资源利用率高:避免虚拟机内各自系统对硬件资源的浪费

缺点:

(1)架构要求:必须是64位

(2)系统要求:内核3.8.0以上

(3)隔绝不彻底:由于是系统层级的虚拟化,内存溢出、高CPU占用可能会多docker稳定性造成影响

你可能感兴趣的:(Docker浅谈)