• 1 前言
  • 2 容器使用场景
  • 3.对比容器和虚拟机
    • 3.1 轻量的原因
    • 3.2 容器局限性
    • 3.3 容器优势
  • 4 容器化带来的挑战

文中有部分内容参考网易云架构师刘超老师的相关文章。

1 前言

自从学了docker之后,对于docker的应用场景一直不是很明白,到底为什么需要容器?
为什么容器技术这么受欢迎?它的使用场景到底在哪里?翻阅了一些资料之后,我得到了下面的结论。

2 容器使用场景

首先,需要了解到云计算是为了解决计算、网络、存储这三种资源的弹性问题。如果想详细了解这个方向的内容,可以参看这篇博客。

什么是云计算?

云计算解决了计算机基础设施计算、网络、存储这几个方面的弹性问题,但是它遗留了两个问题。

  • 应用的扩展问题。例如我开发一个电商应用,平时的时候10台机器能扛的住,双十一的时候需要100台才能抗的住。那怎么办?云计算平台可以实现一点90台新机器就出来了,但是机器是空的啊,上面什么应用都没安装,还需要人工登到每台机器上去一台一台的部署,非常麻烦。
  • 迁移性问题。软件往往是需要不断的在不同的环境里面安装的,例如开发人员自己会安装一套,测试人员会安装一套,线上环境也会安装一套。然而软件的安装是非常复杂的,牵扯到权限问题,配置问题,文件路径问题等,一不小心就会出错,出错了软件的行为就不对了,你上网买东西,用银行支付都可能出错,造成大麻烦。

    在云计算环境下,人们想出了两种方法解决问题。一是通过自动化脚本,然而不同的环境千差万别,一个脚本往往在一个环境上运行正确,到另一个环境就不正确了。二是通过虚拟机镜像,然而虚拟机镜像太大了,动不动就几十个G,拷贝和下载都太费时间。

于是乎,大牛们考虑是否存在着更加轻量级的虚拟化方式,更容易去迁移,也更容易扩展应用层业务的虚拟化方法。有人根据集装箱的设计思想来设计了更轻量级的虚拟化技术。
在集装箱出来之前,货物搬运需要来回的卸货装货,如下图所示,并且物品与物品之间的隔离性很差,如果船上的货物有水果、有铁桶等,那么水果很容易被其他硬的东西挤坏。

因此,为了解决这个问题,有人提出了集装箱技术。其一是为了能够更好的进行迁移,省去了中间来回搬货卸货的问题;其二是为了进行隔离,让不同的物品之间分隔开,互不影响。
借鉴与传统运输业的解决方案,有人提出使用类似集装箱的方式封装应用和应用运行的环境(应用运行所需要的依赖关系),也就是将任何应用及其依赖打包成一个轻量级、可移植、自包含的容器。

容器技术有很多种,docker只是其中一种,只不过docker的流行度较高。

要实现类似于集装箱的这种封装技术,需要两大技术,其一是Namespace,在不同Namespace中的应用可以有独立的网络资源、用户空间、进程号等;其二是Cgroups,可以把cpu、内存等资源进行隔离让容器使用,可以实现对容器资源的限制,限制容器能够使用的cpu和内存资源,避免单个容器出错,耗尽所有系统资源。

3.对比容器和虚拟机

3.1 轻量的原因

首先要知道一点,容器是比虚拟机更加轻量级的虚拟化技术,而它轻量的原因主要是以下两方面。

  • 撇下os。容器里面是不安装操作系统的,因为一个操作系统就很大了,并且os的运行也是非常占用系统资源的,容器与宿主机共用一个内核,容器之间的迁移不带内核。
  • 撇下应用运行产生的本地数据。这些数据如果在容器里面,容器会变得很大,影响容器在不同环境之间的迁移。不同的环境指的是开发、测试、运维上线这几种环境的不同。这些数据在不同的环境是没有意义的,因此这些数据一般放在容器之外的设备上。

3.2 容器局限性

由上面两点我们知道了容器轻量的主要原因,同时,我们也可以得知容器的局限性。
其一,由于所有容器都是与宿主机共用内核的,容器与容器之间的隔离性就会差很多;其二,容器里面是不存放数据的,容器里面的数据会随着容器的生命周期而消失,如果想要持久化的存储,必须要依靠外部的存储设备。

3.3 容器优势

  • 1.虚拟机启动会先启动OS,而启动OS需要耗费一定的时间以及系统资源,容器由于其共享内核的特性,不用启动OS,因此,可以实现秒启动,并且可以节省大量的系统资源。
  • 2.虚拟机安装应用的时候,需要重新把应用运行的环境部署一遍;而容器可以直接把应用运行环境给打包。也就是说容器具有更好的迁移性。
  • 3.由于容器可以将应用以及它所运行的环境依赖打包成镜像,故容器是可以直接做应用层扩展的。

4 容器化带来的挑战

在IT世界里,经常使用粒度这个概念,而且一般的出现形式都是以粗粒度、或者细粒度这两种形式出现的。
在我看来,对客户暴露了太多细节的相对来说就是细粒度的。用户可以只用一个操作就完成数据的存取,这就是粗粒度的.粒度应该是相对与该类的使用者来说的,如果存取只需要有限的操作,而没有暴露太多的底层实现则是粗粒度的,相反你把每个属性暴露给用户让它都可以对之进行操作则是细粒度的.

