`
JerryWang_SAP
  • 浏览: 963040 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    Docker:容器化革命的引领者.pdf

    Docker容器与宿主机共享操作系统内核,但拥有独立的文件系统、网络接口和资源限制,这样既保证了容器的隔离性,又提高了资源利用率。 Docker的核心组件包括: Docker守护进程(Daemon):负责管理容器的生命周期。...

    某位不知名大佬写的部署Docker并安装vulhub的详细图文教程

    Docker是一种操作系统级别的虚拟化技术,它以一种特殊进程的方式运行于宿主机上,它依赖于Linux内核特性:namespace(名字空间进行资源的隔离)和cgroups(限制、记录任务组所使用的物理资源),它也可以对应用程序...

    轻量级Linux虚拟化实现dockerlite.zip

    所谓轻量级虚拟化,也指代操作系统级别的虚拟化,通过内核和用户态进程组的支持,实现的独立网络 IP、进程树等类似虚拟机的隔离运行环境,但是和宿主机运行同样的内核。dockerlite 和另一款用 Go 语言实现的 docker...

    docker 基础

    • 轻量级资源使用:容器在进程级别隔离并使用宿主机的内核,而不需要虚拟化整个操作系统。 • 可移植性:一个容器应用所需要的依赖都在容器中,这就让它可以在任意一台Docker主机上运行。 • 可预测性:宿主机不...

    Docker详细介绍、安装及命令使用(值得珍藏)

    1、Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。 2、Docker使用Linux内核的Cgroups、...

    moocoder-backend:基于GitLab、Jenkins与Docker的自动化考试系统后端部分

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

    .NETCore Docker实现容器化与私有镜像仓库管理

    Docker是用Go语言编写基于Linux操作系统的一些特性开发的,其提供了操作系统级别的抽象,是一种容器管理技术,它隔离了应用程序对基础架构(操作系统等)的依赖。相较于虚拟机而言,Docker共享的是宿主机的硬件资源...

    Docker基础知识之Linux namespace图文详解

    Docker 和虚拟机技术一样,从操作系统级上实现了资源的隔离,它本质上是宿主机上的进程(容器进程),所以资源隔离主要就是指进程资源的隔离。实现资源隔离的核心技术就是 Linux namespace。这技术和很多语言的命名...

    详解如何在 Docker 中设置 Go 并部署应用

    嗨,在本教程中,我们将学习如何使用 docker 部署 golang web 应用...另一方面,像 VMware 这样的基于 hypervisor 的虚拟化操作系统容器提供了高级别的隔离和安全性,这是由于客户机和主机之间的通信是通过 hypervisor

    Docker的核心及安装的具体使用

    一.Docker是什么?...传统虚拟机需要有额外的虚拟机管理程序和虛拟机操作系统层,而Docker容器是直接在操作系统层面之上实现的虚拟化, 如图: (3)Docker的使用场景 现在开发者需要能方便地创建运行在

Global site tag (gtag.js) - Google Analytics