`
JerryWang_SAP
  • 浏览: 1043661 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Docker和宿主机操作系统文件目录互相隔离的实现原理

阅读更多

我们知道在Docker容器里是无法访问到宿主操作系统的文件目录的,但这种隔离是怎么实现的呢?

其实一点也不神奇——利用了Linux系统的内部命令chroot。

chroot能将进程的根目录设置成任意指定的目录。

 

使用chroot我们能创建一个新的进程,并且以chroot执行时传入的参数作为新进程的根目录。

因为新进程创建之后就无法访问除了新进程创建时传入chroot参数之外的其他文件目录,为了确保这个新进程能够正常工作,我们必须手动拷贝一些文件到新进程的根目录映射的旧目录下。

做一个如下测试:

新建一个文件夹,执行chroot . 意思是把文件夹$HOME/container当作新建进程的根目录。但是没有成功,报错误消息chroot: failed to run command ‘/bin/bash’: No such file or directory

 

执行下面两条命令:

 

执行命令ldd $HOME/container/bin/bash:

该命令为了查看需要有哪些库文件得手动拷贝到文件夹$/HOME/container/bin/bash下面:

 

根据ldd的输出,再次执行下图的八条命令:

 
 

再次执行chroot . , 发现这次成功了:

 

pwd发现是在根目录下,ls也只能发现执行chroot时指定的container目录下的子目录:

 

这就是docker文件目录隔离的实现原理。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

 
0
0
分享到:
评论

相关推荐

    Docker容器访问宿主机网络的方法

    在Docker容器和宿主机之间进行网络通信是容器化技术中经常遇到的问题,尤其是在容器内部应用需要访问宿主机上的网络服务时。本文将详细介绍两种常见的方法来解决Docker容器访问宿主机网络的问题。 首先,我们了解到...

    解决Mac下 docker 无法 ping 通宿主机的问题

    这个问题通常是因为Docker for Mac使用的是一个轻量级的Linux虚拟机,它与macOS之间的通信是通过socket文件实现的,这种机制可能导致网络隔离,从而使得容器无法直接与宿主机进行`ping`操作。为了解决这个问题,我们...

    在docker容器中调用和执行宿主机的docker操作

    通过这种方式,即使群辉系统阻止了对系统目录的直接挂载,我们仍然能够在Docker容器中调用和执行宿主机的Docker操作,实现了Docker-in-Docker的配置。这种方法不仅适用于群辉系统,也可以作为其他有类似限制环境下的...

    Docker原生网络和实现原理.docx

    它使用Go语言编写,直接操作Namespaces、Cgroups和文件系统,提供了跨平台的容器管理能力。Libcontainer抽象了底层实现,使得Docker可以在不同环境中运行,无论是否使用Namespace、Cgroups或其他解决方案,只要实现...

    Docker容器技术-Docker-compose使用案例.pptx

    Docker容器技术是一种轻量级的虚拟化技术,它不是通过模拟硬件来隔离操作系统,而是利用Linux内核的资源隔离特性,如命名空间(Namespaces)和控制组(Cgroups),来实现应用级别的隔离。Docker容器具有启动快速、...

    docker容器入门与实践期末考试总复习.docx

    Docker 容器技术的架构可以分为三层:物理机、宿主机操作系统和 Docker 引擎。Docker 引擎是容器的核心组件,负责容器的创建、管理和销毁。Docker 引擎可以将应用程序打包成一个容器,实现了跨平台分发使用。 在...

    论文研究-基于Docker的容器云平台设计与实现 .pdf

    容器与虚拟机不同,它不依赖于一个完整的操作系统,而是共享宿主机的操作系统内核,从而实现了资源利用的高效和环境部署的快捷。 Docker容器技术相较于传统虚拟化技术如KVM、XEN等具有显著的优势,比如轻量化、高...

    docker容器挂载宿主主机目录的操作方法

    - **性能影响**:直接挂载宿主机目录可能比使用数据卷(`docker volume create`)有一定的性能影响,因为文件系统层的额外跳转可能导致I/O变慢。 - **安全风险**:直接暴露宿主机目录给容器可能会引入安全风险,特别...

    Docker教程合集.pdf

    Docker 不需要模拟整个操作系统,而是直接在宿主机操作系统之上运行,共享内核和公共库,仅进行进程级别的隔离。这意味着 Docker 容器可以更高效地利用硬件资源,并能快速启动和停止。 3. **程序的高可移植性**:...

    基于Java+GitLab+Jenkins与Docker的自动化考试系统后端源码.zip

    推荐使用Linux操作系统并在宿主机安装docker,所有依赖实例除NGINX外都使用docker运行,其中Jenkins实例推荐将宿主机的docker二进制文件和docker unix socket映射至容器中 Docker支持 邮件发送支持 一个GitLab...

    不同操作系统Docker的安装方法.docx

    容器是轻量级的,因为它们共享宿主机的操作系统内核,而不是像虚拟机那样拥有自己的内核。 3. **注册表(Registry)**: - 注册表是用来存储和分发 Docker 镜像的地方。Docker Hub 是最常用的公共注册表,但它也...

    自己整理的docker学习笔记

    这种容器化技术与虚拟化技术不同,容器共享宿主机的操作系统内核,因此更加轻量级和高效。 首先,Docker可以在支持64位操作系统的环境上运行,且需要满足一定的内核版本要求。例如,在CentOS 7操作系统上,我们可以...

    docker1.11.0STATIC部署内容

    在传统的Docker安装过程中,一个常见的挑战是找到与宿主机操作系统内核版本相匹配的Docker版本。这是因为Docker依赖于特定版本的Linux内核特性,比如cgroups和namespaces。如果内核不兼容,可能会导致Docker无法正常...

    基于Docker的在线交互式Python平台的设计与实现.docx

    它利用Docker的容器化技术,为每个用户提供一个独立的Python环境,确保了用户之间的隔离,同时也避免了用户与宿主机之间的资源冲突。这种设计使得用户无需在个人电脑上安装Python或任何相关库,只需通过在线平台即可...

    详解挂载运行的docker容器中如何挂载文件系统

    在Docker环境中,有时我们需要对已经运行的容器进行文件系统的挂载操作,以便与宿主机共享数据或更新应用。本文将详细介绍如何在运行中的Docker容器中挂载文件系统。 首先,了解Docker容器的工作原理,它通过命名...

    Docker 容器入门实战.pptx

    Docker 容器是一种轻量级的操作系统虚拟化技术,可以将应用程序和依赖项打包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。 Docker 简介 Docker 是 dotCloud 开源的一个基于 LXC 的高级容器引擎,源...

    Docker容器 vs 全虚拟化.pdf

    每个Docker容器都共享宿主机的内核,但拥有自己的文件系统、网络配置和进程空间,因此启动快速,资源占用小。由于不涉及对操作系统的虚拟化,Docker容器无需像VM那样运行一个完整的操作系统,这使得它们非常适合用于...

    狂神 Docker学习笔记 超详细从开始到进阶到补充

    2. Docker 容器内的应用直接运行在宿主机的内核,容器是没有自己的内核的,也没有虚拟硬件 3. 每个容器都是相互隔离的,每个容器都有属于自己的文件系统,互不影响 容器化带来的好处: 1. 轻量级 2. 高效 3. 可...

Global site tag (gtag.js) - Google Analytics