Linux 利用命名空间创建一个自己的"容器"
前置条件
- 创建一个目录存放容器
mkdir /myapp
- 准备静态编译busybox,操作系统自带的往往是依赖动态库的(本文使用的debian
apt install busybox-static
)
开始
- 使用unshare起一个独立命名空间.
# 进入后/myapp目录在新命名空间内是不存在的 unshare --mount-proc=/myapp -n -p -u -f /usr/bin/zsh # 挂载/myapp目录,挂载成功后,myapp目录是一个空目 #和宿主机的myapp目录完全独立 mount -t tmpfs tmpfs /myapp
- 初始化根目录到/myapp目录中(mount-proc=/myapp后,/myapp目录实现了隔离,但宿主机其它目录还是可以在命名空间内正常访问,还没有实现完全隔离)
# 拷贝宿主机的busybox拷到/myapp目录中 mkdir /myapp/bin && cp /usr/bin/busybox /myapp/bin/ # /bin/busybox这个地址是基于/myapp作为/根目录地址得来的, #执行过后你当前命名空间就无法访问/myapp以外的宿主机目录了 chroot /myapp /bin/busybox sh
效果展示
进来过后是很纯粹的linux,哈哈哈哈。你需要什么资源在chroot之前考到/myapp
目录下都可,如果你不想隔离某个命名空间,列入你不想隔离网络,不想隔离pid,在unshare的时候都可以不加对应参数,具体参数意义可以使用unshare --help
查看