容器化部署

 

1、Docker

1.1、什么是容器

容器的英文是container,其实container还有集装箱的意思

容器是一种操作系统虚拟机化技术,用于打包应用程序及其依赖项,并在隔离环境中运行它们。
 
物理机到容器的技术演进:
  • 物理机
    • 一个或多个应用部署在同一台机器上
    • 一个应用在部署之前需要先安装各种依赖环境,然后进行应用的部署
问题:
  • 资源利用率低:传统的CPU、内存利用率都在15%左右
  • 成本高:集群部署,需要多台物理机,每台物理机购买成本较高
  • 不隔离:多个应用之间不隔离,共用CPU、内存等硬件资源,相互影响
  • 有限的可伸缩性:迁移和扩展困难(都需要新的物理机,扩展新的物理机都需要安装各种依赖环境)
 
  • 虚拟机
    • 一台物理机安装多个虚拟机(VM),一个虚拟机部署一个或多个应用
  虚拟机将计算机的资源虚拟化为一个或多个较小的单个计算机,然后在其上部署操作系统,接着在这些操作系统上部署运行相应的应用程序
  虚拟机技术其实是通过软件的手段来虚拟硬件的一种技术,从而达到和物理机一样的体验。
  虚拟化技术就是在操作系统上多加了一个虚拟化层(Hypervisor),可以将物理机的CPU、内存、硬盘等资源进行虚拟化,再通过虚拟化出来的空间上安装操作系统
  比如,我们可以将一台32核CPU、64G内存、500G磁盘的物理机进行虚拟化,可以创建8台4核CPU、8G内存的虚拟机。这些机器提供给不同的应用去部署,如此极大提供了资源利用率。常见的虚拟化技术如VMWare,VirtualBox等
缺点:
    • 虚拟机本身占用大量的资源,8G内存的虚拟机,应用可用的只有7G或更少
    • 虚拟机硬件需要初始化,其本身也是一个操作系统,启动较为耗时
 
  • 容器化
    • 一台物理机安装多个容器实例(container),一个容器跑一个或多个应用
  与虚拟化整个计算机相比,容器则采用不同的方式——直接虚拟化操作系统
  容器化是一种将虚拟化带到操作系统级别的虚拟化。虚拟化为硬件带来了抽象,而容器化为操作系统带来了抽象。
  容器内的应用程序进程直接运行在宿主机(真实物理机)的内核上,各个容器相互独立直接运行于未经虚拟化的宿主机硬件上,同时各个容器也没有自己的内核
 
  虚拟机最终虚拟出了一台完整的计算机系统,其拥有底层的物理硬件、操作系统和应用程序执行的完整环境,都对硬件资源造成了一定的消耗,比较重量化
  与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统(这里的运行时环境指的是程序运行依赖的必要的操作系统包、应用程序及配置,通常不包含完整的操作系统)
  也就是说容器是对进程的隔离,对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。每个容器对宿主机资源的访问都会被严格限制,其中包括:CPU、内存、磁盘、网络带宽等等
 
容器的好处:
  • 更加的轻量级且占用的资源更少,与操作系统相比,容器体积小
  • 资源利用率高:容器之间可以共享资源,最大化资源的利用率
  • 运行速度快:直接运行于宿主系统内核,容器里面的应用就是底层系统的一个进程,所以启动容器相当于直接运行本机的一个进程,而不是一个完整并臃肿的操作系统,自然就快很多

 

虚拟机和容器的区别?
  1)速度:虚拟机启动时间比容器长的多,因为虚拟机硬件需要初始化,其本身也是一个操作系统,启动较为耗时;而容器是直接运行于宿主系统内核,容器里面的应用就是底层系统的一个进程,所以启动容器相当于直接运行本机的一个进程,而不是一个完整并臃肿的操作系统,自然就快很多;
  2)资源:虚拟机最终是虚拟出了一台完整的计算机系统,其拥有底层的物理硬件、操作系统和应用程序执行的完整环境,都对硬件资源造成了一定的消耗,比较重量化,即使虚拟机不处理用户请求,虚拟机本身也会消耗内存,能应用可用资源就偏少;而容器更加轻量级且占用资源更少,容器之间可以共享资源,最大化资源的利用率;
  3)安全性和隔离性:虚拟机是保持独立和相互隔离的;而容器只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,它是对进程的隔离;
  4)可移植性和应用程序共享:虚拟机需要复制整个操作系统、主机内核、系统库、配置文件和任何必要的文件目录,在共享或转移时面临挑战;而容器镜像比虚拟机小得多,它们更容易转移,并节省主机文件系统的空间

 

posted @ 2022-11-17 23:26  杨岂  阅读(3817)  评论(1编辑  收藏  举报