这篇文章上次修改于 2400 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 Docker容器由于Linux内核namespace本身还不够完善的现状(例如,没有cgroup namespace,user namespace也是在kernel高版本才开始支持, /dev设备不隔离等),因此docker容器在隔离性方面也存在一些缺陷。例如,在容器内部proc文件系统中可以看到Host宿主机上的proc信息(如:meminfo, cpuinfo,stat, uptime等)。开源项目LXCFS,尝试通过用户态文件系统实现docker容器内的虚拟proc文件系统,增强docker容器的隔离性,减少给用户带来的不便。 ### LXCFS介绍 LXCFS是一个开源的FUSE用户态文件系统,起初是为了更好的在Ubuntu上使用LXC容器而设计开发。LXCFS基于C语言开发,代码托管在github上,目前较多使用在LXC容器中。主要由Ubuntu的工程师提供维护和开发。 #####LXCFS主要提供两个基本功能点: a cgroupfs compatible view for unprivileged containers a set of cgroup-aware files: ``` ├── cgroup │ ├── blkio │ ├── cpu,cpuacct │ ├── cpuset │ ├── devices │ ├── freezer │ ├── hugetlb │ ├── memory │ ├── name=systemd │ ├── net_cls,net_prio │ ├── perf_event │ ├── pids │ └── rdma └── proc ├── cpuinfo ├── diskstats ├── meminfo ├── stat ├── swaps └── uptime ``` 即在容器内部提供一个虚拟的proc文件系统和容器自身的cgroup的目录树。 ###LXCFS安装 for ubuntu ``` sudo add-apt-repository ppa:ubuntu-lxc/lxcfs-stable -y sudo apt-get update sudo apt-get install lxcfs -y ``` 其他版本请参考管网自行编译安装 ###LXCFS与docker结合 创建LXCFS挂载点(如果apt-get安装,则已自动创建并挂载) ``` sudo mkdir -p /var/lib/lxcfs sudo ./lxcfs -s -f -o allow_other /var/lib/lxcfs/ ``` 启动docker容器,挂载lxcfs ``` root@gz-node1:~# docker run -it --rm --name ubuntu --memory=512m --cpuset-cpus=0,1 -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw -v /var/lib/lxcfs/proc/stat:/proc/stat -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo -v /var/lib/lxcfs/cgroup/:/cgroup/:rw ubuntu:16.04 free -m WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. total used free shared buff/cache available Mem: 512 1 510 31 0 510 Swap: 0 0 0 ``` 参考: - https://linuxcontainers.org/lxcfs/introduction/ - https://yq.aliyun.com/articles/566208
没有评论