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

【Docker 01】Docker 简介

🌈 一、虚拟化、容器化

⭐ 1. 什么是虚拟化、容器化

  • 物理机:真实存在的服务器 / 计算机,对于虚拟机来说,物理机为虚拟机提供了硬件环境
  • 虚拟化:通过虚拟化技术将一台计算机虚拟为 1 ~ n 台逻辑计算机。在一台计算机中可以运行多个虚拟机,且每个虚拟机可以运行不同的 OS,在每台虚拟机中运行的应用程序相互独立。(平时买的 1 核 2 G、2 核 4 G 这些云服务器,就是从服务器上切割出这些资源来虚拟给用户的)。
  • 容器化:虚拟化技术中的一种,也被称为操作系统虚拟化。该技术能够将 OS 的内核虚拟化,可允许用户空间软件实例呗分割成几个独立的单元,来在内核中运行,而不是只有一个单一实例运行。这个软件实例,也被称作是一个容器Docker 是现今容器技术的事实标准

⭐ 2. 为什么需要虚拟化、容器化

1. 沙箱安全

  • 应用程序不会直接运行在服务器上。通常来说,一个公司的服务器上会跑很多的应用程序,一个应用挂掉了,还需要别的应用能够运行。如果服务器因为一个应用导致整个主机挂掉了(因为就一个 OS),那这个公司所有运行在该主机上的应用也会跟着挂掉,这是不被允许的。
  • 而使用了虚拟化、容器化技术之后,让每个应用程序都单独运行在各自的盒子中,即使一个虚拟环境中的系统被在它里面运行的程序搞挂掉了,也不会影响在其他虚拟环境中运行的程序。

2. 分离运行环境

  • 很多软件需要的依赖环境是不同的,有的软件在 A 环境上运行不了,而有的软件又只能用 B 环境。
  • 使用虚拟化、容器化技术就可以的为每个应用配置它们所需要的环境,不需要再用额外的手段来进行管理。

image-20250607210930493

🌈 二、虚拟化的实现方式

⭐ 1. 应用程序的执行环境分层

层级层名示例说明
4应用程序层抖音、Facebook、YouTube 等
3函数库层如 stdio.h提供数据结构定义及函数调用接口
2操作系统(OS)层Linux、Windows、iOS 等提供系统调用接口、管理硬件资源
1硬件层物理机提供硬件抽象,其中包括指令集架构、硬件设备及硬件访问接口

⭐ 2. 虚拟化的常见分类

1. 虚拟机

  • 存在于硬件层和 OS 层之间的虚拟化技术。虚拟机通过 “伪造” 一个硬件抽象接口,将一个 OS 以及 OS 层以上的层嫁接到硬件上,实现和真实物理机几乎一样的功能。
    • 例:在一台装着 Windows 系统的电脑上使用装着 Android 系统的虚拟机,就可以在这台电脑上打开只能在 Android 系统上才能打开的应用。

2. 容器

  • 存在于 OS 层和函数库层之间的虚拟化技术。容器通过 “伪造” OS 的接口,将函数库层以上的功能置于 OS 上。
    • 例:Docker 就是一个基于 Linux 的 Namespace 和 Cgroup 功能实现隔离容器,可以模拟操作系统的功能。
  • 如果虚拟机是通过将整个 OS 进行封装隔离,来实现跨平台应用的话,容器就是将一个个应用进行单独封装隔离,来实现跨平台应用。

3. JVM 之类的虚拟机

  • 存在于函数库层和应用程序层之间的虚拟化技术。通过伪造函数库层和应用程序层的接口
  • 对于接口进行了差异,运行在 Windows 上的应用就调用 Windows 的接口,运行在其他 OS 上的则同理。

⭐ 3. 主机的虚拟化实现(虚拟机)

  • 通过在物理服务器上安装一个虚拟化层来实现主机的虚拟化。虚拟化层可以在物理服务器和客户操作系统之间来建立虚拟机,让它们可以独立运行。
  • 从软件框架的角度看,虚拟化可以分为 Type1(虚拟化层位于硬件上)和 Type2(虚拟化层位于 OS 上)两种。

image-20250607194535189

0. Hypervisor 介绍

  • Hypervisor 是一种系统软件,充当着计算机和虚拟机之间的中介,负责有效的分配和利用由各个虚拟机使用的硬件资源,这些虚拟机会在物理机上单独工作,Hypervisor 也被称为虚拟机管理器
    • 例1:假设虚拟机想要 2G 内存、2 核 CPU、50G 硬盘,和 Hypervisor 说了之后,就能为虚拟机将这些资源虚拟化(模拟)出来。
    • 例2:如果为虚拟机虚拟出了一个 Ubuntu 的操作系统,对于这个操作系统的启动、暂停、删除等管理操作也由 Hypervisor 来完成。

