容器技术之Chroot&Docker

2023-10-27

chroot

容器技术从1979年chroot的首次问世便已崭露头角。

维基百科对chroot的定义如下:

是在 Unix 和 Linux 系统的一个操作,针对正在运行的软件进程和它的子进程,改变它外显的根目录。一个运行在这个环境下,经由 chroot 设置根目录的程序,它不能够对这个指定根目录之外的文件进行访问动作,不能读取,也不能更改它的内容。

通俗地说 ,chroot 就是可以改变某进程的根目录,使这个程序不能访问目录之外的其他目录,这个跟我们在一个容器中是很相似的。下面我们通过一个实例来演示下 chroot。

 

chroot实例说明:

1)、mkdir rootfs 

#在当前目录下创建一个名称为:rootfs 的目录

2)、cd rootfs 

#进入目录名称为:rootfs 目录下

3)、docker export $(docker create docker101tutorial) -o docker101tutorial.tar
#将容器名为:docker101tutorial的文件系统作为一个docker101tutorial.tar归档文件导出到docker101tutorial.tar中并保存

#也可以简单理解为在rootfs下创建了一些目录和放置了一些二进制文件

4)、tar -xf docker101tutorial.tar

#解压docker101tutorial.tar文件内容

5)、ls 

#查看当前 rootfs 目录下的文件内容

6)、chroot /Users/xiaoqin.wu/rootfs /bin/sh

#启动一个sh 进程,并且把 /Users/xiaoqin.wu/rootfs 作为sh 进程的根目录

图片

图片

对比上图中命令5:ls查看/Users/xiaoqin.wu/rootfs目录下文件内容的结果与在sh进程中使用命令7:ls查看当前进程的结果是一致,至此,说明使用chroot实现了当前进程与主机的隔离,一个目录隔离的容器就完成了,但是还不能称之为一个容器。

原因如下:
使用命令8:netstat -nr查看路由信息

图片

由结果发现,网络信息并未隔离,实际上进程等信息此时也并未隔离,要想实现一个完整的容器,需要Linux的其他三项技术来实现,分别是:

  • Namespace

  • Cgroup

  • 联合文件系统

 

Docker

2013年,Docker的横空出世使得容器技术迅速发展

Docker是利用Linux的Namespace、Cgroup、联合文件系统三大机制来保证实现的。

原理如下:

Namespace:

是 Linux 内核的一项功能,该功能对内核资源进行隔离,使得容器中的进程都可以在单独的命名空间中运行,并且只可以访问当前容器命名空间的资源。

Namespace 可以隔离进程 ID、主机名、用户 ID、文件名、网络访问和进程间通信等相关资源。

Docker 主要用到以下五种命名空间。

图片

pid namespace:用于隔离进程 ID。

net namespace:隔离网络接口,在虚拟的 net namespace 内用户可以拥有自己独立的 IP、路由、端口等。

mnt namespace:文件系统挂载点隔离。

ipc namespace:信号量,消息队列和共享内存的隔离。

uts namespace:主机名和域名的隔离。

 

Cgroups:

是一种 Linux 内核功能,可以限制和隔离进程的资源使用情况(CPU、内存、磁盘 I/O、网络等)。在容器的实现中,Cgroups 通常用来限制容器的 CPU 和内存等资源的使用。

 

联合文件系统:

用于镜像构建和容器运行环境。

联合文件系统,又叫 UnionFS,是一种通过创建文件层进程操作的文件系统,因此,联合文件系统非常轻快。Docker 使用联合文件系统为容器提供构建层,使得容器可以实现写时复制以及镜像的分层构建和存储。常用的联合文件系统有 AUFS、Overlay 和 Devicemapper 等。

从1973年chroot的出现至2013年,因为Docker加入了镜像功能,并且封装了镜像仓库使得镜像分发更加方便。因此在2013年Docker最终爆发,成为容器技术的代表。

欢迎关注【无量测试之道】公众号,回复【领取资源】,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、

资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

 添加关注,让我们一起共同成长!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

