手记

docker和虚拟机的区别

原文链接:https://blog.csdn.net/zhangweiwei2020/java/article/details/91047015

    Docker 是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。

    Docker 利用 Linux 核心中的资源分脱机制,例如 cgroups ,以及 Linux 核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一 Linux 实体下运作,避免启动一个虚拟机造成的额外负担。Linux 核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网络、用户 ID 与挂载文件系统,而核心的 cgroup 提供资源隔离,包括 CPU 、存储器、block I/O 与网络。从 0.9 版本起,Dockers 在使用抽象虚拟是经由 libvirt 的 LXC 与 systemd - nspawn 提供界面的基础上,开始包括 libcontainer 库做为以自己的方式开始直接使用由 Linux 核心提供的虚拟化的设施。 依据行业分析公司“451研究”:“Dockers 是有能力打包应用程序及其虚拟容器,可以在任何 Linux 服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。” 。


这里的介绍有点绕口,让我来介绍下 docker 解决了哪些痛点:

1.简化环境管理

    传统的软件开发与发布环境复杂,配置繁琐,经常有读者在微信上问:我的代码开发环境可以运行,一旦部署到服务器上就运行不了了。这个问题很常见,也确实很烦人,但是问题总要解决,开发环境、测试环境、生产环境,每个环节都有可能出现这样那样的问题,如果能够在各个环境中实现一键部署,就会方便很多,例如一键安装 linux 、一键安装 mysql、一键安装 nginx 等,docker 彻底解决了这个问题。

2.虚拟化更加轻量级

    说到容器,说到虚拟化,很多人总会想到虚拟机,想到 VMware、VirtualBox 等工具,不同于这些虚拟技术,docker 虚拟化更加轻量级,传统的虚拟机都是先虚拟出一个操作系统,然后在操作系统上完成各种各样的配置,这样并不能充分的利用物理机的性能,docker 则是一种操作系统级别的虚拟技术,它运行在操作系统之上的用户空间,所有的容器都共用一个系统内核甚至公共库,容器引擎提供了进程级别的隔离,让每个容器都像运行在单独的系统之上,但是又能够共享很多底层资源。因此 docker 更为轻量、快速和易于管理。

3.程序可移植

docker 和虚拟机

 docker 虚拟机

相同点 1. 都可在不同的主机之间迁移

2. 都具备 root 权限

3. 都可以远程控制

4. 都有备份、回滚操作  

操作系统 在性能上有优势,可以轻易的运行多个操作系统 可以安装任何系统,但是性能不及容器

原理 和宿主机共享内核,所有容器运行在容器引擎之上,容器并非一个完整的操作系统,所有容器共享操作系统,在进程级进行隔离 每一个虚拟机都建立在虚拟的硬件之上,提供指令级的虚拟,具备一个完整的操作系统

优点 高效、集中。一个硬件节点可以运行数以百计的的容器,非常节省资源,QoS 会尽量满足,但不保证一定满足。内核由提供者升级,服务由服务提供者管理 对操作系统具有绝对权限,对系统版本和系统升级具有完全的管理权限。具有一整套的的资源:CPU、RAM 和磁盘。QoS 是有保证的,每一个虚拟机就像一个真实的物理机一样,可以实现不同的操作系统运行在同一物理节点上。

资源管理 弹性资源分配:资源可以在没有关闭容器的情况下添加,数据卷也无需重新分配大小 虚拟机需要重启,虚拟机里边的操作系统需要处理新加入的资源,如磁盘等,都需要重新分区。

远程管理 根据操作系统的不同,可以通过 shell 或者远程桌面进行 远程控制由虚拟化平台提供,可以在虚拟机启动之前连接

缺点 对内核没有控制权限,只有容器的提供者具备升级权限。只有一个内核运行在物理节点上,几乎不能实现不同的操作系统混合。容器提供者一般仅提供少数的几个操作系统 每一台虚拟机都具有更大的负载,耗费更多的资源,用户需要全权维护和管理。一台物理机上能够运行的虚拟机非常有限

配置 快速,基本上是一键配置 配置时间长

启动时间 秒级 分钟级

硬盘使用 MB GB

性能 接近原生态 弱于原生态

系统支持数量 单机支持上千个 一般不多于几十个

docker 与传统容器

不同与传统容器,docker 早起基于 LXC,后来基于自研的 libContainer,docker 对于传统容器做了许多优化,如下:

1.跨平台的可移植性

2.面向应用

3.版本控制

4.组件复用

5.共享性

6.工具生态系统


docker 应用场景

1.加速本地开发

2.自动打包和部署应用

3.创建轻量、私有的PaaS环境

4.自动化测试和持续集成/部署

5.部署并扩展Web应用、数据库和后端服务器

6.创建安全沙盒

7.轻量级的桌面虚拟化


docker 核心组件

docker 中有三大核心组件:

•镜像

镜像是一个只读的静态模版,它保存了容器需要的环境和应用的执行代码,可以将镜像看成是容器的代码,当代码运行起来之后,就成了容器,镜像和容器的关系也类似于程序和进程的关系。

•容器

容器是一个运行时环境,是镜像的一个运行状态,它是镜像执行的动态表现。

•库

库是一个特定的用户存储镜像的目录,一个用户可以建立多个库来保存自己的镜像。




0人推荐
随时随地看视频
慕课网APP