Docker安全演示
1.docker与系统共享内核并且会在宿主机上产生相应的进程
容器内
宿主机内
2.cgroup
cgroup目录下有对容器进行相应限制的参数,如cpu,memory等,新建的容器的id会出现在象形限额的docker的目录下,并且如果在相应memory目录下建立目录,那么目录会继承相应memory目录的属性。
3.cgroup之cpu限额
运行docker容器指定相应的限额
运行docker容器指定相应的限额:
docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash
cpu_period和cpu_quota这两个参数需要组合使用,用来限制进程在长度为cpu_period的一段时间内,只能被分配到总量为cpu_quota的cpu时间,以上设置表示20%的cpu时间。
a.在/sys/fs/cgroup目录下建立目录xl,该目录会继承cpu的相应性能,查看cpu的相应限额
b.该目录就相当于一个容器,在该容器下面进行相应的操作并且查看cpu的相应使用效率
可以发现该进程的cpu占用率接近为100%
若有两个cpu同时在使用,可以将其中一个关闭
[root@server1 cpu1]# pwd
/sys/fs/cgroup/cpu
[root@server1 cpu1]# cat onine ##在其中要关掉的cpu的目录下查看咋在线文件中显示为1
[root@server1 cpu1]# echo 0 online ##在该文件中输入0再次查看在线的cpu就变为1个
c.修改cpu使用率文件中的参数
d.查看上次进行测试的实验进程,并且将进程编号导入cpu下的xl目录中的tasks文件中,再次执行top命令查看该进程cpu使用率发现其变为20%左右
4.cgroup之memeory限额
运行dokcer容器指定相应的memory参数:
docker run -it --memory 200M --memory-swap=200M ubuntu
容器可用于包括两个部分:物理内存和swap交换分区
–memory设置内存使用限额
–memory-swa设置swap交换分区限额
a.下载相应对cgrou的memory进行操作的相应软件
[root@server1 xl]# yum search cgroup
[root@server1 xl]# yum install -y libcgroup-tools.x86_64
b.在相应的memory目录下建立新的目录
c.修改memory限额为300M(以字节计算)
d.在/dev/shm对内存进行相应的操作测试
未超過內存使用率時,未使用swap分區
超過內存使用率時,使用swap分區
e.修改相應的memory的swap分區內存使用修改成300M
f.再次對/dev/shm进行操作,当再次截取文件大小为400M时,swap分区会拒绝
g.删除文件查看大小发现少的300M是当时设置的限额
利用LXCFS增强docker容器隔离性和资源可见性
在运行容器时指定了容器的相应的内存大小及其相应的swap分区大小,但是在容器内查看时发现其使用率相应大小还是与宿主机相同,因此容器的隔离性不好。
[root@server1 ~]# yum install -y lxcfs-2.0.5-3.el7.centos.x86_64.rpm
运行容器并且指定相应的挂载点添加相应的权限
[root@server1 lxcfs]# docker run -it -m 300m -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw -v /var/lib/lxcfs/proc/stat:/proc/stat:rw -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw --name ubuntu -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw -v /var/lib/lxcfs/proc/stat:/proc/stat:rw -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw ubuntu
//运行完成之后查看时发现设置的与运行容器时设置的参数相同
设置特权级运行的容器:–privileged=true
有的时候我们需要容器具备更多的权限,比如操作内核模块,控制swap交换分区,挂载USB磁盘,修改MAC地址等。
添加–privileged=true参数运行容器,执行相应的操作发现不会被拒绝