Docker 学习路线 2:底层技术
了解驱动Docker的核心技术将让您更深入地了解Docker的工作原理,并有助于您更有效地使用该平台。
Linux容器(LXC)
Linux容器(LXC)是Docker的基础。 LXC是一种轻量级的虚拟化解决方案,允许多个隔离的Linux系统在单个主机上运行,无需全功能的虚拟化。 LXC有效地以安全和优化的方式隔离应用程序及其依赖项。
控制组(cgroups)
控制组(cgroups)是Linux内核的一个功能,允许分配和管理资源,例如CPU、内存和I/O,到一组进程。 Docker利用cgroups来限制容器使用的资源,并确保一个容器不会垄断主机系统的资源。
联合文件系统(UnionFS)
UnionFS是一个文件系统服务,允许在单个、统一的视图中叠加多个文件系统。 Docker使用UnionFS为镜像和容器创建分层方法,这使得共享公共文件和更快的容器创建成为可能。
命名空间
命名空间是另一个Linux内核特性,提供进程隔离。它们允许Docker创建名为容器的隔离工作区。命名空间确保容器内的进程不能干扰容器外或主机系统上的进程。有几种类型的命名空间,如PID、NET、MNT和USER,每个命名空间负责隔离进程的不同方面。
命名空间
命名空间是 Docker 用于提供容器之间隔离的核心技术之一。在本节中,我们将简要讨论命名空间是什么以及它们如何工作。
命名空间是什么?
在 Linux 内核中,命名空间是一种功能,允许隔离各种系统资源,使得进程及其子进程能够看到与其他进程分离的系统子集。命名空间有助于创建抽象层,将容器化的进程与彼此和主机系统分开。
Linux 中有几种类型的命名空间,包括:
- PID (进程 ID):隔离进程 ID 号码空间,这意味着容器内的进程只看到它们自己的进程,而不是主机或其他容器中的进程。
- Network (NET):为每个容器提供网络堆栈的单独视图,包括其自己的网络接口、路由表和防火墙规则。
- Mount (MNT):以这样的方式隔离文件系统挂载点,以便每个容器都有自己的根文件系统,并且挂载的资源仅出现在该容器内。
- UTS (UNIX Time Sharing System):允许每个容器拥有自己的主机名和域名,与其他容器和主机系统分开。
- User (USER):在容器和主机之间映射用户和组标识符,因此可以为容器内的资源设置不同的权限。
- IPC (进程间通信):允许或限制不同容器中的进程之间的通信。
Docker 如何使用命名空间
Docker 使用命名空间为容器创建隔离的环境。当容器启动时,Docker 会为该容器创建一组新的命名空间。这些命名空间仅适用于容器内部,因此在容器内运行的任何进程都可以访问一组与其他容器以及主机系统隔离的系统资源的子集。
通过利用命名空间,Docker 确保容器真正具有可移植性,可以在任何系统上运行,而不会与运行在同一主机上的其他进程或容器发生冲突或干扰。
总之,命名空间提供了一种资源隔离的级别,使得在同一主机上运行具有独立系统资源的多个容器成为可能,而它们之间不会相互干扰。这是 Docker 容器技术的支柱性特征。
cgroups
cgroups或control groups是Linux内核的一个功能,它允许您在运行系统上的进程组之间分配和管理资源,例如CPU、内存、网络带宽和I/O。它在提供资源隔离和限制运行容器可以使用的资源方面发挥着至关重要的作用。
Docker利用cgroups对容器进行资源约束,从而使它们具有一致和可预测的行为。以下是cgroups在Docker容器上下文中的一些关键功能和优点:
资源隔离
cgroups有助于将每个容器限制在特定的资源集上,确保多个容器之间公平共享系统资源。这可以在不同的容器之间实现更好的隔离,以便不良行为的容器不会消耗所有可用资源,从而对其他容器产生负面影响。
限制资源
使用cgroups,您可以设置容器使用的各种系统资源的限制,例如CPU、内存和I/O。这有助于防止单个容器消耗过多的资源,从而对其他容器或主机系统造成性能问题。
优先处理容器
通过分配不同的资源份额,cgroups允许您优先或优先处理某些容器。这在某些容器比其他容器更为关键或在高资源争用情况下非常有用。
监控
cgroups还提供监视单个容器资源使用的机制,这有助于了解容器性能并识别潜在的资源瓶颈。
总的来说,cgroups是Docker的一个重要的基础技术。通过利用cgroups,Docker提供了一个健壮和高效的容器运行时环境,确保容器具有所需的资源,同时保持良好的整体系统性能。
Docker引擎
“Docker Desktop”和“Docker引擎”之间经常存在混淆。 Docker引擎专指Docker桌面组件的一个子集,它是免费且开源的,只能在Linux上安装。
Docker引擎包括:
- Docker命令行界面(CLI)
- Docker守护进程(dockerd),公开Docker应用程序编程接口(API)
Docker引擎可以构建容器镜像,从容器镜像运行容器,并且通常可以执行Docker桌面的大多数操作,但它仅适用于Linux,并且不提供Docker桌面提供的所有开发人员体验。
最后
为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding
,或者扫描下方二维码,关注公众号,即可获取最新文章。
看完如果觉得有帮助,欢迎点赞、收藏和关注
相关文章:

