[docker基础一]docker简介

目录

一  消除恐惧

1) 什么是虚拟化,容器化

2)案例

3)为什么需要虚拟化,容器化

 二  虚拟化实现方式

1)应用程序执行环境分层

2)虚拟化常见类别

3)常见虚拟化实现

一)主机虚拟化(虚拟机)实现

二)容器虚拟化实现


一  消除恐惧

1) 什么是虚拟化,容器化

总结:虚拟化就是把一台物理计算机切分成很多逻辑计算机

           容器化就是虚拟化的一种技术,主要虚拟的是操作系统层面

物理机:实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理 机提供给虚拟机以硬件环境,有时也称为“寄主”或“宿主”。

虚拟化:是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上 同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都 可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

容器化:容器化是一种虚拟化技术,又称操作系统层虚拟化(Operating system level virtualization),这种技术将操作系统内核虚拟化,可以允许用户空间软件实例 (instances)被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运 行。这个软件实例,也被称为是一个容器(containers)。对每个实例的拥有者与用户 来说,他们使用的服务器程序,看起来就像是自己专用的。容器技术是虚拟化的一种。 docker 是现今容器技术的事实标准。

2)案例

物理机如下,就像一个庄园,独立占用了一块土地,花园都是自己的,其他人无法共 享使用。

虚拟机相当于开发商的一个楼盘,一栋楼一套房子一户人家,共享一块宅基地,共享 小区的花园,共享小区的游乐设施。 

容器相当于在 1 个房子里面,开辟出来一个又一个的胶囊公寓,共享这套房子的卫生间、共享厨房、共享 WiFi.只有衣服、电脑等私人物品是你自己的。

3)为什么需要虚拟化,容器化

