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

初始Docker

概述:

容器,作为云原生技术的重要组成部分,与虚拟机一样,均属于虚拟化技术的范畴。然而,容器技术以其独特的优势,在虚拟化领域中脱颖而出。与虚拟机不同,容器能够摆脱操作系统的束缚,实现更为轻量级的虚拟化,其资源消耗显著降低,且具备快速启动的特性。

容器的核心特点

容器也完美契合了虚拟化技术的四大核心原则:分区、隔离、封装、以及相对硬件独立。

image.png

  • 分区:确保容器内部的应用能够独享一套硬件资源,互不干扰。

  • 隔离:通过逻辑隔离机制,建立多个容器间的屏障,防止相互影响。

  • 封装:将整个容器封装在独立于物理硬件的文件集中,便于管理和迁移。

    image.png

  • 独立:容器可在相同的Linux内核上运行,不受限于特定硬件,展现了高度的灵活性。

与虚拟机的异同

虽然容器与虚拟机在虚拟化目标上相似,但实现方式却大相径庭。容器同样需要类似Hypervisor的平台支持,但这一平台在容器领域被称为“容器引擎”,其中最知名的包括Docker、Podman、iSula等。特别是Docker,已成为本次的主要讲解对象。然而,值得注意的是,近年来政策变化(如Docker Hub的访问限制)及操作系统更新(如CentOS 7停止更新)对Docker的安装与使用产生了一定影响,具体安装步骤后续我们会展开。

跟虚拟机的异同表如下:

image.png

容器的秒级启动能力

与虚拟机相比,容器在隔离的同时,还实现了秒级启动的壮举,极大地提升了应用的部署与响应速度。

image.png

为应用量身打造的虚拟化基础

容器是专为应用设计的虚拟化基础设施。它允许开发者将应用及其依赖项打包成一个独立的、可移植的容器,内部资源仅服务于特定应用,从而实现了高度的资源优化。相比之下,虚拟机则旨在提供一个通用的资源环境,满足多种应用的需求。

容器的生命周期管理

容器能够像虚拟机一样,完成从创建、运行到销毁的整个生命周期管理过程,为应用的部署与维护提供了极大的便利。

容器的虚拟化实现机制

容器的虚拟化并非通过传统的Hypervisor进行硬件模拟,而是依赖于容器引擎通过Namespace和Cgroup等机制对应用进行“欺骗”。具体而言,Cgroup作为进程资源限制的手段,确保容器内的应用不会过度消耗系统资源;而Namespace则实现了进程、网络、挂载点等系统资源的隔离,为容器内的应用创造了一个看似独立的操作系统环境。这种操作系统级别的虚拟化,使得容器在轻量级、启动速度、资源消耗等方面展现出显著优势,逐渐成为市场上的热门选择。

image.png

Cgroup也叫控制组本质上就是一种进程资源的一种限制手段,比如限制进程之能够使用多少的核心跟内存资源。控制组是Linux内核提供的另一种机制,用于限制、记录和隔离进程组所使用的物理资源(如CPU、内存、磁盘I/O等)。通过为容器分配特定的控制组,容器引擎可以限制容器使用的资源量,确保一个容器的资源使用不会影响到宿主机上的其他容器或进程。

命名空间是Linux内核提供的一种机制,用于将系统资源(如进程ID、网络接口、挂载点等)隔离成多个虚拟环境。每个容器都可以有自己的命名空间,从而实现进程、网络、挂载点等的隔离。例如,容器A中的进程ID 1可能对应宿主机上的一个完全不同的进程ID,而容器B中的进程ID 1又对应另一个进程ID。这种隔离使得容器内的应用感觉就像是在一个独立的操作系统上运行(但是实际上是共享操作系统)。

这里的“欺骗”实际上是指容器技术通过命名空间和控制组等机制,对容器内的应用进行隔离和限制,使得应用感觉像是在一个独立的操作系统环境中运行,而实际上它们是在共享同一个宿主机的操作系统内核。这种方式实现了操作系统级别的虚拟化,与传统的虚拟机技术相比,容器技术更加轻量级,启动和运行速度更快,资源消耗也更少,开始备受市场上的青睐。

图例子中呈现的主要nginx容器的内部,发现之后nginx应用所需要的软件包而已,其余的都没有,甚至连基本的系统命名大多数都不集成。

image.png

容器的缺点:

容器自身的实现的机制就决定了容器自身也会存在缺陷以及缺点:

安全性

容器引擎的安全漏洞:容器引擎(如Docker)本身可能存在安全漏洞。CVE(常见漏洞和披露)已经记录了多项与Docker相关的安全漏洞,包括权限提升和信息泄露等。这些漏洞可能会被攻击者利用,对容器内部的应用或宿主机造成威胁。

** 镜像安全**:容器镜像的安全性直接影响到容器的安全性。镜像可能包含基础软件的漏洞、恶意脚本或被篡改的代码。例如,Docker Hub等镜像仓库中的镜像可能由个人开发者上传,质量参差不齐,甚至可能包含恶意漏洞。

