一、概况
- run: 创建一个新的容器并运行一个命令;
二、RUN详情
2.1 语法
$ sudo docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
具体版本特性,可通过命令查看参数说明
$ sudo docker run --help
2.2 OPTIONS说明
- –add-host: 向IP映射添加自定义主机
参数 | 类型 | 说明 |
| list | 向IP映射添加自定义主机 |
示例:
$ sudo docker run -d --add-host cc-man:192.168.46.111 --add-host cc:192.168.46.62 -p 8088:8080 my_tomcat:7.0
进入容器内部查看是否生效
- -a/–attach: 设置输入输出内容类型
参数 | 类型 | 可选参数 |
| list | stdin:STDIN, STDOUT or STDERR |
说明:
stdin: 指定标准输入输出内容类型
- block IO: 关于 IO 的限制
参数 | 类型 | 说明 |
| uint16 | 块IO(相对权重),介于10和1000之间,或0为禁用(默认为0) |
| list | 块IO(相对权重),介于10和1000之间,或0为禁用(默认为0) |
- cap-add/cap-drop: 添加/删除Liunx的内核修改功能
参数 | 类型 | 说明 |
| list | 添加Linux功能 |
| list | 删除Linux功能 |
使用–cap-add和–cap-drop,配合–privileged,你可以更细致的控制container。默认使用这两个参数的情况下,container拥有一系列的内核修改权限。这两个参数都支持all值,如果你想让某个container拥有除了MKNOD之外的所有内核权限,那么可以执行下面的命令:
$ sudo docker run --cap-add=ALL --cap-drop=MKNOD ...
- cgroup-parent
- cidfile:.
参数 | 类型 | 说明 |
| string | 将容器ID写入文件 |
$ sudo docker run -d --cidfile ./hh.sh ...
- CPU
参数 | 类型 | 说明 |
| int | 是用来指定容器对CPU的使用要在多长时间内做一次重新分配 |
| int | 是用来指定在这个周期内,最多可以有多少时间用来跑这个容器 |
| int | 是用来指定容器对CPU的使用要在多长时间内做一次重新分配(微秒限制CPU实时周期) |
| int | 是用来指定在这个周期内,最多可以有多少时间用来跑这个容器(微秒限制CPU实时运行时间) |
| int | CPU份额(相对权重) |
| int | CPU数量 |
| string | 允许执行的CPU 根据实际情况配置 |
| string | 只应用于 NUMA 架构的 CPU 生效,关于这个选项这里不过多介绍 |
cpu-period:
- 默认的 CPU CFS「Completely Fair Scheduler」period 是 100ms。我们可以通过 --cpu-period 值限制容器的 CPU 使用。一般 --cpu-period 配合 --cpu-quota 一起使用。
- 例如:比如说A容器配置的–cpu-period=100000 --cpu-quota=50000,那么A容器就可以最多使用50%个CPU资源,如果配置的–cpu-quota=200000,那就可以使用200%个CPU资源。
$ sudo docker run -it --rm --cpu-period=100000 --cpu-quota=200000 ...
cpu-shares:
- 默认情况下所有容器的share(简单理解成是权重吧)是相同的,也就是所有容器有相同的权重,在所有容器一起竞争资源时,最终得到的资源是相同的。
- 比如A和B两个容器,A配置的是1024,B配置的是512,那么A最大可以使用的CPU资源是B的两倍。还有一点要注意的是这种配置是有弹性的,如果A容器一直闲着,那B容器是可以使用空闲资源的。
$ sudo docker run -d --cpu-shares 100 ...
cpus:
- 设置CPU数量,主要不可以超出核心数,不然会报错
$ sudo docker run -d --cpus 1.21 ...
cpuset-cpus:
- 允许执行的CPU 根据实际情况配置
- 例如我有4核(0,1,2,3)我可以选择0-1两个CPU也可以分别选择1和3
$ sudo docker run -d --cpuset-cpus 0-1 ...
$ sudo docker run -d --cpuset-cpus 1,3 ...