容器技术之Chroot&Docker 的相关文章

  • t检验.医学统计实例详解

    t检验是医学统计学中常用的一种假设检验方法 用于比较两个样本均值是否有显著差异 它可以帮助医学研究者确定一个治疗方法或药物是否显著地改善了患者的症状或生理指标 在医学研究中 t检验常被用来 比较两个独立样本的均值 例如 比较一个治疗组和一个
  • proto 编译命令

    proto 编译命令 protoc I python out src test test proto
  • 深入理解Linux网络技术内幕——网络设备初始化

    概述 内核的初始化过程过程中 与网络相关的工作如下所示 内核引导时执行 start kernel start kernel结束之前会调用rest init rest init初始化 内核线程init 在Linux3 12中为kernel i
  • C语言第四章第2节用if语句实现选择结构学习导案

    课 题 4 2 用if语句实现选择结构 课时安排 2课时 课 型 新授 学 习目标 掌握if语句 if else语句 if else if else语句的一般形式 掌握if语句 if else语句 if else if else语句的执行过
  • 微信小程序云开发源码(垃圾分类源码)

    目录 微信小程序云开发源码 垃圾分类源码 小程序云数据库介绍 小程序界面 可搜索名称 大众垃圾分类 小程序体验 微信小程序源码 源码地址 https pan baidu com s 1U19Suzs3nZnMt5OHNGUahQ 提取码 z
  • Mysql表关系 连接查询

    表关联查询 文章目录 表关联查询 内连接 左连接 右连接 如果多个表存在一定关联关系 可以多表在一起进行查询操作 其实表的关联整理与外键约束之间并没有必然联系 但是基于外键约束设计的具有关联性的表往往会更多使用关联查询查找数据 简单多表查询
  • C++ default constructor 讨论

    豆瓣是个好地方 可以找到很多好书 最近翻到了Lippman的inside the c object model 今天看了关于默然构造函数部分 对这个东西有了新的理解 又找出c standard对照着看了看 首先看c standard 12
  • webview加载完成监听

    最近由于产品需要 一个页面上部分是一个WebView 下面是一些文字介绍 但是在赋值时 HTML网页加载会消耗一定时间 在其加载过程中 文字已经展示出来 给用户的体验很不好 所以我就想在webview加载成功结束后再给文字赋值 于是在网上搜
  • 云服务器Docker安装ElasticSearch却启动不了怎么办?

    下载镜像 docker pull elasticsearch 启动容器 docker run d name es p 9200 9200 p 9300 9300 e discovery type single node elasticsea
  • 用WinDbg断点调试FFmpeg

    本文主要讲解 WinDbg 调试器的使用 WinDbg 在 Windows 里面的地位 就跟 GDB 在 Linux 的地位一样 可以通过 微软的官方网站 下载 安装 WinDbg WinDbg 是比较轻量级的调试工具 在一些场景下比较实用
  • 联想服务器esxi虚拟化,企业服务器管理必备——VMware ESXI虚拟化服务器搭建

    现在企业虚拟化服务器使用越来越多 这是一篇VMware虚拟化服务器搭建教程 让我们开始吧 制作U盘安装ESXI镜像 1 使用Linux系统制作U盘启动镜像 UltraISO制作的镜像不能用 必须依赖Linux系统 安装镜像制作工具 yum
  • Hadoop3.x 之 MapReduce 框架原理(月薪过万 第九章下)

    Hadoop3 x 之 MapReduce 框架原理 一 MapTask工作机制 二 ReduceTask 工作机制 三 ReduceTask 并行度决定机制 四 MapTask 源码解析流程 五 ReduceTask 源码解析流程 六 R
  • c++在多个源文件中定义同一个类

    在自己写代码练习时 创建好多个源文件 然后有些文件又定义了相同的类 比如源文件1 class B public B B 源文件2 class B public B new A B 然后在运行源文件2的时候一直都没有进入到构造函数里面去 最后
  • matlab函数之reshape()

    reshape 重构数组 功能 B reshape A sz 按矢量sz定义的维度 包括行数 列数 维数 重构矩阵A来得到矩阵B 实现原理 先将矩阵A先排列成一列 结果感受就是按列优先排列 再按照矢量sz定义大小的行数切割 结构及实例 A