** 内核隔离性不足**:尽管Linux内核的Namespace技术提供了进程、网络、挂载点等资源的隔离,但仍有部分关键内容没有被完全隔离。例如,/proc、/sys等目录可能泄露宿主机上的关键信息,让攻击者有机会利用这些信息对宿主机发起攻击。此外,一旦内核的Namespace被突破,攻击者可能直接获得对宿主机的控制权。

隔离性:

** 共享内核:**所有容器共享宿主机的操作系统内核。这意味着容器之间的隔离性依赖于内核的安全性和隔离机制的有效性。如果内核存在漏洞或隔离机制被绕过,容器之间的隔离性将被打破。

** 命名空间的不完全隔离**:如前所述,Linux内核的Namespace技术虽然提供了多种资源的隔离,但仍有部分关键内容未被完全隔离。这限制了容器在隔离性方面的表现。

** 容器逃逸风险**:由于隔离性的不足,攻击者可能利用容器内的漏洞或不当配置实现容器逃逸,即突破容器的隔离边界,对宿主机或其他容器 造成威胁。

资源限制

** 依赖宿主机资源**:容器直接运行在宿主机的操作系统内核上,共享宿主机的CPU、内存、磁盘等资源。因此,容器的资源限制能力依赖于宿主机资源的分配和管理。

** Cgroup的限制**:虽然Cgroup(控制组)机制可以对容器的资源使用进行限制和记录,但这种限制是在操作系统层面实现的,而非硬件层面。这意味着在极端情况下,如果容器消耗过多资源,仍可能对宿主机的性能造成影响。

** 资源竞争**:在宿主机上运行多个容器时,容器之间可能会相互竞争资源。如果没有适当的资源限制和管理策略,可能会导致资源使用不公平或资源耗尽的情况。

image.png

总的来说,容器技术是一种高级的应用打包与部署解决方案,它不仅仅是虚拟化的一种形式,更是应用分发与部署的革命性突破。容器能够将应用程序及其依赖项、必要的系统库文件等所有必要元素封装在一起,形成一个可移植的单元。这意味着,无论是在开发、测试还是生产环境中,只要环境支持容器运行,就可以直接部署并运行该容器,无需进行额外的配置或修改。

传统的应用部署过程复杂且耗时,涉及到虚拟机的申请、操作系统的安装、网络配置、依赖管理、环境变量设置等多个步骤。而容器技术通过预制的容器镜像,简化了这些流程。开发者只需关注应用的开发与测试,将应用及其依赖项打包成容器镜像后,运维人员即可轻松地在任何支持容器的平台上部署运行,极大地提高了部署效率和灵活性。

容器的运行依赖于容器引擎,它是容器技术架构中的核心组件。容器引擎负责管理容器的生命周期,包括创建、运行、停止和删除等操作。类似于虚拟机需要Hypervisor来支持运行,容器也需要容器引擎来提供运行环境和必要的管理功能。在众多容器引擎中,Docker因其易用性、强大的功能和丰富的生态系统而广受欢迎,但市场上也存在其他优秀的容器引擎供选择。

到了这里相比现在对容器有了一个更清晰的了解了吧^_^,如果想学习得更多,可以来我的知识星球学习哈。​​​​​​​

相关文章:

初始Docker

概述: 容器,作为云原生技术的重要组成部分,与虚拟机一样,均属于虚拟化技术的范畴。然而,容器技术以其独特的优势,在虚拟化领域中脱颖而出。与虚拟机不同,容器能够摆脱操作系统的束缚&#xff0…...

Redis-概念、安装、基本配置

文章目录 一、Redis及Redis集群概念、分布式系统概念一-1 Redis是什么一-2 什么是分布式系统、分布式缓存一-3 什么是Redis集群、实现Redis集群的方法有哪些、这些跟Redis的sentinel和cluster有什么关系一-4 Redis的库一-5 Redis中的Key与Value是什么、如何进行操作使用它们添加…...

qt QPlainTextEdit详解

QPlainTextEdit是一个功能强大、易于使用的纯文本编辑器/查看器。它使用与QTextEdit相同的技术和概念,但是为纯文本的处理进行了优化,因此更适合处理大型纯文本文档。QPlainTextEdit不提供富文本编辑功能,如字体、颜色、大小等的格式化&#…...

【机器学习】23. 聚类-GMM: Gaussian Mixture Model

1. 定义和假设 定义:probabilistic clustering(model-base) 假设:数据服从正态分布 2. 算法内容 我们假设数据是由k个高斯(正态)分布混合生成的。每个分布有2个参数:μ和σ。 一个分布对应一…...

深度探索C++对象模型

文章目录 前言一、关于对象C对象模型 二、构造函数实例分析 拷贝构造函数程序转化语意学(Program Transformation Semantics)成员初始化列表 三、数据语义学(The Semantics of Data)数据存取多种继承情况讨论仅单一继承加上虚函数多重继承虚拟继承 Pointer to Data Members 四、…...

电脑怎么设置开机密码:保障个人信息安全的第一步

在数字化时代,个人信息的安全至关重要。电脑作为我们日常工作和生活中不可或缺的设备,存储了大量的私人数据和敏感信息。为了防止未经授权的访问,设置开机密码是保护个人隐私和信息安全的基本措施之一。本文将详细介绍如何在不同操作系统下为…...

