docker run常见创建选项

docker run命令不清楚的可以 docker run --help |grep 参数

1、创建容器常用选项

创建容器命令格式:
Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...] 
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]    

2、OPTIONS(常用选项) 以docker run为例
-i 即stdin(标准输入流)
-t:开启一个伪终端
-d:放到后台运行
–add-host list :动态添加一个host记录
例如:创建一个容器并查看容器中的hosts:

docker run -itd --name hello --add-host abc:192.168.0.2 ubuntu
docker exec hello cat /etc/hosts

-a:如果在执行run命令时没有指定-a参数,那么Docker默认会挂载所有标准数据流,包括输入输出和错误,可以单独指定挂载哪个标准流

docker run -a stdin -a stdout -i -t ubuntu /bin/bash

–cap-add list:给容器赋予更细粒度的权限,例如ntp服务,需要修改内核可以正常工作
–cap-drop list:给容器删除更细粒度的权限
–cidfile string:把容器id写到一个文件中

例如:把容器id写到/tmp/dockerid.pid文件并查看:
docker run -itd --name duan --cidfile /tmp/dockerid.pid ubuntu
cat /tmp/dockerid.pid

–device list :添加物理机上设备到容器,比如磁盘挂在到容器
–dns list:指定容器DNS

例如:指定DNS并查看默认DNS:
docker run -itd--name dnstest --dns 8.8.8.8 ubuntu    
docker exec dnstest cat /etc/resolv.conf

-e :传入变量。

例如:创建容器并传入变量并查看变量: 
docker run -itd --name bianliang -e TEST=123456 ubuntu 
docker exec bianliang echo $TEST

-env-file -list:通过文件传入变量 和-e参数类似

–expose list :指定容器开放的端口。

 例如:创建容器指定容器开放端口并查看最新创建的容器: 
 docker run -itd --name porttest --expose 80 ubuntu 
 docker ps -l

-h:指定容器主机名,默认容器id截断部分

  例如:创建指定容器主机名并查看容器主机名:
  docker run -itd --name hostnametest -h duanshuaixing ubuntu 
  docker exec hostnametest hostname

–net:指定一个网络
–ip:指定一个ip(划分网段进行隔离,只针对自定义网络)
例如:查看当前网络并创建一个子网,再在新创建的容器中指定网络和ip,然后查看容器信息

docker network ls 
docker network create --subnet=10.0.0.0/16 network_10
docker network ls
docker run -itd --name networktest  --net=network_10 --ip 10.0.0.122 ubuntu
docker inspect networktest

–link: 连接已有容器。获取指定容器ip 并且与abc对应,host的作用是通过域名或者主机名的方式进行访问对应的ip,当ip发生变化时仍可以通过主机名或者域名进行连接不需要修改程序。

例如:查看已有容器ip,创建一个容器并且连接指定容器,查看hosts                                          
docekr exec networktest cat /etc/hosts               
docker run -itd --name linktest --link networktest:abc ubuntu
docker exec linktest cat /etc/hosts

–log-driver:【none(不开启日志)、json-file(默认)、syslog、fluentd、splunk等】。设置日志默认日志路径:/var/lib/docker/containers/容器id/*.json.log文件

例如:创建容器并指定使用syslog方式,查看syslog文件
docker run -itd --name logtest --log-driver ubuntu
tail /var/log/syslog -f

–log-opt:日志的选项

–mount:把本地文件系统挂载到容器

–net :指定容器为哪个网络

–oom-kill-disable:默认在Linux下系统物理资源不足会kill一些内存开销比较大的进程,此选项可以避免被kill

–pid string:使用pid的命名空间

-p:将容器端口转发到端口

例如:将容器80端口转发到宿主机8888端口并查看转发情况:      
docker run -itd --name porttest -p 8888:80 ubuntu
docker ps -l

-P:将expose标识的端口映射到宿主机随机端口
–restart:容器挂了之后尝试重启

例如:容器挂了之后一直尝试重启和容器挂了之后重启3次失败就放弃:
docker run -itd --name restarttest01 --restart alway 
docker run -itd --name restarttest02 --restart on-failure:3 ubuntu

–ulimit:打开最大文件限制

例如:设置用户打开最大进程数和打开最大文件数,并查看ulimit值:
docker run -itd --name ulimittest --ulimit nproc=10240 --ulimit nofile=10240 ubuntu 
docker exec ulimittest  ulimit -n  
ulimit -a |grep 10240

-v:将宿主机的某个目录挂载到容器的某个目录
-volumes-from:容器数据卷。容器为共享目录共享到多个容器
-w:进入容器后到工作目录

关于CPU的限制

     --cpu-period init:cpu周期设置
     --cpu-quota  init :CPU配额限制
     -c,--cpu-shares init: CPU共享(相对权重)
     --cpuset-cpus string:CPUs in which to allow execution (0-3, 0,1)
     --device-read-bps list:限制磁盘读取速率
     --device-write-bps list:限制磁盘写的速率
     --device-read-iops list:限制磁盘读取的iops
     --device-write-iops list:限制磁盘写的iops
     -m,--memory bytes 限制容器内存(硬限制,不可突破硬限制,可软硬限制结合) 
例如:创建一个容器,限制内存为10M,进入容器查看限制
     
docker run --name memorytest -m 10240000 ubuntu
docker exec -it memorytest  /bin/bash   
cd /sys/fs/cgroup/memory/ && grep 10240000 *

--memory-reservation bytes(软限制,可以突破软限制,可软硬限制结合)

--memory-swap bytes:交换分区限制等于内存加交换分区:“- 1” 是不限制容器能使用的 swap 分区大小。

--nemory-swappiness init:限制是否使用swap(0 to 100),权重为0表示禁用swap,默认-1

--storage-opt list:容器的存储驱动程序选项:只支持对devicemapper存储驱动

猜你喜欢

转载自blog.csdn.net/weixin_47003048/article/details/108445770