当前位置: 首页 > news >正文

Docker:容器化和虚拟化

虚拟化

虚拟化是一种资源管理技术,它将计算机的各种实体资源(如CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来,并可供分割、组合为一个或多个电脑配置环境。这些资源的新虚拟部分是不受现有资源的架设方式、地域或物理配置所限制的。
在这里插入图片描述

像我们常听的虚拟机,就是“伪造”一个硬件抽象接口,将一个操作系统及其资源嫁接到硬件上,实现和真实物理机一样的功能。
123

特点

  • 硬件抽象:虚拟化技术通过在物理硬件和操作系统之间添加一层抽象层,使得多个虚拟机可以在同一台物理服务器上运行。
  • 强隔离性:每个虚拟机都运行一个完整的操作系统(包括其自己的内核),并且相互独立。这种强隔离性使得虚拟机在安全性方面具有优势。
  • 资源分配灵活:虚拟化技术可以根据需要动态地分配和释放资源,从而提高了资源的利用率和灵活性。

为什么要进行虚拟化?

  • 硬件抽象和隔离:虚拟化技术通过在物理硬件和操作系统之间添加一层抽象层,实现了硬件资源的抽象和隔离。这使得多个虚拟机可以在同一台物理机上运行,每个虚拟机都有自己的操作系统和应用程序,相互独立。
  • 资源优化和灵活性虚拟化技术允许根据需求动态地分配和释放资源,从而提高了资源的利用率和灵活性。这有助于应对不断变化的工作负载需求,并优化成本效益。
  • 高可用性:虚拟化技术提供了高可用性解决方案,如虚拟机迁移和故障切换。这确保了应用程序在硬件故障或维护期间能够持续运行,提高了系统的可靠性和稳定性。
  • 简化管理:虚拟化技术简化了基础设施的管理。通过使用虚拟化管理工具,可以轻松地监控、配置和管理虚拟机,降低了管理成本并提高了效率。

容器化

容器化是一种软件开发和部署的技术方法,它允许开发者将应用程序及其所有依赖项(如库、框架、运行时环境、环境变量和配置文件等)打包到一个轻量级、可移植的独立容器中。这些容器包含了运行应用程序所需的一切,从而确保应用程序在不同的环境中能够一致地运行。
在这里插入图片描述

容器通过“伪造”操作系统的接口,将函数库层以上的功能置于操作系统上。
像Docker,就是基于Linux操作系统的Namespace和cgroup功能实现的隔离容器,可用模拟操作系统的功能。
在这里插入图片描述

特点

  • 轻量级:容器只包含应用程序及其依赖项,而不包括整个操作系统,因此资源使用更加高效。
  • 快速部署:由于容器化技术减少了部署过程中的复杂性和开销,因此应用程序可以更快地部署到生产环境中。
  • 高可移植性:容器化技术使得应用程序能够轻松地在不同的环境和平台之间移动,从而提高了应用程序的灵活性和可扩展性。

为什么要进行容器化?

  • 一致性确保在不同环境中的一致性。通过将应用程序及其所有依赖项打包到一个容器中,可以确保应用程序在任何地方都能以相同的方式运行,无论底层基础设施如何。
  • 高效性:容器化技术减少了资源的浪费,因为容器只占用必要的资源,并且可以在同一台物理机上运行多个容器。这提高了资源的利用率,并降低了成本。
  • 快速部署和扩展容器化使得应用程序的部署和扩展变得更加快速和简单。通过使用容器编排工具(如Kubernetes),可以轻松地管理大量容器的生命周期,包括部署升级回滚
  • 安全性:容器提供了应用程序之间的隔离,减少了应用程序之间的相互影响。这有助于增强系统的安全性,并防止一个应用程序的问题影响到其他应用程序。

主机虚拟化的实现

主机虚拟化通过模拟或抽象物理硬件资源,如CPU、内存、存储和网络等,来创建多个虚拟的计算机环境。这些虚拟环境在逻辑上是相互隔离的,但它们可以共享物理主机的硬件资源。

主机虚拟化的原理是通过在物理服务器上安装一个虚拟化层来实现。这个虚拟化层可以在物理服务器和客户操作系统之间建立虚拟机,使得它们可以独立运行。

在这里插入图片描述
通过硬件资源来实现主机虚拟化。
利用处理器、内存和其他硬件技术来提高虚拟化性能和安全性。
硬件辅助虚拟化技术通常与全虚拟化技术结合使用,以提高虚拟化的效率和安全性。

在这里插入图片描述
这种是通过宿主机上的软件程序来实现对资源的隔离。
允许在宿主机上运行多个完全独立的虚拟机,每个虚拟机都具有自己的操作系统和应用程序。
需要在宿主机上模拟硬件、操作系统和设备,以使虚拟机能够与宿主机隔离运行。

容器虚拟化的实现

容器虚拟化通过操作系统级别的隔离和资源控制来实现多个应用程序的并行运行。它利用Linux内核的Namespace和Cgroups功能,为每个容器提供独立的运行环境,同时限制容器的资源使用。

  • Namespace:Namespace是Linux内核用来隔离系统资源的方式。通过Namespace,可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源。这样,不同的进程之间就实现了隔离。容器虚拟化利用Namespace来隔离PID(进程ID)、IPC(进程间通信)、network(网络)、mount(挂载点)等系统资源。
  • Cgroups:Cgroups(Control Groups)是Linux内核提供的一种机制,用于限制、记录和隔离进程组所使用的物理资源(如CPU、内存、磁盘I/O等)。容器虚拟化利用Cgroups来控制容器的资源使用,确保容器不会占用过多的系统资源。

注:部分图片来自于网络:CNBPA ,极海 ,太平洋电脑网

相关文章:

Docker:容器化和虚拟化

虚拟化 虚拟化是一种资源管理技术,它将计算机的各种实体资源(如CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来,并可供分割、组合为一个或多个电脑配置环境。这些资源的新虚拟部分是不受现有资源的架设方式、地域或…...

OpenSSL

OpenSSL 概述 OpenSSL 是一个开源的、安全传输协议实现工具,广泛应用于数据加密与解密、证书生成与管理以及其他安全性相关的任务。在现代网络安全中,OpenSSL 被用于构建和维护 SSL/TLS 通信,确保数据在传输过程中的机密性和完整性。 简单来…...

CSS 常见选择器

1. 基础选择器 元素选择器 选择所有指定类型的 HTML 元素。 p {color: blue; }选择所有 p 标签,并将文字颜色设为蓝色。 类选择器 选择带有特定类名的元素,类名前加 .。 .container {margin: 20px; }选择类名为 container 的所有元素。 ID 选择器 选…...

Linux使用Dockerfile部署Tomcat以及jdk

资源准备 首先提供本教程所有资源包。 当然也可以根据自己需求去官网下载。 链接:百度网盘 请输入提取码 提取码:f31y #我们开始吧 首先我们需要一台linux操作系统的机器,当然windows也是可以的,本系列教程是基于Linux的&#…...

LC20. 有效的括号

用来熟悉一下栈的应用之括号匹配 题目链接 下面是大致思路 1.初始化:创建一个空栈,用于存储左括号。(LC这题不用,自己写完整的需要) 2.遍历字符串:从左到右依次扫描字符串中的每个字符。 3.处理左括号:如果是左括号,将其压入栈中。 4.处理右…...

基于springboot企业微信SCRM管理系统源码带本地搭建教程

系统是前后端分离的架构,前端使用Vue2,后端使用SpringBoot2。 技术框架:SpringBoot2.0.0 Mybatis1.3.2 Shiro swagger-ui jpa lombok Vue2 Mysql5.7 运行环境:jdk8 IntelliJ IDEA maven 宝塔面板 系统与功能介绍 基…...

【MTMSA】不确定缺失模态下基于情态翻译的多模态情感分析

MTMSA是基于TATE改进的,大致框架都和他一样,区别在于MTMSA没有提到tag,并且在多头注意力的部分进行了改进,也就是文中模态翻译模块,此外还加了两个损失函数。在TATE中有一章是不同设置的影响,里面有多个证明…...

【php常用公共函数】php获取指定时间段中有那几年并输出年份的起始时间和结束时间

php获取指定时间段中有那几年并输出年份的起始时间和结束时间 实现思路实现代码输出结果 实现思路 解析输入的时间:将输入的时间字符串转换为DateTime对象。计算年份范围:从开始年份到结束年份,生成一个包含所有年份的数组。输出年份的起始和…...

CTF-PWN: 什么是_IO_FILE?

重要概念:fopen()返回的是一个结构体的指针 _IO_FILE 结构体在什么时候被创建? _IO_FILE 结构体的实例是在程序使用标准 I/O 函数(如 fopen、fclose、fread、fwrite 等)时创建和管理的。这个结构体实际上是 GNU C Library (glibc) 用于处理…...

前端八股文第二篇

11.事件循环 事件循环(Event Loop)是 JavaScript 运行时中的一种机制,用于处理异步操作和事件驱动的编程。在浏览器环境中,事件循环是指浏览器通过事件队列(Event Queue)来管理和调度异步任务的执行顺序。…...

springboot汽车保修服务管理系统-计算机毕业设计源码00052

摘 要 随着汽车数量的不断增加和汽车保修服务需求的日益增长,建立一套高效的汽车保修服务管理系统变得至关重要。基于Spring Boot框架的汽车保修服务管理系统旨在整合汽车保修流程,简化管理流程,提高服务质量和用户体验未来,我们将…...

分布式架构搭建博客网站

目录 运行环境基础配置需求准备工作配置静态ip修改主机名及host映射开启防火墙时间同步配置免密ssh登录 环境搭建Server-Web端安装LNMP环境软件Server-NFS-DNS端上传博客软件Server-NFS-DNS端设置NFS共享Server-Web设置挂载远程共享目录nginx设置在数据库中创建数据库和用户重启…...

python-opencv给图片或视频去水印

文章目录 引言inpaint函数的使用方法鼠标事件回调函数cv2.setMouseCallback介绍去水印步骤实现代码 引言 本文主要基于cv2.inpaint函数实现图片的水印去除。 inpaint函数基于图像修复算法,通过对缺陷区域周围像素的分析和插值,生成合适的像素值来填充缺…...

免费送源码:Java+ssm+Springboot Springboot手办定制销售系统 计算机毕业设计原创定制

Springboot手办定制销售系统 摘 要 随着人们生活水平的提高和互联网的发展,人们消费思想和消费方式的逐渐改变,使得消费者开始追求自身品味和个性。手办定制就是在这种条件下应运而生。手办定制是基于客户需求来定制产品,满足客户对其功能、结…...

卡夫卡的使用

关于消息队列的使用 一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveM…...

mac|maven项目在idea中连接redis

安装maven brew install maven idea-setting导入redis插件 idea新建maven项目 构建系统选择maven 项目右侧数据库图标导入redis 新建一个数据库&#xff0c;名称必须为数字&#xff0c;测试一下是否可以连接&#xff0c;连接成功后选择确定 pom.xml导入redis <depende…...

Python基础学习------第一天

print("hello world") 1.括号和引号&#xff0c;必须使用的是英文 被双引号包围起来的称为字符串。 python注释&#xff1a;单行注释&#xff1a;1.井号# 2.多行注释 &#xff1a;""" """ print输出多个内容是中间用逗号隔开就好…...

MySQL的SQL语句之触发器和存储过程的应用

触发器 Trigger 一.触发器 作用&#xff1a;当检测到某种数据表发生数据变化时&#xff0c;自动执行操作&#xff0c;保证数据的完整性。 1.创建一个触发器 如上图所示&#xff0c;查看这个create的帮助信息的时候&#xff0c;这个create trigger就是创建触发器的意思。 如…...

【MD5】密码加密之加盐算法

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 本期主要是给大家分析一下, 密码的如果加密存储的, 学习加盐算法的思想, 通过一个简单的案例, 即可快速学习. 一起来看看叭~ 适用于编程初学者&#xff0c;感兴趣的朋友们可以订阅&…...

服务器虚拟化

前言 服务器虚拟化是一种技术&#xff0c;它通过将一台物理服务器的软件环境分割成多个独立分区&#xff0c;使每个分区都能模拟出一台完整的虚拟服务器。这种技术利用虚拟化技术充分发挥服务器的硬件性能&#xff0c;提高运营效率&#xff0c;节约能源并降低经济成本。 通过…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...