Docker 学习路线 2:底层技术
了解驱动Docker的核心技术将让您更深入地了解Docker的工作原理,并有助于您更有效地使用该平台。 Linux容器(LXC) Linux容器(LXC)是Docker的基础。 LXC是一种轻量级的虚拟化解决方案,允许多个隔离的Linux系…...
UEFI实战——显示图片
一、准备工作 1.1 BMP格式图片 参考:BMP格式详解获取“BMP格式详解”文档里的图片,命名为Logo.bmp将Logo.bmp图片放到U盘里,U盘格式FAT32二、实例代码 2.1 代码结构 TextPkg/ ├── Display.c ├── GetFile.c ├── Test.c ├── Test.dsc ├── Test.h └── Tes…...

Ansible中的playbook
目录 一、playbook简介 二、playbook的语法 三、playbook的核心组件 四、playbook的执行命令 五、vim 设定技巧 六、基本示例 一、playbook简介 1、playbook与ad-hoc相比,是一种完全不同的运用。 2、playbook是一种简单的配置管理系统与多机器部署系统的基础…...

怎样去除视频中的杂音,保留人声部分?
怎样去除视频中的杂音,保留人声部分?这个简单嘛!两种办法可以搞定:一是进行音频降噪,把无用的杂音消除掉;二是提取人声,将要保留的人声片段提取出来。 这就将两种实用的办公都分享出来…...

