• 虚拟化+docker容器引擎概念基本介绍



    一、虚拟化简介

    1、虚拟化概述

    虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率

    2、cpu的时间分片(cpu虚拟化)

    在这里插入图片描述

    • 正常每个任务以轮询的方式去处理,这个时候一个CPU一个整体。
    • 以下是针对的CPU单位时间内的一个资源。按时间划分,1秒划分成10个0.1秒,每个0.1秒可以全力处理10单位的任务。在1秒内,都在全力工作。
    • cpu 1s全力运转的性能——》逻辑分割成分成了10份,可以理解为在单位时间内可以处理10个任务,每一个0.1s cpu是满的。原先分片前100M以下的任务一次只可以处理1个,现在100M的任务一次可以处理10个。这就是时间分片的一个概念。
    • 虚拟化作用——》缓解/解决了资源利用率的问题

    3、cpu虚拟化性性能瓶颈

    在这里插入图片描述
    cpu分片后每个任务处理性能会打对折

    • 如果是50m及50m以下的任务的话,虚拟化后的,1s模拟10个cpu,可以处理10个。虚拟化后的性能更高。
    • 如果是50+m的任务的话,物理硬件的性能就会比虚拟化的性能高了。虚拟化的cpu会卡顿。所以在极度吃资源的情况下,例如mysql高并发这种,就不适合用虚拟化。

    4、虚拟化工作原理

    在这里插入图片描述

    • 虚拟机管理器功能:调用资源

    • 两大核心组件:QEMU、KVM

      • QEMU:
        1.可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。
        2.QEMU它并不是直接调用,而是用I/O方式调用,QEMU把资源调用来的过程借用ioctl,QEMU借助libvirt这个工具调用ioctl,再通过接口,给虚拟机应用程序。

      • KVM:
        1.用来逻辑分割物理资源,抽象化为虚拟化资源,根据VMM里的配置,会逻辑分割出多少G,给应用程序,去进行虚拟化。
        2.只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。

    • 对于workstation而言——>>硬件辅助虚拟化,表现形式在处理器里面有一个虚拟化引擎,可以勾取硬件辅助虚拟化,看到虚拟接口/dev/kvm,可以加强辅助调用,在应用程序需要频繁调用的时候,需要开启。比如openstack。

    虚拟化类型

    1. 全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
    2. 半虚拟化:需要修改操作系统
    3. 直通:直接使用物理硬件资源(需要支持,还不完善)

    全虚拟化:KVM——>>产品vmware—ce

    半虚拟化:EXSI——>>workststion vsphere

    虚拟化功能

    1. 在一个操作系统内,模拟多个操作系统
    2. 以软件的方式模拟物理设备的功能

    二、Docker容器概述

    容器基础概念—>>六大名称空间
    名称空间:以不同空间划分不同资源

    1、Docker是什么

    • 是一种轻量级的“虚拟机”,Docker是一个用于开发,交付和运行应用程序的开放平台。
    • 在Linux容器里运行应用的开源工具——》容器引擎,让开发者可以打包大门的应用及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或者window机器中。
    • Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。
      鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
    • Docker的设计宗旨:Build,Ship and Run Any App,Anywhere
      即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

    2、使用docker有什么意义

    在这里插入图片描述
    把容器化技术做成了标准化平台

    1. docker引擎统一了基础设施环境——docker环境
    2. docker引擎统一了程序打包(装箱)方式——docker镜像(把引擎放在镜像中,带着镜像到处跑)
    3. docker引擎统一了程序部署(运行)方式——docke容器(利用引擎把这个镜像再去运行为之前的相同的一模一样的容器了)

    镜像——>>封装的一个时刻的服务/应用状态

    容器——>>应用跑起来的状态(正常提供服务的状态 - 运行时)

    3、 Docker的使用场景

    1. 打包应用程序部署简单
    2. 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如:需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker 容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了。
    3. 适合做微服务的部署
    4. 适合持续集成和持续交付(CI/CD):开发到测试发布

    在这里插入图片描述

    4、Docker引擎(Docker Engine)

    Docker Engine是具有以下主要组件的客户端-服务器(C/S架构)应用程序:

    • server端:服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
    • client端:REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。
    • 命令行界面(cLI)客户端((docker命令)。

    docker run

    docker start

    docker rm

    在这里插入图片描述

    5、Docker 三要素(核心组件)

    • Docker images:镜像:统一的封装方式——》模板
    • Docker container:容器:统一的运行时环境 ——》基于镜像,运行状态/运行时状态
    • Docker registry:镜像仓库:放置镜像的仓库——》存放镜像模板
      存储镜像的地方,默认在公共的 Docker Hub上查找,可以搞个人仓库。
      仓库大类:①公共仓库—》docker hub ②私有仓库registry harbor

    在这里插入图片描述

    1. 客户端发起各种各样的命令,给与主机
    2. 主机会调用镜像,如果有镜像直接用,运行为容器
    3. 如果镜像里没有会到registry公共仓库去拉去镜像,拉到本地后再运行为容器

    6、六大名称空间

    namespace资源隔离——用容器技术封装

    在这里插入图片描述

    mount文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录
    user操作进程的用户和用户组
    pid进程编号
    uts主机名和主机域 (同一个环境里不能又叫node1又叫node2)
    ipc信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)
    net(网络资源) 网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等

    7、资源控制——cgroups(对资源进行限制)

    • 六种名称空间是由cgroups管理的
    • 最后一种centos的cgroups管理版本是3.8版本,3.6和3.5用不了
    • cgroups 管理linux内核态中资源管理的模块
    • cgroups 管理一些系统资源
    • 不是docker原生的。

    8、容器特性

    特性——>>性能损耗10-20%

    灵活:即使是最复杂的应用也可以集装箱化。
    轻量级:容器利用并共享主机内核。
    可互换:可以即时部署更新和升级。
    便携式:可以在本地构建,部署到云,并在任何地方运行。
    可扩展:可以增加并自动分发容器副本。
    可堆叠:可以垂直和即时堆叠服务。

    9、容器小的架构体系

    在这里插入图片描述

    三、Docker和虚拟化的区别

    特性Docker容器(一个进程控制)虚拟机虚拟化(完整的操作系统)
    启动速度秒级分钟级
    运行性能接近原生(直接在内核中运行)10%-20%左右的损失50%左右损失(全虚拟化类型)
    磁盘占用50-100MB 3-5G
    数量成百上千,每个进程可控制一个容器几十个
    隔离性进程级别操作系统(更彻底,安全级别高)
    操作系统主要支持Linux几乎所有
    封装程度只封装目标代码和依赖关系,共享宿主机内核完整的操作系统,与宿主机隔离

    容器是依赖于内核来隔离,彼此的关系像共享一样,所以安全性较之虚拟机差一些,毕竟不是完全隔离。所以若一个容器被黑客攻破,宿主机基本也就没了。
    这里也不是完全没有办法,那就是 cgroup 资源分配,其能提供一定的安全机制

    总结

    1、docker原理

    • docker是一种封装和运行的开源平台,他统一了封装方式,统一了运行方式,开源平台指的是docker引擎,统一的封装方式指的是镜像,统一的运行方式指的是容器。
    • cgroup资源控制与namespaces两者构成了docker底层原理
    • docker是一种容器技术,把linux中的cgroups(资源管理)和namespace(名称空间)等容器底层技术进行完美封装,并抽象为用户创建和管理容器的便捷界面(命令行cli、api等),这种C/S架构

    2、简述Docker主要使用的技术

    • Cgroups:资源控制,管理一些系统资源
    • Namespace:资源隔离(名称空间)
    • rootfs:文件系统隔离(使用内核提供的rootfs)
    • 容器引擎(用户态工具) :生命周期控制

    docker本质就是宿主机的一个进程, docker是通过namespace(命名空间)实现资源隔离,通过cgroup,实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘50og)

    Namespace:资源隔离(名称空间)

    3、Docker的优势,和虚拟化比有什么优势

    • docker把容器化技术做成了标准化平台,只要安装了docker引擎,就能使用docker。
    • 实现了一次构建,多次、多处使用。
    • 使用docker有什么意义(实现了3个统一)
      docker引擎统一了基础设施环境-docker环境——>image——>封装一一个简易的操作系统(3.0+G)
      docker引擎统一了 程序打包(装箱/封装-类比于集装箱)方式-docker镜像——>images
      docker引擎统—了程序部署(运行)方式-docker容器——>基于镜像——>运行为容器(可运行的环境)
  • 相关阅读:
    Kafka
    面试基础篇——ArrayList扩容机制
    Mint_21.3 drawing-area和goocanvas的FB笔记(八)
    linux-文件服务
    西门子PLC的优势在哪呢?
    【Linux线程】一、什么是线程
    日志@Slf4j介绍使用及配置等级
    .NET(C#)使用ODP.NET连接ORACLE
    go recover
    力扣练习,假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。
  • 原文地址:https://blog.csdn.net/weixin_66997367/article/details/125490259