一 容器资资源配额
dockers 通过cgroup来控制容器的资源配额,包括CPU、内存,磁盘三大方面
1 cpu
cpu share
默认每个docker容器的cpu份额都是1024 在同一个cpu核心上同时运行多个容器时,容器cpu加权的效果 才能体现从出来。 例如: 两个容器a,b份额为1024和512,结果会如何。 ab正常运行,容器a比容器b多一倍的机会获得cpu的时间片。但是如果a的进程是空闲的,那么容器b可以获取比容器a更多二的cpu时间片的:比如主机只运行了一个容器,即使他的cpu份额只有50,也可以独占整个主机的cpu资源
cgroup只有多个容器同时争抢一个cpu资源时,cpu配额才会生效。因此无法单纯的根据某个机器的cpu份额来确定有多少cpu资源分配给他。
step1 分配cpushare值 512 [root@yunpc ~]# docker run -dit --cpu-shares 512 --name centos01 centos bash bb158455d983dd3ef6496b8fa3d104278cec66728ebcc9a60b95066bb585132e [root@yunpc ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bb158455d983 centos "bash" 3 seconds ago Up 2 seconds centos01 step2 进入centos01 查看值大小 [root@yunpc ~]# docker exec -it centos01 bash [root@bb158455d983 /]# cat /sys/fs/cgroup/cpu/cpu.shares 512
cpu core 核心控制
参数 --cpuset可以绑定cpu
step 1 按下top后按1 可以看自己的cpu数量 [root@yunpc ~]# docker run -it --name centos --cpuset-cpus 0-15 centos bash ##这个容器可以在cpu0到cpu15上运行
taskset设定cpu亲和力,taskset能够将一个或多个进程绑定到一个或多个处理器上运行
参数-c --cpu-list 以列表格式显示和指定cpu
-p --pid 在已存在的pid操作
step1 [root@yunpc ~]# ps -aux | grep sshd ##查看sshd服务 root 1845 0.0 0.1 112936 4344 ? Ss Oct13 0:18 /usr/sbin/sshd -D [root@yunpc ~]# taskset -cp 0 1845 ##设置该进程id只能在cpu0上面跑 pid 1845's current affinity list: 0,1 pid 1845's new affinity list: 0 [root@yunpc ~]# taskset -cp 1 ##查看进程为1 是哪个cpu运行的 pid 1's current affinity list: 0,1 step2 [root@yunpc ~]# pstree -p ##查看机器进程数 systemd(1)─┬─YDLive(2035)─┬─YDService(2049)─┬─sh(2160)─┬─{sh}(2161) │ │ │ ├─{sh}(2162)
cpu配额的混合使用
step 1 启动两个centos容器 [root@yunpc ~]# docker run -it --name centos01 \ --cpuset-cpus 0 --cpu-shares 512 centos bash ##占用cpu0 份额为512 [root@yunpc ~]# docker run -it --name centos02 \ --cpuset-cpus 0 --cpu-shares 1024 centos bash 结论;cpu压力测试下,同时运行时,cpu0上的占比,cnetos02约是centos01的两倍. 当centos02停止时,centos01可以调用cpu0的所有资源
2 内存
内存使用大小
step1 [root@VM-4-15-centos ~]# docker run -it -m 1024m centos ##限制容器运行大小为1g
二 ,基本命令
1.容器重命名
[root@yunpc ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bb158455d983 centos "bash" About an hour ago Up About an hour centos01 [root@yunpc ~]# docker rename centos01 centos1 [root@yunpc ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bb158455d983 centos "bash" About an hour ago Up About an hour centos1
2.指定容器内主机名
[root@yunpc ~]# docker run -it -h localhost centos bash
3.容器开启自动启动
[root@yunpc ~]# docker run -it --restart=always centos bash ##容器退出时就重启 [root@yunpc ~]# docker run -it on-failure centos bash ##在容器非正常退出时总是重启容器
三 小结
1. docker容器内的root用户并不是真正意义上的root用户,相当于真机的普通用户
docker run -it --privileged=true centos /bin/bash ##以特权模式启动 容器(获取真机的root权限)
在生产环境中,部署的都是集群,单主机docker意义不大,所有就需要学习下一章节
如何将不同主机的容器互通,同时对容器有一个更好的编排方式,即将开始下一章节
k8s的搭建。