Docker-基础

Docker

  • ⛅虚拟化&容器化
    • 🌠为什么要虚拟化&容器化
  • ⛅虚拟化实现方式
    • 🌠应用程序执行环境分层
    • 🌠虚拟化常见类别
      • ☃️虚拟机
      • ☃️容器
      • ☃️JVM 之类的虚拟机
    • 🌠常见虚拟化实现
      • ☃️主机虚拟化(虚拟机)实现
      • ☃️容器虚拟化实现

⛅虚拟化&容器化


  • 物理机: 实际的服务器或者计算机
    • 相对于虚拟机而言的对实体计算机的称呼. 物理机提供给虚拟机以硬件环境, 有时也称为"寄主"或"宿主"
  • 虚拟化: 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机
    • 在一台计算机上同时运行多个逻辑计算机, 每个逻辑计算机可运行不同的操作系统, 并且应用程序都可以在相互独立的空间内运行而互不影响, 从而显著提高计算机的工作效率
  • 容器化: 容器化是一种虚拟化技术, 又称操作系统层虚拟化(Operating system level virtualization)
    • 这种技术将操作系统内核虚拟化,可以允许用户空间软件实例(instances)被分割成几个独立的单元, 在内核中运行, 而不是只有一个单一实例运行. 这个软件实例, 也被称为是一个容器(containers)
    • 对每个实例的拥有者与用户来说, 他们使用的服务器程序, 看起来就像是自己专用的. 容器技术是虚拟化的一种
    • docker 是现今容器技术的事实标准

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

🌠为什么要虚拟化&容器化

  • 资源利用率高
  • 环境标准化
  • 资源弹性伸缩
  • 差异化环境提供
  • 沙箱安全
  • 容器对比虚拟机更轻量,启动更快
  • 维护和扩展容易

🍂资源利用率高

将利用率较低的服务器资源进行整合, 用更少硬件资源运行更多业务, 降低 IT 支出和运维管理成本

🍂环境标准化

一次构建, 随处执行. 实现执行环境的标准化发布, 部署和运维

开发过程中一个常见的问题是环境一致性问题. 由于开发环境、测试环境、生产环境不一致, 导致有些 bug 并未在开发过程中被发现

而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 这段代码在我机器上没问题啊这类问题

在这里插入图片描述

🍂资源弹性伸缩

根据业务情况, 动态调整计算、存储、网络等硬件及软件资源. 比如遇到双 11 了, 把服务扩容 100 个, 双 11 过去了, 把扩容的 100 个收回去

🍂差异化环境提供

同时提供多套差异化的执行环境, 限制环境使用资源

比如我的服务一个依赖 Ubuntu 操作系统,一个服务依赖 CentOS 操作系统,但是没有预算购买两个物理机,这个时候容器化就能很好的提供多种不同的环境

在这里插入图片描述

🍂沙箱安全

为避免不安全或不稳定软件对系统安全性、稳定性造成影响, 可使用虚拟化技术构建虚拟执行环境