1. Type1 虚拟化

  • Type1 的 Hypervisor 直接在硬件上运行,没有宿主机操作系统。
  • Type1 的 Hypervisor 直接控制硬件资源和客户机,典型框架有 Xen、Vmware、ESX。

2. Type2 虚拟化

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

⭐ 4. 容器的虚拟化实现

  • 容器虚拟化,是位于操作系统层的虚拟化。
  • 通过 namespace 进行各程序的隔离,再加上 cgroups 对资源进行控制,从而实现容器的虚拟化。

🌙 4.1 NameSpace

  • namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让进程只能看到和自己有关的那部分资源,而感知不到其他进程的存在。
namespace系统调用参数被隔离的全局系统资源引入的内核版本在容器环境下的隔离效果
UTSCLONE_NEWUTS主机名和域名2.6.19每个容器能看到自己的 hostname,拥有独立的主机名和域名
IPCCLONE_NEWIPC信号量、消息队列、共享内存2.6.19同一个 IPC namespace 的进程之间能互相通讯,不同的 IPC namespace 之间不能通信
PIDCLONE_NEWPID进程编号2.6.24每个 PID namespace 中的进程可以有其独立的 PID,每个容器可以有其 PID 为 1 的 root 进程
NetworkCLONE_NEWNET网络设备、网络栈、端口等2.6.29每个容器用有其独立的网络设备,IP 地址,IP 路由表,/proc/net 目录,端口号
MountCLONE_NEWNS文件系统挂载点2.4.19每个容器能看到不同的文件系统层次结构
UserCLONE_NEWUSER用户和用户组3.8每个容器可有有不同的 user 和 group id

🌙 4.2 cgroups

1. 什么是 cgroups

  • cgroups(Control Groups)是 Linux 内核提供的一种机制,这种机制可以根据需求将一系列系统任何及其子任务整合 / 分隔到按资源来划分等级的不同组内,从而为系统资源的管理提供一个统一的框架。

    • 说人话就是,将进程按照被限制的资源来进行分组。假设现在有一个 2G 内存组,被分到这个组内的进程就都只能占 2G 的内存。
  • cgroups 可以限制、记录任务组所使用的物理资源。

2. 为什么使用 cgroups

  • cgroups 可以对 CPU、内存等资源实现精细化的控制
  • 轻量级容器 Docker 就使用率 cgroups 提供的资源限制能力来完成对 CPU、内存等部分的资源控制。
  • 例:在某个 8 核服务器上部署了一个 web 服务和一个后端计算模块,可以使用 cgroups 来让 web 服务使用 6 核,让后端计算模块使用 2 核。

🌙 4.3 Linux 容器 - LXX

  • LXC 是一种操作系统虚拟化技术,是 Linux 内核容器功能的一个用户空间接口。
  • LXC 可以将应用软件系统打包成一个软件容器(Container),该容器内包含了应用软件本身的代码,以及所需要的操作系统核心和库。
  • Docker 是 LXC 的增强版。

🌈 三、Docker 是什么

⭐ 1. Docker 的本质

  • Docker 本质上是 LXC 的增强版,它本身不是容器(容器是 Linux 内核中的技术),而是容器的易用工具。
  • Docker 的主要目标是通过对组件的封装、分发、部署、运行等生命周期的管理,使用户的应用及其运行环境可以做到一次封装、到处运行

⭐ 2. Docker 和虚拟机的区别

传统虚拟机Docker 容器
磁盘占用几 GB ~ 几十 GB几十 MB ~ 几百 MB
CPU 和内存占用虚拟操作系统很占 CPU 和内存,需要通过虚拟层调用,占用率高直接作用于硬件资源,占用少
启动速度几分钟(从开机到运行项目)几秒钟(从开启容器到运行项目)
安装管理要专门的运维技术安装、管理方便
应用部署手动部署、速度慢可以自动化部署、速度快
隔离性系统级别进程级别
封装程度对整个操作系统进行打包打包项目代码和项目所需要的部分操作系统

相关文章:

【Docker 01】Docker 简介

🌈 一、虚拟化、容器化 ⭐ 1. 什么是虚拟化、容器化 物理机:真实存在的服务器 / 计算机,对于虚拟机来说,物理机为虚拟机提供了硬件环境。虚拟化:通过虚拟化技术将一台计算机虚拟为 1 ~ n 台逻辑计算机。在一台计算机…...

信息最大化(Information Maximization)

信息最大化在目标域无标签的域自适应任务中,它迫使模型在没有真实标签的情况下,对未标记数据产生高置信度且类别均衡的预测。此外,这些预测也可以作为伪标签用于自训练。 例如,在目标域没有标签时,信息最大化损失可以…...

整数的字典序怎么算

