• 容器技术-Docker的优点


    当产品运行在内部的虚拟化平台中,如openstack,也就是KVM虚拟化,创建虚拟机,但是不断增加的云端应用,增加了对硬件资源的消耗,不断的创建虚拟机,消耗了大量的硬件资源。

    那么如何高效的利用硬件资源实现云服务呢

    容器技术,Docker最初是DotCloud公司在法国期间发起的一个公司内部项目,后再以Apache2.0授权协议开源,代码在Github上维护,Docker是基于Google公司推出的Golang语言开发的,基于Linux内核的Cgroups、NameSpace,以及UnionFS等技术对进程进行封装隔离,属于操作系统层面的虚拟化技术由于隔离的进程独立于宿主机和其他隔离的进程,也被称为容器。
    在这里插入图片描述
    最初的Docker是基于LXC的,后来取出LXC转而使用自行开发的Libcontainer。
    Docker被定义为为开源的容器引擎,可以方便的对容器进行管理,例如对镜像打包封装,引入Docker Registry对镜像统一管理。使用Docker就是为了创建容器,管理容器、使用容器、删除容器。
    利用Docker可以实现开发,测试、生产环境的部署一致性,极大的减少运维成本。

    容器和虚拟机的差异
    传统虚拟机技术

    虚拟机是虚拟出来一套硬件,在其上面运行一个完整的操作系统,例如我们使用的KVM,指定系统镜像,然后装系统,最终可以使用,在该系统上再运行所需的应用程序。
    KVM创建虚拟机时,如果指定较少的CPU,内存,硬盘等资源,虚拟机性能较低。
    在这里插入图片描述

    容器技术

    **容器内的应用程序直接运行在宿主机的内核上,容器内没有自己的内核,也没有对硬件进行虚拟,因此容器比虚拟机更为轻便。**容器内的程序,就好比直接运行在宿主机上面的,能够使用宿主机最大的硬件资源,内存、cpu、磁盘。每个进程是互相隔离的,互不影响。
    在这里插入图片描述

    在这里插入图片描述

    容器对比KVM的好处
    • 容器能够提供宿主机性能,而KVM虚拟机是分配宿主机硬件资源,性能较弱。
    • 同样配置的宿主机,最多可以启动10个虚拟机的化,可以启动100+的容器数量。 启动一个KVM虚拟机,得有一个完整的开机流程,花费时间较长,或许得20s,而启动一个容器只需要1s。
    • KVM需要硬件CPU的虚拟化支持,而容器不需要。
    为什么选择Docker
    docker更高效的利用系统资源

    容器不需要硬件虚拟化以及运行一个完整操作系统的额外开销,docker对系统资源的利用率更高,无论是应用执行,文件存储,还是在内存消耗等方面,都比传统虚拟机更高效,因此一个同样配置的主机,可以运行更多数量的容器示例。

    更快的启动时间

    传统的虚拟机启动时间较久,docker容器直接运行在宿主机的内核上,无须启动一个完整的操作系统,因此可以达到秒级启动,大大的解决开发、测试、部署的时间。

    一致性的环境

    在企业里,程序从开发环境,到测试环境,到生产环境,难以保证机器环境的一致性,极大的可能出现系统依赖冲突,导致难以部署等bug。
    然而利用docker的容器-镜像技术,提供了除内核以外完整的运行环境,确保了应用环境的一致性。

    持续交付和部署

    对于开发和运维人员最希望的就是迁移部署别出问题,利用docker可以定制镜像,以达到持续集成,持续交付和部署。
    利用Dockerfile来进行镜像构建,实现系统集成测试,运维进行生产环境的部署。

    轻松的迁移

    Docker可以在很多平台运行,无论是物理机,虚拟机,云服务器等环境,运行结果都是一致的,可以轻松的将一个平台的应用,迁移到另一个平台,而不用担心环境的变化,导致程序无法运行。

    Docker能做什么

    可以把应用程序代码及运行依赖环境打包成镜像,做为交付介质,在各环境部署
    可以将镜像(image)启动成为容器(container),并且提供多容器的生命周期进行管理(启、停、删)
    container容器之间相互隔离,且每个容器可以设置资源限额
    提供轻量级虚拟化功能,容器就是在宿主机中的一个个的虚拟的空间,彼此相互隔离,完全独立、

    当Docker容器多的时候,需要工具去编排管理,这个就是k8s。

  • 相关阅读:
    Everything和SVN结合使用-在Everything中显示SVN
    信息学奥赛一本通:1161:转进制
    Python图像处理中PIL中image.convert()函数
    ROS系统下webots安装
    数据结构与算法系列二之链表、哈希表及栈
    我发现 Linux 文档写错了
    STM32 | 利用STM32CubeMX初始化一个STM32工程,图有点多,因为超详细(以STM32G431RBT6举例)
    大模型大战之年,Google 把生成式 AI 全面融入 Android、Web、云!
    前端请求到 SpringMVC 的处理流程
    软件开发的一般步骤
  • 原文地址:https://blog.csdn.net/qq_30353203/article/details/127930912