初始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因其易用性、强大的功能和丰富的生态系统而广受欢迎,但市场上也存在其他优秀的容器引擎供选择。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TikTok如何用邮箱注册?用哪种邮箱比较好?

要在TikTok上创建一个账号,首先需要进行注册,这是一个简单但至关重要的步骤。在本篇文章中,我们将详细介绍如何用邮箱注册TikTok的整个过程,包括每个步骤的细节和注意事项。此外,我们还将讨论选择哪种邮箱比较好&#…

输电线路绝缘子缺陷分割系统:轻松训练模式

输电线路绝缘子缺陷分割系统源码&数据集分享 [yolov8-seg&yolov8-seg-C2f-MSBlock等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al …

flink 自定义kudu connector中使用Metrics计数平均吞吐量,并推送到自定义kafkaReporter

文章目录 前言1. Registering metrics2. Metrics 的类型2.1 counter2.2 Gauge2.3 Histogram2.4 meter 3. 指标划分3.1 指标所属的范围3.2 默认所属 4. 自定义kudu connector中使用Metrics4.1 sink算子继承RichFunction4.2 注册指标4.3 计数逻辑4.4 自定义Reporter,推…

Calling short variants with GATK4

计算生物学实验5: Calling short variants with GATK4 1. 实验目的 本实验目的是利用 GATK4 工具准确高效地检测出基因组中的短变异。通过该工具对样本基因组进行分析,旨在发现单核苷酸变异(SNV)和小的插入缺失(Indel&#xff0…

【D3.js in Action 3 精译_038】4.2 D3 折线图的绘制方法及曲线插值处理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…

《机器学习by周志华》学习笔记-神经网络-04全局最小误差与局部极小误差

1、神经网络中误差的概念及公式 根据上文《逆误差传播算法》我们可以知道误差公式的演化: ① 第k个训练样例的误差函数: ②该训练集的累积误差函数: ③正则化误差目标函数: 其中: :表示第k个训练样例的误差;:表示连接权重和阈值任意参数;根据上文我们可知需要确定的参…

每日读则推(十四)——Meta Movie Gen: the most advanced media foundation models to-date

premiere n.首映,首次公演 v.首次公演(戏剧、音乐、电影) a.首要的,最早的 Today we’re premiering Meta Movie Gen: the most advanced media foundation models to-date. 迄今,到现在为止 …

大模型面试题全面总结:每一道都是硬核挑战

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂同学、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 今天分享…

c++文件操作中的seekp函数使用方法

seekp函数能设置输出流的位置 比如我先向文件输入了123456&#xff0c;现在我想在第四个字符后面再加上ABC&#xff0c;这个时候我们就可以用seekp函数来设置输出的位置 #include <iostream> #include <fstream> #include <string>using namespace std;int …

Python小白学习教程从入门到入坑------第二十三课 封装(语法进阶)

面向对象的三大特征&#xff1a;封装、继承、多态 一、封装 1.1 何为封装 封装&#xff1a;在Python中指的是隐藏对象中一些不希望被外部所访问到的属性或者方法。将复杂的信息、流程给包起来&#xff0c;内部处理&#xff0c;让使用者只需要通过简单的操作步骤&#xff0c;…

less解决function中return写法在浏览器被识别成Object导致样式失败的问题

问题描述&#xff1a; 一开始写的是: baseFontSize: 37.5px;//基于屏幕尺寸/10得出的基准font-size// return失败,浏览器显示为[object Object],[object Object] .pxToRem(px){value: px / baseFontSize * 1rem;return value; } 使用height: .pxToRem(40px);之后浏览器却是这…

OpenCV视觉分析之目标跟踪(4)目标跟踪类TrackerDaSiamRPN的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::TrackerDaSiamRPN 是 OpenCV 中用于目标跟踪的一个类&#xff0c;它实现了 DaSiam RPN&#xff08;Deformable Siamese Region Proposal Net…

高效视频制作大提速,视频剪辑软件的高级自定义命令功能批量调整视频的色调、饱和度和亮度,轻松驾驭视频编辑技巧

在浩瀚的数字海洋中&#xff0c;视频如同璀璨的星辰&#xff0c;而每一颗星辰都渴望被精心雕琢&#xff0c;闪耀出最独特的光芒。想象一下&#xff0c;你手握一把神奇的钥匙&#xff0c;能够轻松解锁批量视频剪辑的奥秘&#xff0c;让每一帧画面都跃动着你的创意与激情。这把钥…

Vue3入门--[vue/compiler-sfc] Unexpected token, expected “,“ (18:0)

新手小白学习Vue–入门就踩坑系列 问题描述 创建了一个Person.vue&#xff0c;保存后直接报错&#xff1a; [plugin:vite:vue] [vue/compiler-sfc] Unexpected token, expected "," (18:0) 在网上搜了半天也没找到原因&#xff0c;最后还得靠自己&#xff0c;现将解…

【制造业&盒子】箱子检测系统源码&数据集全套:改进yolo11-swintransformer

改进yolo11-MLCA等200全套创新点大全&#xff1a;箱子检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.01 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者视频可能为…

Spring Security 框架篇-深入了解 Spring Security 的认证功能流程和自定义实现登录接口(实现自定义认证过滤器、登出功能)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Spring Security 框架概述 2.0 Spring Security 核心功能-认证功能 2.1 过滤器链 2.2 登录认证流程 2.3 思路分析 3.0 登录认证具体操作 3.1 环境搭建 3.2 实现 U…

HBuilderx修改主题色-改变编辑器背景颜色等

效果图&#xff1a; 第一步我们打开HBuilderX 选择工具 – 主题 – 选择&#xff08;雅蓝&#xff09; 然后再设置&#xff0c;源码视图里面打开Setting.json文件 3.将一下代码赋值到右侧用户设置即可 {"workbench.colorCustomizations": {// "[Defau…

食堂采购系统源码:实现供应链管理平台功能模块的技术实践

在当前数字化转型浪潮中&#xff0c;餐饮和食堂管理的需求越来越高&#xff0c;食堂采购系统逐渐成为企业和组织优化管理、降低成本的关键工具。 一、食堂采购系统的核心功能概述 一个完善的食堂采购系统不仅需要具备传统的订单管理、库存管理、供应商管理功能&#xff0c;还…

Python 工具库每日推荐 【Sphinx】

文章目录 引言文档工具的重要性今日推荐:Sphinx 文档生成工具主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:为 Python 项目生成 API 文档案例分析高级特性自定义主题国际化支持扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript …

stm32不小心把SWD和JTAG都给关了,程序下载不进去,怎么办?

因为想用STM32F103的PA15引脚&#xff0c;调试程序的时候不小心把SWD和JTAD接口都给关了&#xff0c;先看下罪魁祸首 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关掉JTAG&#xff0c;不关SWGPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//关掉SW&am…