由于容器的粒度非常细,所以在管理上就会有一定的困难,人工管理是非常难以实现的,因此容器层面的平台管理主要就是依靠自动化来实现的。

自发现:容器与容器之间的相互配置还能像虚拟机一样,记住 IP地址然后互相配置吗?这么多容器,一旦一台虚拟机挂了重启,IP改变,你怎么记得住应该改哪些配置,列表长度至少万行级别的啊。所以容器之间的配置通过名称来的,无论容器跑到哪台机器上,名称不变,就能访问到。

自修复:容器挂了,或是进程宕机了,能像虚拟机那样登陆上去查看一下进程状态,如果不正常可以重启一下么?那你要登陆万台 Docker了。所以容器的进程挂了,容器就自动挂掉了,然后自动重启。

弹性自伸缩 Auto Scaling:当容器的性能不足的时候,需要手动伸缩、手动部署么?当然也要自动来。

为什么需要容器技术?相关推荐

  1. 用 Label 控制 Service 的位置 - 每天5分钟玩转 Docker 容器技术(106)

    上一节我们讨论了 Service 部署的两种模式:global mode 和 replicated mode.无论采用 global mode 还是 replicated mode,副本运行在哪些节点 ...

  2. 如何用 Graylog 管理日志?- 每天5分钟玩转 Docker 容器技术(93)

    上一节已经部署好了 Graylog,现在学习如何用它来管理日志. 首先启动测试容器. docker run -d \ --log-driver=gelf \ --log-opt gelf-addres ...

  3. 微服务架构之「 容器技术 」

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 现在一聊到容器技术,大家就默认是指 Docker 了.但事实上,在 Docker 出现之前,P ...

  4. 深度解析 PouchContainer 的富容器技术

    PouchContainer 是阿里巴巴集团开源的高效.轻量级企业级富容器引擎技术,拥有隔离性强.可移植性高.资源占用少等特性.可以帮助企业快速实现存量业务容器化,同时提高超大规模下数据中心的物理资源 ...

  5. 日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)

    高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题至关重要. 在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要.考虑到容器短暂和不固定的生命周期,当我们需 ...

  6. 面向容器技术资源调度关键技术深度对比

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的容器调度技术! 作者:阿里中间件,公众号:云栖社区 本文以资源分配理念:拍卖.预算.抢占出发,引出Borg.Omega.Mesos ...

  7. 5分钟让你懂得什么是容器技术?

    容器是轻量级的操作系统级虚拟化,允许我们在资源隔离的进程中运行应用程序及其依赖项.运行应用程序所需的所有必要组件都打包为一个映像,可以重复使用.当一个映像被执行时,它在一个隔离的环境中运行,不共享内存 ...

  8. k8s 重要概念 - 每天5分钟玩转 Docker 容器技术(117)

    在实践之前,必须先学习 Kubernetes 的几个重要概念,它们是组成 Kubernetes 集群的基石. Cluster  Cluster 是计算.存储和网络资源的集合,Kubernetes 利用 ...

  9. 回收 PV - 每天5分钟玩转 Docker 容器技术(152)

    当 PV 不再需要时,可通过删除 PVC 回收. 当 PVC mypvc1 被删除后,我们发现 Kubernetes 启动了一个新 Pod recycler-for-mypv1,这个 Pod 的作用就 ...

  10. DaemonSet 典型应用场景 - 每天5分钟玩转 Docker 容器技术(129)

    Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本.DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本. DaemonS ...

最新文章

  1. jenkins+docker部署java项目
  2. 【EF】EF扩展库(批量操作)
  3. docker inspect 获取 容器 镜像 元数据 简介
  4. Spring Boot 注解配置文件自动映射到属性和实体类
  5. 160 - 19 Brad Soblesky.2
  6. Ansible初级应用
  7. const 指针_C语言学习日记(11)——const与指针
  8. 一样的Java,不一样的HDInsight大数据开发体验
  9. strcmp函数使用中的一些细节问题
  10. C语言-除法和取模运算正负号问题
  11. python批量转换:未知类型二进制净生产力(NEP)遥感定量反演产品数据的打开,转换为tif,可用于通用GIS、遥感软件打开。
  12. vrep系列教程(一)——熟悉vrep
  13. 没有被遣返的人生是不完整的
  14. android vplayer 源码,【关于ffmpeg和Android的种种】【VPlayer不开源】【Android常用调试方法】...
  15. 文件共享服务器热备,两台云服务器如何实现双机热备
  16. 科学家首次3D生物打印出血管化肿瘤,并成功使用免疫疗法治疗
  17. qwin10如何删除linux系统,win10双系统安装卸载ubuntu
  18. MQTT Broker 比较与选型
  19. 【计算方法】数值微积分
  20. OFO和摩拜共享单车

热门文章

  1. Erlang笔记 -- 基础
  2. Usenix Security 2022 Stateful Greybox Fuzzing
  3. 使用Ajax时[object%20object] 和POST 415报错以及400报错的解决方案
  4. 智能型水泵控制器,双路排污、稳压控制、带BA接口
  5. CGAL-Triangulation中的单元和面的关系
  6. MySQL查询练习1
  7. Delphi7 中TStringList的Delimiter DelimitedText有BUG,字符串分割有问题
  8. Linux(中科方德服务器版4.0)springboot启动多个服务脚本开机自启
  9. 七夕这个早上,全都用来挖Filecoin了
  10. 优化网站的几种常见手段 大幅度降低Load time时间