一  容器资资源配额

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的搭建。