设置docker的安全机制
容器权限
设置特权级运行的容器:–privileged=true 有的时候我们需要容器具备更多的权限
比如操作内核模块,控制 swap交换分区,挂载 USB 磁盘,修改 MAC 地址等。
[root@foundation7 test]# docker run -it --name vm1 ubuntu
root@f34342f7343d:/# ip addr
[root@foundation7 test]# docker run -it --name vm2 --privileged=true ubuntu
root@2d9ed055a7ec:/# ip addr
对容器进行压测
[root@foundation7 ~]# docker run --rm -it --name vm1 -m 100M --memory-swap 100M stress --vm 1 --vm-bytes 100M
# 提供给vm1100M的内存,内存加交换分区的大小为100M,则能处理的最大压测也是100M
[root@foundation7 ~]# docker run --rm -it --name vm1 -m 100M stress --vm 1 --vm-bytes 150M
# 设置内存和swap分区都为100M,则最大压侧为200M
限制容器cpu占用率
[root@foundation7 ~]# docker run --rm -it --cpu-shares 512 stress -c 1
[root@foundation7 ~]# docker run --rm -it --cpu-shares 1024 stress -c 1
1024的优先级大,但在cpu核数充足的时候,cpu可以同时满足这两个压测,无法体现优先级
通过lscpu查看cpu核数再进行压测
[root@foundation7 ~]# ls cpu
[root@foundation7 ~]# docker run --rm -it --cpu-shares 512 stress -c 4
[root@foundation7 ~]# docker run --rm -it --cpu-shares 1024 stress -c 4
对写入速率进行限制
[root@foundation7 ~]# docker run --rm -it --privileged=true --device-write-bps /dev/sda:10M ubuntu
root@b13f489c0849:/# dd if=/dev/zero of=file1 bs=1M count=100 oflag=direct
Cgroup对Docker进行权限限制
1.安装cgroup管理工具
[root@server1 ~]# yum install libcgroup.x86_64 -y
[root@server1 ~]# /etc/init.d/cgconfig start
2.对内存的限制
[root@server1 memory]# vim /etc/cgconfig.conf
group x1 {
memory {
memory.limit_in_bytes = 209715200;
# 指定内存大小为200M
memory.memsw.limit_in_bytes = 209715200;
# 内存和交换分区的大小之和,即交换分区的大小为0
}
}
[root@server1 memory]# /etc/init.d/cgconfig restart
使用x1控制时,可以看出最多耗费的内存不能超过200M
3.对cpu的限制
系统对cpu的限制
[root@server1 ~]# cd /cgroup/cpu
[root@server1 cpu]# cat cpu.shares
1024
可以对进程调度程序所处理的进程组设置CPU时间分配的比重
[root@server1 cpu]# vim /etc/cgconfig.conf
group x2 {
cpu {
cpu.share = 100;
}
}
[root@server1 shm]# /etc/init.d/cgconfig restart
[root@server1 shm]# cgexec -g cpu:x2 dd if=/dev/zero of=/dev/null &
[1] 3404
4.对块设备I/O速率限制
vim /etc/cgconfig.conf
group x3 {
blkio {
blkio.throttle.read_bps_device = "252:0 1000000";
# 252:0指的是/dev/vda
}
}
[root@server1 shm]# /etc/init.d/cgconfig restart
[root@server1 shm]#yum install -y iotop ##查看io进程的实时状态
[root@server1 shm]# cgexec -g blkio:x3 dd if=/dev/vda of=/dev/null &
[1] 4070
速度维持在1000k左右
5.freezer子系统
[root@server1 cgroup]# vim /etc/cgconfig.conf
group x4 {
freezer {}
}
[root@server1 cgroup]# /etc/init.d/cgconfig restart
Stopping cgconfig service: [ OK ]
Starting cgconfig service: [ OK ]
[root@server1 x4]# cat freezer.state
THAWED
[root@server1 x4]# dd if=/dev/zero of=/dev/null &
[1] 4652
CPU资源将被消耗殆尽
此进程可能和其他进程共同占用某种资源,将其kill则会将资源释放,影响别的进程
此时将其冰冻观察是否有上述情况