docker

  总是听说docker,只知道它是一种容器相关的技术。效果不错,但具体内容不了解。借着这篇了解一个docker吧~
  首先docker的英文含义是码头工人。而它的LOGO,就是一只鲸鱼背着很多货柜箱:
在这里插入图片描述

  这个比喻有一定道理,后面会揭晓的。
  docker本身是虚拟化技术。首先先意识到为什么需要虚拟化技术?一方面是为了最大化硬件资源,另一方面是为了提供更多样化的场景(没有A,虚拟出A来完成任务)。我觉得虚拟化的目的是为了多样化,但要想虚拟化必须首先要解决一个问题:隔离。设想这样一个问题,你希望你的电脑被别人用吗?你希望自己的文件被被别人乱改吗?结果是no。但悲哀的是不同用户不得不共用一台主机,这个时候如果有种技术能实现不同用户的隔离,你是你的,我的是我的。那该有多好,这就是隔离的意义和必要性。

  提到虚拟化技术,其实第一时间想到的不是docker,而是虚拟机。二者有什么不同吗?我们借着二者的比较引出docker的细节:
  给虚拟机下个定义:虚拟机 Virtual Machine 指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。直观的感受就是windows通过虚拟机能运行各个Linux发行版本。原理就是软件虚拟硬件,不懂看下图(左边代表虚拟机,右边代表docker):
在这里插入图片描述

  先看左边的虚拟机,虚拟机最底层的Server是硬件,Host OS是主机的操作系统,Hyperviser是虚拟管理程序,Guest OS是属于各自虚拟机的操作系统,再上层就是一些应用了。Hyperbisor和Guest OS不同:Guest OS 是虚拟机安装的操作系统,是一个完整的系统内核,Hypervisor也可以理解为硬件虚拟化平台,它在后Host OS以内核驱动的形式存在。虚拟机实现资源的隔离的方式是利用独立的Guest OS,以及利用Hypervisor虚拟化CPU、内存、IO等设备来实现的,所有虚拟机实际上共用一套硬件。
  了解虚拟机的结构后,再看docker,Docker并没有和虚拟机一样利用一个独立的Guest OS执行环境的隔离,它利用的是目前当前Linux内核本身支持的容器方式,实现了资源和环境的隔离,简单来说,Docker就是利用Namespace 实现了系统环境的隔离。简单点说就是docker利用了内核原生的方式能完成隔离。

  再把docker和虚拟机具体对比下,看看二者的优缺点:
  1.docker相比虚拟机不需要运行客户机操作系统,而是直接利用主机的系统内核,而且Docker不需要Hypervisor实现硬件资源的虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源。避免了虚拟机启动时所需要的系统引导时间和操作系统运行的资源消耗,因此在cpu、内存、利用率上效果都要好(硬件利用率高)。这也就是为什么docker快的原因了~

  2.二者和主操作系统的中间介质不同:docker是守护进程(Docker Daemon/Docker Engine),虚拟机是虚拟管理系统(Hypervisor)
  3.实现隔离的原理不同,虚拟机是为每个用户建立独立的客户机操作系统。而docker直接利用主机内核,不提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。所以docker要比虚拟机小得多,更轻量化~
  4.装过虚拟机的都知道,虚拟机安装的的时候要下一个iso文件,也就是镜像。docker和虚拟机都有镜像,但不完全一样。
  说到这儿先解释两个概念之间的关系:容器、镜像
  docker是一种容器,容器是镜像的运行实例。通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。也就是Docker容器是基于Docker镜像创建的
  回到上文,都了解有了镜像我们就可以复制程序。那日常中常常会碰到一个问题:别人的代码我拿过来不能跑,原因是我没有它的环境。docker另外一个优势就是整体环境迁移。换句话说,我给你一个docker,里面包含了我主要的文件以及我文件的环境,你收到就直接可以运行,不需要再配环境,是不是方便多了。而虚拟机镜像是没有以来的

  看了上面几点,感觉docker真是棒极了。那虚拟机还有用吗?当然有,我们再来看看docker的缺点:
  1.容器是不变的:
  容器从描述其内容的镜像启动并运行。默认情况下,该镜像是不可变的- 一旦创建,它就不会改变。因此,容器没有持久性。如果启动容器实例,然后将其终止并重新启动它,则新容器实例将不会具有与旧容器关联的任何有状态信息。而默认情况下,虚拟机在会话中具有持久性,因为它具有自己的文件系统。想要修改容器的唯一方法就是创建一个新的,修改过的容器
  2. 隔离性的程度不好:
  虚拟机隔离的原理是创建不同的用户操作系统单独控制,不同虚拟机不被用户共享。而docker实现的是应用隔离,用户(主机操作系统内核)共享所有docker,
  3.虚拟机功能更强大:
  由于虚拟化了支撑硬件,所以虚拟机能做到实时的热迁移、热克隆、挂起等操作,docker无法完成这种高级功能

  那是不是隔离性强就一定好呢?当然取决于你自己的需求啦:
  我们需要根据不同的应用场景和需求采用不同的方式使用Docker技术或使用虚拟机。例如一个典型的Docker应用场景是当主机上的Docker实例属于单一用户的情况下,在保证安全的同时可以充分发挥Docker的技术优势。对于隔离要求较高的环境如混合用户环境,就可以使用虚拟机。服务器虚拟化解决的核心问题是资源调配,而容器解决的核心问题是应用开发、测试和部署

  了解了docker的需求,那谁适合用docker呢?
  docker解决的问题面向应用,所以应用开发、测试、部署。前端、后端、数据库都用得到。还有想提高传统IT效率,降低成本的企业;认识其价值的运维、开发、测试人员,都适合。docker也能够把应用程序自动部署到容器的开源引擎。但如果部署的是一个传统的应用,这个应用启动速度慢,进程数量少,基本不更新,那么虚拟机完全能够满足需求

  再看看docker的优势吧:
在这里插入图片描述
在这里插入图片描述

  docker容器有哪些相关的技术呢?
  本来想看,但后来发现看不懂,留个网址以后看吧:Docker及其相关技术 - dy2903 - 博客园 (cnblogs.com)

  回到最开始那张图。其实硬件等于码头,虚拟机等于仓库,docker等于集装箱。仓库功能更强大,隔离效果也好。但远没有集装箱方便搬运。所以是想好搬,还是完全隔离取决于你的需求了。不过集装箱也能简单隔离,如果要求不高也够用的了。

补充一下,看到了~
容器编排工具:K8S,Kubernetes,中间字母有8个,为了简便进行简写
在这里插入图片描述

参考资料:

docker容器与虚拟机有什么区别? - 知乎 (zhihu.com)
Docker 有什么优势? - 八英里 - 博客园 (cnblogs.com)
在哪些情况下考虑用docker? - 知乎 (zhihu.com)
Docker容器相关技术 - 裸奔的太阳 - 博客园 (cnblogs.com)

因作者水平有限,如有错误之处,请在下方评论区指出,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值