随机推荐

  • 区间图着色问题

    这是算法导论贪心算法一章的一个习题 题目描述 假定有一组活动 我们需要将它们安排到一些教室 任意活动都可以在任意教室进行 我们希望使用最少的教室完成所有的活动 设计一个高效的贪心算法求每个活动应该在哪个教室进行 这个问题称为区间图着色问题
  • 在Linux应用程序中打印函数调用栈

    在Linux中打印函数调用栈 要求 在Linux系统的应用程序中写一个函数print stackframe 用于获取当前位置的函数调用栈信息 方法 execinfo h库下的函数backtrace可以得到当前线程的函数调用栈指针和调用栈深度
  • ODOO15固定资产管理系统解决方案(原创)

    有些公司固定资产众多 而且涉及到在建工程的费用归集及在建工程结转固定资产等复杂情况 使用ODOO系统如何来解决这个客户需要解决的问题呢 我们根据自身的实施经验 分享ODOO固定资产的管理解决方案 1 资产分类设置 资产众多 需要进行类别设置
  • 谷歌云GCP

    感谢公司赞助了Google Cloud Platform GCP Coursera课程 https www coursera org 包括云基础设施 应用开发 数据湖和数据仓库相关知识 其中谷歌云的实验操作平台是 https www qwi
  • 数据库系统丨关系代数运算总结

    文章目录 1 需要记忆的符号 2 集合运算 1 并运算 2 差运算 3 交运算 4 广义笛卡尔积 3 关系运算 1 选择 Selection 2 投影 Projection 3 连接 Join 4 除 Division 1 需要记忆的符号
  • VOT 数据集 groundtruth 8个维度 转成 4个维度的方法

    VOT数据集由于加入了带旋转角度的boundingbox 使得其groundtruth的维度达到了8个 如下 8个维度就代表boundingbox的4个点 比如VOT16中 bag数据序列的groundtruth第一行 334 02 128
  • Casual inference 综述框架

    A survey on causal inference 因果推理综述 A Survey on Causal Inference 一文的总结和梳理 因果推断理论解读 Rubin因果模型的三个假设 基础理论 理论框架 名词解释 individ
  • 如何使用IDEA正确的创建一个Web项目

    我是学习java的新人休元 第一次使用CSDN写博客请大家多多关照 写的第一篇博客就是如何使用IDEA正确的创建一个Web项目 刚刚使用IDEA不到两个星期 有很多地方不熟练 如果有错误请大家指出来 操作系统 win10 编译环境 IDEA
  • 2023年第1季社区Task挑战赛开启,等你来战!

    社区Task挑战赛是面向社区开发者开展的代码或教程征集活动 该挑战赛为社区中热爱FISCO BCOS及周边组件的开发者提供了探索区块链技术 挑战技术难题的舞台 该挑战赛去年在社区成功举办了3季 共吸引了数百名开发者报名 前3季都有哪些有趣的
  • 从源码看 AlertDialog.getButton(DialogInterface.BUTTON_POSITIVE) 为什么是 null

    我们在使用 AlertDialog 的时候 如果想改变 POSITIVE BUTTON 或者 NEGATIVE BUTTON 的字体颜色 大小时 可能会注意到 AlertDialog getButton DialogInterface BU
  • 长城网络靶场第三题

    关卡描述 1 oa服务器的内网ip是多少 先进行ip统计 开始逐渐查看前面几个ip 基本上都是b s 所以大概率是http 过滤一下ip 第一个ip好像和oa没啥关系 第二个ip一点开就是 oa 应该就是他了 关卡描述 2 黑客的攻击ip是
  • w7系统如何关闭高级文字服务器,Win7系统怎么取消切换大小写时出现提示?

    Win7系统用户在工作中使用键盘切换大小写输入时 总会弹跳出系统的提示窗口 很多用户觉得非常烦 那么Win7系统应该怎么取消切换大小写时出现的提示呢 接下来下面请看Win7系统切换大小写时出现的提示的具体解决方法 解决方法 1 首先 在桌面
  • 在Vue中获取DOM元素的实际宽高

    最近使用 D3 js 开发可视化图表 因为移动端做了 rem 适配 所以需要动态计算获取图表容器的宽高 其中涉及到一些原生DOM API的使用 避免遗忘这里总结一下 一 获取元素 在 Vue 中可以使用 ref 来获取一个真实的 DOM 元
  • 电商峰值系统架构设计--转载

    1 1 系统架构设计目录 摘要 双11来临之际 程序员 以 电商峰值系统架构设计 为主题 力邀京东 当当 小米 1号店 海尔商城 唯品会 蘑菇街 麦包包等电商企业 及商派 基调网络等服务公司 分享电商峰值系统架构设计的最佳技术实践 自200
  • SSH_Unable to negotiate with ... port ..: nomatching host host key type found. Their offer:ssh-rsa

    终端远程登录ssh时 提示如下错误 Unable to negotiate with 192 168 1 228 port 22 nomatching host host key type found Their offer ssh rsa
  • 常见的损失函数(loss function)总结

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 导读 本文总结了常见的八种损失函数的优缺点 包括 0 1损失函数 绝对值损失函数 log对数损失函数 平方损失函数 指数损失函数 Hinge 损失函数 感知损失函数 交叉
  • 解答:pytorch 通过索引赋值后 梯度还能正常反向传播吗

    先上测试代码 if name main scene graph token tensor1 torch rand 4 4 tensor1 requires grad True tensor2 torch rand 4 tensor2 req
  • labelme标注不同物体显示不同颜色以及批量转换

    最近在使用labelme标注数据时遇到一些问题 如上图中 蓝色分别为crack person dog三类 正常应该是3种不同颜色 解决方案 1 labelme版本 2 下载labelme后进行文件修改 由于博主想要的是rgb三通道的彩色图
  • pytorch量化库使用(1)

    量化简介 量化是指以低于浮点精度的位宽执行计算和存储张量的技术 量化模型以降低的精度而不是全精度 浮点 值对张量执行部分或全部运算 这允许更紧凑的模型表示以及在许多硬件平台上使用高性能矢量化操作 与典型的 FP32 模型相比 PyTorch
  • 容器技术之Chroot&Docker

    chroot 容器技术从1979年chroot的首次问世便已崭露头角 维基百科对chroot的定义如下 是在 Unix 和 Linux 系统的一个操作 针对正在运行的软件进程和它的子进程 改变它外显的根目录 一个运行在这个环境下 经由 ch