在Python中,字典序(lexicographical order)通常指的是按照字符串的字典顺序进行比较或排序。对于整数来说,字典序可以理解为将整数转换为字符串后进行比较的顺序。 计算整数的字典序 要计算整数的字典序,可以按照以下…...

知识拓展卡————————关于Access、Trunk、Hybrid端口

目录 什么是Trunk List、VLAN ID、PVID: VLAN ID(Virtual Local Area Network Identifier): Trunk List(Trunk列表): PVID(Prot VLAN ID): 关于Native VLAN &#x…...

AUTOSAR实战教程--DoIP_02_诊断链路建立流程

第一步:DoIP实体车辆声明/诊断仪车辆识别请求 打开激活线以后,DoIP实体发的三帧车辆声明报文。其中包含了DoIP实体的诊断逻辑地址(可以类比DoCAN的物理请求/响应地址),对应车辆的VIN码(若已配置&#xff0…...

音频剪辑软件少之又少好用

我们平时见到的图片以及视频编辑工具非常多,但是音频剪辑软件却是少之又少,更不用说有没有好用的,今天,给大家带来一款非常专业的音频剪辑软件,而且是会员喔。 软件简介 一款手机号登录即可以享受会员的超专业音频剪…...

客户端和服务器已成功建立 TCP 连接【输出解析】

文章目录 图片**1. 连接状态解析****第一条记录(服务器监听)****第二条记录(客户端 → 服务器)****第三条记录(服务器 → 客户端)** **2. 关键概念澄清****(1) 0.0.0.0 的含义****(2) 端口号的分配规则** *…...

多标签多分类 用什么函数激活

在多标签多分类任务中,激活函数的选择需要根据任务特性和输出层的设计来决定。以下是常见的激活函数及其适用场景: 一、多标签分类任务的特点 每个样本可以属于多个类别(标签之间非互斥,例如一篇文章可能同时属于 “科技” 和 “…...

day26-计算机网络-4

1. tcp的11种状态 ss -ant -a 表示看所有状态 -n 表示不将ip解析为主机名 -t 表示tcp 1.1. closed状态(客户端、服务端) 客户端发起建立连接前的状态服务端启动服务前的状态 1.2. listen状态(服务端) 服务端软件运行的时候状…...

ngx_stream_geo_module在传输层实现高性能 IP Region 路由

一、模块定位与核心价值 层次:工作在 Stream (TCP/UDP) 层,和 ngx_http_geo_module 的 L7 语义互补。作用:基于客户端 IP 前缀 / 范围生成一个 Nginx 变量,可在后续 proxy_pass、map、limit_conn、access 等指令中使用&#xff0…...

国防科技大学计算机基础慕课课堂学习笔记

1.信息论 香农作为信息论的这个创始人,给出来了这个信息熵的计算方法,为我们现在的这个生活的很多领域奠定了基础,我第一次听说这个信息熵是在这个数学建模里面的理论学习中有关于这个:决策树的模型,在那个问题里面&a…...

【第七篇】 SpringBoot项目的热部署

简介 本文介绍了热部署(Hot Deployment)的概念、使用场景及在IDEA中的配置方法。热部署可在不重启应用的情况下动态更新代码,提升开发效率,适用于调试、微服务架构和自动化测试等场景。文章详细说明了热部署的实现步骤&#xff08…...

解决pycharm同一个文件夹下from *** import***仍显示No module named

1、,from ***import *,同文件夹中已有.py文件但是仍然报错No module named 原因是因为pycharm没有把文件夹设置为根目录,只需要在文件夹的上一级设置为根目录即可,测试过如果仅仅将当前的文件夹设置仍然报错,如果把最上…...

GO 基础语法和数据类型面试题及参考答案(上)

目录 Go 中变量定义方式有哪些?各有什么适用场景? 使用 : 定义变量的限制是什么? 全局变量可以使用 : 声明吗?为什么? Go 中如何声明一个多变量赋值?有哪些注意事项? 常量能否通过表达式赋值…...

使用 Redisson 实现分布式锁—解决方案详解

Redisson 是 Redis 官方推荐的 Java 客户端,提供了一系列分布式服务实现,其中分布式锁是其核心功能之一。本文将深入解析 Redisson 分布式锁的实现原理、高级特性和最佳实践。 一、Redisson 分布式锁的优势 与传统实现的对比 特性手动实现Redisson 实现…...

结合三维基因建模与智能体技术打造工业软件无码平台

通过深度整合 Protocol Buffers (Protobuf)、gRPC 及 Microsoft AI 技术,构建面向智能制造的高性能、智能化 PLM 平台。 一、Protocol Buffers 深度集成 1. 基因模型标准化定义 三维基因容器 Protobuf 规范: protobuf syntax "proto3"; pa…...

Python Day46

Task: 1.不同CNN层的特征图:不同通道的特征图 2.什么是注意力:注意力家族,类似于动物园,都是不同的模块,好不好试了才知道。 3.通道注意力:模型的定义和插入的位置 4.通道注意力后的特征图和热力…...

基于PostGIS的各地级市路网长度统计及Echarts图表可视化实践-以湖南省为例

目录 前言 一、路网长度计算 1、地级市列表查询 2、地级市路网长度查询 二、Echarts可视化实现 1、Echarts后端生成 2、引入Colormap配色 3、前端微调 三、总结 前言 在当今快速发展的社会中,交通路网的建设与布局对于一个地区的经济发展、居民生活以及城市…...

mac版excel如何制作时长版环形图

设置辅助列 创建簇状柱形图 将辅助列绘制在次坐标轴 工作时长在主坐标轴,右键分别更改图表类型为圆环。 辅助列圆环全部为灰色,边框为白色 辅助列设置透明度100% 设置辅助列和工作时长列同样的圆环大小 可得 核心:只要辅助列边框不透明…...

PCB设计教程【大师篇】——STM32开发板原理图设计(电源部分)

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理 目录 前言 1. 工程创建与前期…...

k8s4部署

configMap configmap概述:数据会存储在etcd数据库,其应用场景主要在应用程序的配置 configmap支持的类型(1)键值对(2)多行数据 pod使用configmap资源有两种常见的方式(1)变量注入&a…...

贝叶斯医学分析中“先验”的如何进行选择(文献解读)

贝叶斯医学分析中“先验”的如何进行选择(文献解读) 作者:Callum Taylor, Kathryn Puxty, Tara Quasim, Martin Shaw 文章标题:Understanding Bayesian analysis of clinical trials: an overview for clinicians 期刊名称&#x…...

【汇编逆向系列】七、函数调用包含多个参数之浮点型- XMM0-3寄存器

目录 1. 汇编代码 1.1 debug编译 1.2 release编译 2. 汇编分析 2.1 浮点参数传递规则 2.2 栈帧rsp的变化时序 2.3 参数的访问逻辑 2.4 返回值XMM0寄存器 3. 汇编转化 3.1 Debug编译 3.2 Release 编译 3.3 C语言转化 1. 汇编代码 上一节介绍了整型的函数传参&#x…...

【MySQL系列】MySQL 执行 SQL 文件

博客目录 一、MySQL 执行 SQL 文件的常见场景二、MySQL 执行 SQL 文件的主要方法1. 使用 MySQL 命令行客户端2. 在 MySQL 交互界面中使用 source 命令3. 使用 MySQL Workbench 等图形化工具4. 使用编程语言接口 三、执行 SQL 文件时的注意事项1. 字符集问题2. 事务处理3. 错误处…...

论文MR-SVD

每个像素 7 个 FLOPs意思: FLOPs(浮点运算次数):衡量算法计算复杂度的指标,数值越小表示运算越高效。含义:对图像中每个像素进行处理时,仅需执行7 次浮点运算(如加减乘除等&#xf…...

Java 日期时间类全面解析

Java 日期时间类全面解析:从传统到现代的演进 一、发展历程概览 二、传统日期类(Java 8前) 1. java.util.Date - 日期表示类 Date now new Date(); // 当前日期时间 System.out.println(now); // Wed May 15 09:30:45 CST 2023// 特定时间…...

【工具-Wireshark 抓包工具】

工具-Wireshark 抓包工具 ■ Wireshark 抓包工具■ 通过IP指定查看■■ ■ Wireshark 抓包工具 抓包工具】win 10 / win 11:WireShark 下载、安装、使用 Wireshark下载 阿里云镜像 ■ 通过IP指定查看 ■ ■...

Linux安全机制:从SELinux到Intel SGX的堡垒

Linux安全机制:从SELinux到Intel SGX的堡垒 数字世界的钢铁长城 引言:操作系统的"防御工事" 当服务器每天承受数百万次攻击尝试时,Linux内核的安全机制如同精密的防御系统,在纳秒级时间内做出响应。现代Linux安全架构已…...

设备驱动与文件系统:06 目录与文件

磁盘使用的最后一层抽象:文件系统 今天我们讲第31讲,这一讲将完成磁盘对磁盘使用的最后一层抽象。对此板使用最后一层抽象,抽象出来的是什么呢? 实际上我们使用过磁盘,大家应该有这样的认识,最后不管这个磁…...

C++11 Token Bucket (令牌桶)算法的锁无实现及应用

Token Bucket(令牌桶)算法是一种在流量控制和资源分配领域被广泛应用的技术。它通过约束数据传输速率或任务执行频率,确保系统在资源有限的情况下,能够稳定、高效地运行,避免因突发流量或任务积压而导致的性能下降甚至…...