暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

自己动手实现一个"容器"

DevHome 2021-12-07
849
自己动手实现一个极简“容器”
docker容器化如火如荼,那让我们自己动手实现一个容器吧,这个容器就只能实现最简单的 ls 命令,作用就是列出当前文件夹的内容的功能,但是要与宿主机的环境隔离开 ,实现程序运行的独立性与隔离性!这也正是容器化的本质之所在。
实验的目录(cd /root/jail):其中ldd 命令可以列出程序所依赖的软件库
ldd - print shared library dependencies
cd /root/jail 工作目录 
复制
1、将bash脚本解析器copy进我们的容器  拷贝bash、ls二进制执行程序
cp  -v /bin/{bash,ls} ./jail/bin
复制
2、拷贝程序的依赖库
 拷贝命令(脚本)执行器bash的依赖库
 ldd   /bin/bash
复制
cp -/lib64/libtinfo.so.5  /lib64/libdl.so.2  /lib64/libc.so.6   /lib64/ld-linux-x86-64.so.2 ./jail/lib64 
复制
 3、拷贝ls的依赖库
ldd  /bin/ls
复制
cp
复制
-v /lib64/libselinux.so.1 /lib64/libcap.so.2 
复制
/lib64/libacl.so.1 
复制
/lib64/libc.so.6  
复制
/lib64/libpcre.so.1 
复制
/lib64/libdl.so.2 /lib64/ld-linux-x86-64.so.2 /lib64/libattr.so.1
复制
/lib64/libpthread.so.0     ./jail/lib64
复制
 4、进入“容器”

 chroot   /root/jail   /bin/bash
复制
chroot 可以改变命令执行的根目录,从而实现“隔离”。
然后你就可以进入容器发现执行ls命令就是刚才copy进去的文件,已经和宿主机的文件系统隔离开,在这个“容器内”执行的命令看不到外面的世界!如下:
实际上docker容器的隔离远比这要复杂的多,是基于Linux 底层 namespace技术来实现的,这块后续将会再详细介绍,敬请关注!
文章转载自DevHome,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论