我们从上面的历史发展来看,虚拟化和容器化的最主要目的就是资源隔离,随着资源 隔离的实现逐渐也带来了更大的收益。

  • 资源利用率高:
  • 将利用率较低的服务器资源进行整合,用更少硬件资源运行更多业务,降低 IT 支出和 运维管理成本。 比如上图中我们的土地直接复用,使用这块土地的人多了,但是成本还是庄园那块地。
  • 环境标准化:
  • 一次构建,随处执行。实现执行环境的标准化发布,部署和运维。开发过程中一个常 见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境, 确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类 问题。
  • 资源弹性伸缩:
  • 根据业务情况,动态调整计算、存储、网络等硬件及软件资源。比如遇到双 11 了,把 服务扩容 100 个,双 11 过去了, 把扩容的 100 个收回去。
  • 差异化环境提供:
  • 同时提供多套差异化的执行环境,限制环境使用资源。 比如我的服务一个以来 Ubuntu 操作系统,一个服务依赖 CentOS 操作系统,但是没 有预算购买两个物理机,这个时候容器化就能很好的提供多种不同的环境。
  • 沙箱安全:
  • 为避免不安全或不稳定软件对系统安全性、稳定性造成影响,可使用虚拟化技术构建 虚拟执行环境。 比如我在容器里面执行 rm -rf /* 不会把整个服务器搞死,也不影响其他人部署的程序 使用。
  • 容器对比虚拟机更轻量,启动更快:
  • 传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运 行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时 间。大大的节约了开发、测试、部署的时间。 docker 不需要虚拟内核,所以启动可以更快,相当于 windows 的开机时间省去了。
  • 维护和扩展容易:
  • Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得 应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外, Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接 在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成 本。比如 docker hub 提供了很多镜像,各个系统的一个命令就可以拿到了,研发也可 以自己定制镜像分享给各个产品。

 二  虚拟化实现方式

1)应用程序执行环境分层

硬件层:提供硬件抽象,包括指令集架构、硬件设备及硬件访问接口

操作系统层 :提供系统调用接口,管理硬件资源

程序库层:提供数据结构定义及函数调用接口

2)虚拟化常见类别

1)虚拟机(相当于硬件层,给上边几层提供服务)

存在于硬件层和操作系统层间的虚拟化技术。虚拟机通过“伪造”一个硬件抽象接口, 将一个操作系统以及操作系统层以上的层嫁接到硬件上,实现和真实物理机几乎一样 的功能。比如我们在一台 Windows 系统的电脑上使用 Android 虚拟机,就能够用这台 电脑打开 Android 系统上的应用。

2)容器(相当于操作系统层)

存在于操作系统层和函数库层之间的虚拟化技术。容器通过“伪造”操作系统的接口, 将函数库层以上的功能置于操作系统上。以 Docker 为例,其就是一个基于 Linux 操作 系统的 Namespace 和 Cgroup 功能实现的隔离容器,可以模拟操作系统的功能。简单 来说,如果虚拟机是把整个操作系统封装隔离,从而实现跨平台应用的话,那么容器 则是把一个个应用单独封装隔离,从而实现跨平台应用。所以容器体积比虚拟机小很多,理论上占用资源更少。容器化就是应用程序级别的虚拟化技术。容器提供了将应 用程序的代码、运行时、系统工具、系统库和配置打包到一个实例中的标准方法。容 器共享一个内核(操作系统),它安装在硬件上。

3)JVM 之类的虚拟机(相当于函数库层)

存在于函数库层和应用程序之间的虚拟化技术。Java 虚拟机同样具有跨平台特性,所 谓跨平台特性实际上也就是虚拟化的功劳。我们知道 Java 语言是调用操作系统函数库 的,JVM 就是在应用层与函数库层之间建立一个抽象层,对下通过不同的版本适应不 同的操作系统函数库,对上提供统一的运行环境交给程序和开发者,使开发者能够调 用不同操作系统的函数库。

3)常见虚拟化实现

一)主机虚拟化(虚拟机)实现

主机虚拟化的原理是通过在物理服务器上安装一个虚拟化层来实现。这个虚拟化层可 以在物理服务器和客户操作系统之间建立虚拟机,使得它们可以独立运行。 从软件框架的角度上,根据虚拟化层是直接位于硬件之上还是在一个宿主操作系统之 上,将虚拟化划分为 Type1 和 Type2. Type1 类的 Hypervisor(Hypervisor 是一种系统软件,它充当计算机硬件和虚拟机之间 的中介,负责有效地分配和利用由各个虚拟机使用的硬件资源,这些虚拟机在物理主 机上单独工作,因此,Hypervisor 也称为虚拟机管理器。)直接运行在硬件之上,没有 宿主机操作系统,Hypervisor 直接控制硬件资源和客户机。典型框架为 Xen、Vmware ESX。

Type2 类的 Hypervisor 运行在一个宿主机操作系统之上(Vmware Workstation)或者 系统里面,Hypervisor 作为宿主机操作系统中的一个应用程序,客户机就是在宿主机操 作系统上的一个进程。 

二)容器虚拟化实现

容器虚拟化实现原理:

容器虚拟化,有别于主机虚拟化,是操作系统层的虚拟化。通过 namespace 进行各程 序的隔离,加上 cgroups 进行资源的控制,以此来进行虚拟化。

容器虚拟化基础之 NameSpace:

什么是 Namespace(命名空间)?

namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进 程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的 资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程 的相关资源指定在同一个 namespace 中。

Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的 进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。 Linux 提供了多个 API 用来操作 namespace,它们是 clone()、setns() 和 unshare() 函 数,为了确定隔离的到底是哪项 namespace,在使用这些 API 时,通常需要指定一些 调用参数:CLONE_NEWIPC、CLONE_NEWNET、CLONE_NEWNS、 CLONE_NEWPID、CLONE_NEWUSER、CLONE_NEWUTS 和 CLONE_NEWCGROUP。如果要同时隔离多个 namespace,可以使用 | (按位或)组合 这些参数。

举个例子:

三年一班的小明和三年二班的小明,虽说他们名字是一样的,但是所在班级不一样, 那么,在全年级排行榜上面,即使出现两个名字一样的小明,也会通过各自的学号来 区分。对于学校来说,每个班级就相当于是一个命名空间,这个空间的名称是班级号。 班级号用于描述逻辑上的学生分组信息,至于什么学生分配到 1 班,什么学生分配到 2 班,那就由学校层面来统一调度。

理论讲完了,接下来的实战请看下一篇文章!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL 的 pg_advisory_lock 函数

PostgreSQL 的 pg_advisory_lock 函数 pg_advisory_lock 是 PostgreSQL 提供的一种应用级锁机制,它不锁定具体的数据库对象(如表或行),而是通过数字键值来协调应用间的并发控制。 锁的基本概念 PostgreSQL 提供两种咨询锁(advi…

SGLang 实战介绍 (张量并行 / Qwen3 30B MoE 架构部署)

一、技术背景 随着大语言模型(LLM)的飞速发展,如何更高效、更灵活地驾驭这些强大的模型生成我们期望的内容,成为了开发者们面临的重要课题。传统的通过拼接字符串、管理复杂的状态和调用 API 的方式,在处理复杂任务时…

微服务中 本地启动 springboot 无法找到nacos配置 启动报错

1. 此处的环境变量需要匹配nacos中yml配置文件名的后缀 对于粗心的小伙伴在切换【测试】【开发】环境的nacos使用时会因为这里导致项目总是无法启动成功

Lua从字符串动态构建函数

在 Lua 中,你可以通过 load 或 loadstring(Lua 5.1)函数从字符串动态构建函数。以下是一个示例: 示例 1:基本动态函数构建 -- 动态构建一个函数 local funcStr "return function(a, b) return a b end"-…

【Python】‌Python单元测试框架unittest总结

1. 本期主题:Python单元测试框架unittest详解 unittest是Python内置的单元测试框架,遵循Java JUnit的"测试驱动开发"(TDD)理念,通过继承TestCase类实现测试用例的模块化组织。本文聚焦于独立测试脚本的编写…

【Python 实战】---- 使用Python批量将 .ncm 格式的音频文件转换为 .mp3 格式

1. 前言 .ncm 格式是网易云音乐专属的加密音频格式,用于保护版权。这种格式无法直接播放,需要解密后才能转换为常见的音频格式。本文将介绍如何使用 Python 批量将 .ncm 格式的音频文件转换为 .mp3 格式。 2. 安装 ncmdump ncmdump 是一个专门用于解密 .ncm 文件的工具。它…

Linux 学习笔记2

Linux 学习笔记2 一、定时任务调度操作流程注意事项 二、磁盘分区与管理添加新硬盘流程磁盘管理命令 三、进程管理进程操作命令服务管理(Ubuntu) 四、注意事项 一、定时任务调度 操作流程 创建脚本 vim /path/to/script.sh # 编写脚本内容设置可执行权…

YOLO目标检测算法

文章目录 前言一、目标检测算法简介1、传统目标检测算法(1)R-CNN算法简介(2)Fast R-CNN算法简介(3)Faster R-CNN算法简介 2、目标检测中的算法设计范式(1)one-stage(2&am…

【软件设计师:软件】20.软件设计概述

一、软件设计基本原则 一、软件设计基本原则 1. 模块 是指执行某一特定任务的数据结构和程序代码。 将模块的接口和功能定义为其外部特性将模块的局部数据和实现该模块的程序代码称为内部特性。在模块设计时,最重要的原则就是实现信息隐蔽和模块独立。 2 . 信息隐蔽 将每…

软件工程之面向对象分析深度解析

前文基础: 1.软件工程学概述:软件工程学概述-CSDN博客 2.软件过程深度解析:软件过程深度解析-CSDN博客 3.软件工程之需求分析涉及的图与工具:软件工程之需求分析涉及的图与工具-CSDN博客 4.软件工程之形式化说明技术深度解…

需求分析阶段测试工程师主要做哪些事情

在软件测试需求分析阶段,主要围绕确定测试范围、明确测试目标、细化测试内容等方面开展工作,为后续测试计划的制定、测试用例的设计以及测试执行提供清晰、准确的依据。以下是该阶段具体要做的事情: 1. 需求收集与整理 收集需求文档&#x…

vLLM部署Qwen2-7B模型推理

vllm简介 vLLM是一个高效的大语言模型推理和部署服务系统,专为大型语言模型的高效执行而设计。它不仅支持多种量化技术以减少模型大小和加速推理过程,还提供了与OpenAI API兼容的服务接口,使得现有的应用程序能够无缝对接。 一、前提环境 …

【STM32 学习笔记】GPIO输入与输出

GPIO详解 一、GPIO基本概念 GPIO(通用输入输出)是微控制器与外部设备交互的核心接口,具有以下特性: 可编程控制输入/输出模式支持数字信号的读取与输出集成多种保护机制复用功能支持片上外设连接 二、GPIO位结构解析 2.1 保护二…

安科瑞光伏综自系统在新能源电站中的应用及调度上传方案研究

摘要 随着全球对清洁能源需求的不断增长,光伏发电作为一种可持续的能源解决方案,正迅速发展。光伏综合自动化系统(综自系统)在确保光伏电站高效、稳定运行方面起着关键作用。本文详细介绍了安科瑞光伏综自系统,包括其背…

[python] 函数2-匿名函数

一 匿名函数 格式: 函数名 lambda 形参 : 返回值(表达式) 调用: 结果 函数名(实参) 一般只有一行代码,他是对def定义函数的一种简化,只能实现简单的逻辑 逻辑复杂时不要使用lambda add lambda a,b: ab # a,b就是形参 print(add(2,5)) 1.1 无参数 noargs_func lambda…

深入理解C/C++内存管理:从基础到高级优化实践

一、内存区域划分与基础管理机制​​ ​​栈(Stack)​​ 栈由系统自动管理,用于存储函数调用时的局部变量、参数及返回地址。其特点是高效但空间有限(通常1-8MB),遵循后进先出(LIFO)…

kafka 面试总结

Kafka的幂等性是一种机制,确保生产者发送的每条消息在Broker端只被持久化一次,即使生产者因网络问题等原因重试发送,也不会导致消息重复。 实现原理 生产者ID(PID) 每个生产者实例在初始化时,会被分配一个…

uniapp|实现多终端聊天对话组件、表情选择、消息发送

基于UniApp框架,实现跨平台多终端适配的聊天对话组件开发、表情选择交互设计及消息发送,支持文本与表情混合渲染。 目录 聊天界面静态组件实现消息列表布局消息气泡双向布局辅助元素定位与样式静态数据模拟与扩展性设计表情选择器静态模块浮层实现符号网格排列多端样式适配方…

LabVIEW超声波液位计检定

在工业生产、运输和存储等环节,液位计的应用十分广泛,其中超声波液位计作为非接触式液位测量设备备受青睐。然而,传统立式水槽式液位计检定装置存在受建筑高度影响、量程范围受限、流程耗时长等问题,无法满足大量程超声波液位计的…

C++漫步结构与平衡的殿堂:AVL树

文章目录 1.AVL树的概念2.AVL树的结构3.AVL树的插入4.AVL树的旋转4.1 左单旋4.2 右单旋4.3 右左双旋4.4 左右双旋 5.AVL树的删除6.AVL树的高度7.AVL树的平衡判断希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 二叉搜索树有其自身的缺陷&#xf…