比如我在容器里面执行rm -rf /*不会把整个服务器搞死,也不影响其他人部署的程序使用

🍂容器对比虚拟机更轻量,启动更快

传统的虚拟机技术启动应用服务往往需要数分钟, 而 Docker 容器应用, 由于直接运行于宿主内核, 无需启动完整的操作系统, 因此可以做到秒级、甚至毫秒级的启动时间. 大大的节约了开发、测试、部署的时间

(docker 不需要虚拟内核, 所以启动可以更快, 相当于 windows 的开机时间省去了)

🍂维护和扩展容易

Docker 使用的分层存储以及镜像的技术, 使得应用重复部分的复用更为容易, 也使得应用的维护更新更加简单, 基于基础镜像进一步扩展镜像也变得非常简单

此外, Docker 团队同各个开源项目团队一起维护了一大批高质量的官方镜像, 既可以直接在生产环境使用, 又可以作为基础进一步定制, 大大的降低了应用服务的镜像制作成本

比如 docker hub 提供了很多镜像, 各个系统一个命令就可以拿到了, 研发也可以自己定制镜像分享给各个产品

在这里插入图片描述

⛅虚拟化实现方式

🌠应用程序执行环境分层

  • 硬件层: 提供硬件抽象, 包括指令集架构、硬件设备及硬件访问接口(eg: 服务器)
  • 操作系统层: 提供系统调用接口, 管理硬件资源(eg: linux, windows, ios)
  • 程序库层: 提供数据结构定义及函数调用接口(eg: main 函数)
  • 应用程序层: 提供网络服务(eg: qq, tiktok)

🌠虚拟化常见类别

☃️虚拟机


存在于硬件层和操作系统层间的虚拟化技术. 虚拟机通过"伪造"一个硬件抽象接口, 将一个操作系统以及操作系统层以上的层嫁接到硬件上, 实现和真实物理机几乎一样的功能

比如我们在一台 Windows 系统的电脑上使用 Android 虚拟机, 就能够用这台电脑打开 Android 系统上的应用

☃️容器


存在于操作系统层和函数库层之间的虚拟化技术. 容器通过"伪造"操作系统的接口, 将函数库层以上的功能置于操作系统上. 以 Docker 为例, 其就是一个基于 Linux 操作系统的 Namespace 和 Cgroup 功能实现的隔离容器, 可以模拟操作系统的功能

简单来说, 如果虚拟机是把整个操作系统封装隔离, 从而实现跨平台应用的话, 那么容器则是把一个个应用单独封装隔离, 从而实现跨平台应用. 所以容器体积比虚拟机小很多, 理论上占用资源更少. 容器化就是应用程序级别的虚拟化技术. 容器提供了将应用程序的代码、运行时、系统工具、系统库和配置打包到一个实例中的标准方法. 容器共享一个内核(操作系统),它安装在硬件上

☃️JVM 之类的虚拟机


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

🌠常见虚拟化实现

☃️主机虚拟化(虚拟机)实现


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

从软件框架的角度上, 根据虚拟化层是直接位于硬件之上还是在一个宿主操作系统之上, 将虚拟化划分为 Type1 和 Type2

  • Type1 → 直接作用于硬件
  • Type2 → 通过宿主机作用于硬件

Type1 类的 Hypervisor(Hypervisor 是一种系统软件, 它充当计算机硬件和虚拟机之间的中介, 负责有效地分配和利用由各个虚拟机使用的硬件资源, 这些虚拟机在物理主机上单独工作. 因此, Hypervisor 也称为虚拟机管理器)直接运行在硬件之上, 没有宿主机操作系统, Hypervisor 直接控制硬件资源和客户机. 典型框架为 Xen、VmwareESX

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

☃️容器虚拟化实现


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

在这里插入图片描述

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

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

相关文章

备战蓝桥杯————差分数组2

目录 引言 一、拼车 题目描述 解题思路及代码 结果展示 二、航班预定统计 题目描述 解题思路及代码 结果展示 总结 引言 在现代交通管理中,拼车服务和航班预订系统是提高资源利用效率、优化用户体验的关键技术。随着城市交通压力的增大和航空业的快速发…

设计模式-结构模式-装饰模式

装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。 //首先,定义一个组件接口: public in…

Sqli-labs靶场第12关详解[Sqli-labs-less-12]

Sqli-labs-Less-12 #手工注入 post传参了 根据题目看,像一个登录页面,尝试使用布尔型盲注测试能否登录网站 1. Username输入a a" 测试是否会有报错,burp抓包 报错:syntax to use near "a"") and passw…

latex报错I was expecting a `,‘ or a `}‘的解决办法

解决办法——经过检查在ref22后面缺少一个逗号 总结 当你在使用LaTeX时遇到“I was expecting a , or a }”这样的错误,这通常意味着LaTeX在解析你的代码时,预期在某个位置看到一个逗号(,)或一个大括号(})…

多余图片人物有什么办法可以去掉?一分钟教你搞定

在我们的快节奏生活中,旅游已经成为了一种宝贵的放松方式,它让我们有机会暂时逃离日常的喧嚣,感受大自然的宁静与美丽。每一次踏足新的土地,我们都会被各种独特的风景所吸引,从雄伟的山川到细腻的街景,每一…

项目风险:测试大佬结合实例告诉你如何应对!

项目有风险 今天下午15点,团队成员D向他的主管Z反馈他测试的项目有风险:项目在测试周期内,但在用例评审时发现有一处功能逻辑有争议,需要产品经理跟业务方确认,可能出现的情况有: 1 不变更需求&#xff0…

Python编程小案例—利用flask查询本机IP归属并输出网页图片

Python编程小案例—利用flask查询本机IP归属并输出网页图片 环境:Pycharm Mac OS 源码如下: from flask import Flask, render_template, requestapp Flask(__name__)app.route(/) def index():return render_template(IP查询.html)if __name__ __…

程序员必备开发工具

Chat GPT的升级节奏让人们越来越惊讶的同时,也让大家感觉到了压力,在如此快节奏的互联网世界中,开发人员需要不断学习与更新知识,保持领先地位并高效地交付高质量软件。 无论是集成开发环境 (IDE)、版本控制系统、测试工具、协作平台还是文档工具,学习并掌握这些流行的顶…

14:00面试,14:07就出来了,问的问题过于变态了。。。

我从一家小公司转投到另一家公司,期待着新的工作环境和机会。然而,新公司的加班文化让我有些始料未及。虽然薪资相对较高,但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时,公司突然宣布了一则令人…

Vue开发实例(六)实现左侧菜单导航

左侧菜单导航 一、一级菜单二、二级菜单三、三级菜单1、加入相关事件 四、菜单点击跳转1. 创建新页面2. 配置路由3. 菜单中加入路由配置4、处理默认的Main窗口为空的情况 五、动态左侧菜单导航1、动态实现一级菜单2、动态实现二级菜单 一、一级菜单 在之前的Aside.vue中去实现…

python3装饰器

装饰器 它允许你修改函数或类的行为,而不更改其源代码。实质上,装饰器是接受另一个函数作为参数并返回一个包装原始函数的新函数。这样,你可以在不修改原始函数的情况下,添加一些额外的功能或逻辑。 def time_cost(func):"…

QML中动态表格修改数据

1.qml文件中的实现代码 import QtQuick 2.15 import QtQuick.Window 2.15import QtQuick.Controls 2.0 import Qt.labs.qmlmodels 1.0 import QtQuick.Layouts 1.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")TableModel{id:table_model…