基于Qt QTreeView|QTreeWidget控件使用简单版
头文件解析: 这是一个C++代码文件,定义了一个名为MainWindow的类。以下是对每一句的详细解释: ```cpp #ifndef MAINWINDOW_H #define MAINWINDOW_H ``` 这是一个条件编译指令,用于避免头文件的重复包含。`MAINWINDOW_H`是一个宏定义,用于唯一标识这个头文件。 ```cpp #…...

edge浏览器的隐藏功能
1. edge://version 查看版本信息 2. edge://flags 特性界面 具体到某一特性:edge://flags/#overlay-scrollbars 3. edge://settings设置界面 详情可参考chrome: 4. edge://extensions 扩展程序页面 5. edge://net-internals 网络事件信息 6. edge://component…...

安卓抓包之小黄鸟
下载安装 下载地址: https://download.csdn.net/download/yijianxiangde100/88496463 安装apk 即可。 证书配置:...

Django中的FBV和CBV
一、两者的区别 1、在我们日常学习Django中,都是用的FBV(function base views)方式,就是在视图中用函数处理各种请求。而CBV(class base view)则是通过类来处理请求。 2、Python是一个面向对象的编程语言…...

信息泄露--
大唐电信AC简介 大唐电信科技股份有限公司是电信科学技术研究院(大唐电信科技产业集团)控股的的高科技企业,大唐电信已形成集成电路设计、软件与应用、终端设计、移动互联网四大产业板块。 大唐电信AC集中管理平台存在弱口令及敏感信息泄漏漏…...
C#WPF文本格式化模式实例
本文演示C#WPF文本格式化模式实例 WPF 文本渲染优缺点 WPF中的文本渲染和旧式的基于 GDI的应用程序的文本染有很大区别。很大一部分区 别是由于 WPF 的设备无关显示系统造成的,但 WPF 中的文本染也得到了显著增强,能更清晰地显示文本,在 LCD 监视器上尤其如此。 然而,W…...
嵌入式云平台一些基础概念的理解
1.SDK SDK是Software Development Kit的缩写,译为”软件开发工具包”,通常是为辅助开发某类软件而编写的特定软件包,框架集合等,SDK一般包含相关文档,范例和工具。 我自己的理解就似乎,SDK也就是软件开发工具包,他会为其使用者提供一些封装好的接口&…...

【项目管理】生命周期风险评估
规划阶段目标:识别系统的业务战略,以支撑系统的安全需求及安全战略 规划阶段评估重点:1、本阶段不需要识别资产和脆弱性;2、应根据被评估对象的应用对象、应用环境、业务状况、操作要求等方面识别威胁; 设计阶段目标…...

力扣 搜索旋转排序数组 二分
👨🏫 33. 搜索旋转排序数组 class Solution {public int search(int[] nums, int target){int l 0;int r nums.length - 1;while (l < r){int m l r >> 1;//else大法,把无序段抛给else,if只处理有序段 // 需要特…...

【软件测试】个人博客项目测试报告
目录 1.报告概要 2、测试环境 3、手动测试用例编写 4、自动化测试用例 1.报告概要 测试对象:基于SSM项目的博客系统。 测试目的:检测博客项目是否符合预期,并且对测试知识进行练习和巩固。 测试点:主要针对常用的功能进行测…...

Express框架开发接口之今日推荐等模块
1.初始化 const handleDB require(../handleDB/index) // 获取全部模块 exports.allModule (req, res) > {(async function () {})() } // 更新或者添加模块 exports.upModule (req, res) > {(async function () {})() } // 根据id删除模块 exports.delModule (req, …...

UTONMOS:元宇宙顺势而上,重构数字化发展新形态
元宇宙(Metaverse)是一个虚拟的、且与现实世界平行的虚拟世界,由一系列相互关联的技术组成。在这个虚拟世界中,人们可以通过 VR、 AR等设备进入其中,与虚拟人物进行互动。 随着新一代信息技术的飞速发展,元…...

【Nginx37】Nginx学习:SSL模块(一)简单配置与指令介绍
Nginx学习:SSL模块(一)简单配置与指令介绍 又是一个重点模块,SSL 模块,其实就是我们常见的 HTTPS 所需要的配置模块。HTTPS 的重要性不用多说了吧,现在所有的 App、小程序 都强制要求是 HTTPS 的࿰…...
CompletableFuture 异步调用,获取返回值
ExecutorService executor new ThreadPoolExecutor(8, 16, 60,TimeUnit.MINUTES,new ArrayBlockingQueue<>(100));Random randomnew Random(10);//模拟查询用户列表List<User> listselectUsers();//需要执行的任务列表// 任务列表List<CompletableFuture<Us…...

excel利用正则匹配和替换指定内容
上班中, 突然接到电话, 屋里的上司大人发来个excel, 说要替换里面x-x-xxx列的内容为x栋x单元xxx. 大致表格如下, 原表格我就不发了 身为程序猿的我, 肯定第一就想到了 正则! 打开excel-开始-查找和替换, 我擦, 只能完全匹配和替换 比如一次只能替换1-1- -> 为1栋1单元 1-2…...

IPv4首部格式
IPv4首部格式 IPv4数据报的首部格式及其内容是实现IPv4协议各种功能的基础。 在TCPIP标准中,各种数据格式常常以32比特(即4字节)为单位来描述。 IPv4首部格式图 ## IPv4数据报的组成 主要由固定部分(20字节)可变部分(最大40字节) - 固定部分是指每个IPv4数据报都必…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
【Java】Ajax 技术详解
文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...
uniapp获取当前位置和经纬度信息
1.1. 获取当前位置和经纬度信息(需要配置高的SDK) 调用uni-app官方API中的uni.chooseLocation(),即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...
初级程序员入门指南
初级程序员入门指南 在数字化浪潮中,编程已然成为极具价值的技能。对于渴望踏入程序员行列的新手而言,明晰入门路径与必备知识是开启征程的关键。本文将为初级程序员提供全面的入门指引。 一、明确学习方向 (一)编程语言抉择 编…...

生产管理系统开发:专业软件开发公司的实践与思考
生产管理系统开发的关键点 在当前制造业智能化升级的转型背景下,生产管理系统开发正逐步成为企业优化生产流程的重要技术手段。不同行业、不同规模的企业在推进生产管理数字化转型过程中,面临的挑战存在显著差异。本文结合具体实践案例,分析…...