Docker容器命名和资源配额控制、数据映射

Docker容器命名和重命名

1
2
容器命名语法:docker run -d --name 容器名称 容器镜像名 要执行的命令
容器重命名语法:docker rename 旧容器名称 新容器名称

运行一个名字为nongkaige的容器

1
2
docker run -itd --name nongkaige centos /bin/bash
docker ps

iSddVx.png

将名称为nongkaige的容器重命名为nongziyi

1
2
docker rename nongkaige nongziyi
docker ps

iSdDPO.png

Docker容器指定主机名称

1
语法:docker run -it --name 容器名称 -h 指定主机名称 镜像 要执行的命令

创建docker容器时指定主机名

1
2
docker run -it --name test -h mrnong centos /bin/bash
hostname

iSdsRe.png

Docker容器资源配额控制

启动docker容器时,指定CPU、内存、硬盘性能等的硬件资源使用份额

Docker通过cgroup来控制容器使用的资源配额,包括CPU、内存、硬盘三大方面,基本覆盖了常见的资源配额和使用量控制

cgroup概述:

cgroup是Control Groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如cpu、memory、磁盘IO等等)的机制,被LXC、docker等很多项目用于实现进程资源控制。cgroup将任意进程进行分组化管理的Linux内核功能。cgroup本身是提供将进行分组化管理的功能和接口的基础结构,I/O或内存的分配控制等具体的资源管理功能是通过这个功能来实现的

为什么要进行硬件配额

当多个容器运行时,防止某容器把所有的硬件都暂用了,比如一台被黑掉的容器

Docker容器资源配额控制之CPU

给容器实例分配512权重的cpu使用份额(–cpu-shares)

1
2
3
docker run -it --cpu-shares 512 centos /bin/bash
cat /sys/fs/cgroup/cpu/cpu.shares
512

说明: 默认情况下,每个docker容器的cpu份额都是1024,单独一个容器的份额是没有意义的,只有在同时运行多个容器时,容器的cpu加权的效果才能体现出来。

cgroups只在容器分配的资源紧缺时,也就是说在需要对容器使用的资源进行限制时,才会生效。因此,无法单纯根据某个容器的cpu份额来确定有多少cpu资源分配给它,资源分配结果取决于同时运行的其他容器的cpu分配和容器中进程运行情况

物理机一共有16个核心,创建的容器只能用0、1这两个核心(–cpuset-cpus)

1
2
3
docker run -it --name test2 --cpuset-cpus 0-1 centos
cat /sys/fs/cgroup/cpuset/cpuset.cpus
0-1

说明: 对多核CPU的服务器,docker还可以控制容器运行限定使用哪些cpu内核和内存节点,即使用–cpuset-cpus和–cpuset-mems参数。对具有NUMA拓扑(具有多cpu、多内存节点)的服务器尤其有用,可以对需要提高性能计算的容器进行性能最优的配置。如果服务器只有一个内存节点,则–cpuset-mems的配置基本上不会有明显效果

当容器命令运行结束后,自动删除容器

作用: 当容器命令运行结束后,自动删除容器

应用场景: 在某些环境下,可能需要大量的新建docker实例,然后仅仅运行几秒钟,然后就彻底删除。如运行单元测试或测试弹性云计算。例如,阿里云要模拟双11的压力,需要快速创建1万的实例,运行ab命令,拼命访问test.com首页,运行1个小时,1小时后自动删除。

运行一个容器,5秒之后自动删除

1
2
docker run -itd --rm --name test3 centos sleep 5
docker ps

iSdyxH.png

5秒钟之后再次查看,已经自动删除了

iSd2qI.png

Docker容器资源配额控制之内存

Docker提供参数-m限制容器的内存使用量

允许容器使用的内存上限为128M

1
2
3
docker run -it -m 128m centos
cat /sys/fs/cgroup/memory/memory.limit_in_bytes
134217728

Docker容器资源配额控制之IO

1
2
3
限制此设备上的写速度:--device-write-bps
限制此设备上的读速度:--device-read-bps
(单位可以是kb、mb、gb)

为什么阿里云平台上,普通云盘的IO为:1000IOPS,为什么这么小?

原因是一存储给2000台云主机使用,需要控制一下,防止某台云主机吃光你的磁盘I/O资源

限制容器的写入速度是1mb/s

1
docker run -it --device-write-bps /dev/sda:1mb centos /bin/bash

限制容器的读取速度是1mb/s

1
docker run -it --device-read-bps /dev/sda:1mb centos /bin/bash

Docker数据映射

一句话,docker用来做计算,存储交给外挂

1
2
3
4
5
语法:docker run -itd -v /src:/dst 镜像 要执行的命令
参数:
-v 用来指定挂载目录
/src 物理机本地目录
/dst 挂载到容器里的目录

把物理机上的/var/www/html映射到容器里的/var/www/html

物理机上创建目录

1
mkdir -p /var/www/html

创建一个容器把刚刚创建的目录挂载到容器里

1
docker run -it --name web -v /var/www/html/:/var/www/html centos /bin/bash

在容器中创建一个index.html文件,并写入数据

1
echo "This is a test for docker" >/var/www/html/index.html

退出容器

1
exit

在物理机上查看刚刚在容器中创建的index.html文件和其中的内容

1
2
cat /var/www/html/index.html 
This is a test for docker

iSdWZt.png

数据映射的好处

这样当docker坏了,数据还在物理机上,再使用apache的镜像启动一个docker就可以了,数据并没有丢失

博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%