MybatisPlus入门(六)MybatisPlus-null值处理

一、MybatisPlus-null值处理 1.1)问题引入: 在查询中遇到如下情况,有部分筛选条件没有值,如商品价格有最大值和最小值,商品价格部分时候没有值。 1.2)解决办法: 步骤一:新建查询实…...

红帽认证有必要考吗?这四大人群推荐考取!

红帽认证(Red Hat Certification)作为全球公认的Linux技能认证,对于某些特定人群来说,考取这一认证无疑是一个明智的选择。本文将探讨红帽认证的必要性,并为四类人群提供考取红帽认证的建议。 1. IT专业人士 对于IT专业人士来说&#xff0…...

基于SSM+微信小程序的社团登录管理系统(社团1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 2、项目技术 3、开发环境 4、功能介绍 1、项目介绍 基于SSM微信小程序的社团登录管理系统实现了管理员及社团、用户。 1、管理员实现了首页、用户管理、社团管理、社团信息管理、社…...

html中cookie如何存储

在HTML中,可以使用JavaScript来创建、读取和删除cookie。以下是创建和读取cookie的基本示例: 创建cookie: function setCookie(name, value, daysToLive) { var cookie name "" encodeURIComponent(value); if (typeof daysToLive …...

C++基础三(构造函数,形参默认值,函数重载,单例模式,析构函数,内联函数,拷贝构造函数)

C有六个默认函数,分别是: 1、默认构造函数; 2、默认拷贝构造函数; 3、默认析构函数; 4、赋值运算符; 5、取址运算符; 6、取址运算符const; 构造函数 构造函数(初始化类成员变量): 1、属于类的成员函数之一 …...

Flutter Color 大调整,需适配迁移,颜色不再是 0-255,而是 0-1.0,支持更大色域

在之前的 3.10 里, Flutter 的 Impeller 在 iOS 上支持了 P3 广色域图像渲染,但是当时也仅仅是当具有广色域图像或渐变时,Impeller 才会在 iOS 上显示 P3 的广色域的颜色,而如果你使用的是 Color API,会发现使用的还是…...

如何使用VBA识别Excel中的“单元格中的图片”(2/2)

Excel 365升级了新功能,支持两种不同的插入图片方式: 放置在单元格中(Place in cell),新功能,此操作插入的图片下文中简称为单元格中的图片。放置在单元格上(Place over cell)&…...

2024系统架构师---下午题目常考概念

1.管道-过滤器的概念:管道-过滤器风格具备高内聚、低耦合、支持软件重用、扩展性好、支持并发等优点,但它有编写复杂、不适合处理交互应用等缺点。 2.隐式调用的概念:隐式调用基于事件触发的思想,具备支持软件重用,改…...

【Linux】从零开始认识五种IO模型 --- 理解五种IO模型,开始使用非阻塞IO

恐惧让你沦为囚犯, 希望让你重获自由。 --- 《肖申克的救赎》--- 五种IO模型与阻塞IO 1 前言2 五种IO模型3 非阻塞IO 1 前言 通过网络通信的学习,我们能够理解网络通信的本质是进程间通信,而进程间通信的本质就是IO。 IO就是input与outp…...

Spring Boot 集成阿里云直播点播

在当今数字化时代,视频直播和点播服务已经成为许多应用的核心功能。阿里云提供了强大的直播和点播服务,能够满足各种规模的应用需求。而 Spring Boot 作为一种流行的 Java 开发框架,能够快速构建高效的应用程序。本文将详细介绍如何在 Spring…...

舍伍德业务安全架构(Sherwood Applied Business Security Architecture, SABSA)

舍伍德业务安全架构(Sherwood Applied Business Security Architecture, SABSA)是一个企业级的安全架构框架,它提供了一个全面的方法来设计和实现信息安全策略。SABSA模型将业务需求与安全控制相结合,确保企业的信息安全措施能够支…...

论可以对抗ai编程的软件开发平台(直接把软件需求描述变成软件的抗ai开发平台)的设计

论可以对抗ai编程的软件开发平台(直接把软件需求描述变成软件的抗ai开发平台)的设计 大家知道,传统的数学密码,都可以被量子计算机破解,但是这些年发展出很多数学密码,量子计算机也破解不了,叫…...

饿了么数据库表设计

有商家表、商品表、商品规格表、购物车表,不难分析出表是不够全面的。 (1)首先分析需要补充的表 1.对于购物车而言肯定有对应的用户,因此要添加一个用户表。 2.商品规格是冷,热,半分糖、全糖,对于冷热和半分糖是可以分…...

Flink处理乱序的数据的最佳实践

目录 网络延迟和分布式系统 事件时间与处理时间的差异 事件时间和水位线(Watermark) 时间窗口(TimeWindow) 滚动窗口(Tumbling Window) 滑动窗口(Sliding Window) 会话窗口(Session Window) 自定义Watermark生成策略 设置允许延迟和侧输出 设置允许的最大延迟时间 使…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...