Powered by Typecho)))
Optimized by EAimTY
Docker容器由于Linux内核namespace本身还不够完善的现状(例如,没有cgroup namespace,user namespace也是在kernel高版本才开始支持, /dev设备不隔离等),因此docker容器在隔离性方面也存在一些缺陷。例如,在容器内部proc文件系统中可以看到Host宿主机上的proc信息(如:meminfo, cpuinfo,stat, uptime等)。开源项目LXCFS,尝试通过用户态文件系统实现docker容器内的虚拟proc文件系统,增强docker容器的隔离性,减少给用户带来的不便。
LXCFS是一个开源的FUSE用户态文件系统,起初是为了更好的在Ubuntu上使用LXC容器而设计开发。LXCFS基于C语言开发,代码托管在github上,目前较多使用在LXC容器中。主要由Ubuntu的工程师提供维护和开发。
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的目录树。
for ubuntu
sudo add-apt-repository ppa:ubuntu-lxc/lxcfs-stable -y
sudo apt-get update
sudo apt-get install lxcfs -y
其他版本请参考管网自行编译安装
创建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
参考: