本文不止针对docker create 和 run 的选项解释,其实对以下几个指令的选项,同样有帮助和理解。
- dockerd 启动docker engine
- docker create / run / update 容器的创建和修改
- daemon.json配置文件
- docker service create 集群服务的创建
- docker service update 集群服务的更新
–add-host list | Add a custom host-to-IP mapping (host:ip) 添加一条hosts的记录到/etc/hosts中 例如:docker run -it –net=br10 –ip=192.168.10.10 –add-host=host10:192.168.10.10 –name=ins01 stress bash 进入容器: [root@a1558ecb087b /]# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.10.10 host10 192.168.10.10 a1558ecb087b |
-a, –attach list | Attach to STDIN, STDOUT or STDERR 如果在执行run命令时没有指定-a,那么docker默认会挂载所有标准数据流,包括输入输出和错误。 |
–blkio-weight uint16 | Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0) 设置容器块设备IO的权重,有效值范围为10至1000的整数(包含10和1000)。默认情况下,所有容器都会得到相同的权重值(500)。 参考:Docker资源管理探秘-Cgroups机制 |
–blkio-weight-device list | Block IO weight (relative device weight) (default []) 指定的块设备的IO相对权重 使用方式:blkio-weight-device=”设备名称:权重值” 使用方法,参考:Docker资源管理探秘-Cgroups机制如果–blkio-weight-device接口和–blkio-weight接口一起使用,那么Docker会使用–blkio-weight值作为默认的权重值,然后使用–blkio-weight-device值来设定指定设备的权重值,而早先设置的默认权重值将不在这个特定设备中生效。 |
–cap-add list | Add Linux capabilities 控制docker的内核权限 Linux的Capability机制允许你将超级用户相关的高级权限划分成为不同的小单元. 目前Docker容器默认只用到了以下的Capability:CHOWN, DAC_OVERRIDE, FSETID, FOWNER, MKNOD,NET_RAW, SETGID, SETUID, SETFCAP,SETPCAP, NET_BIND_SERVICE, SYS_CHROOT, KILL, AUDIT_WRITE 有些情况下,你也许需要调整上面罗列的特性。比如你正在构建一个容器,你用它来执行ntpd或是crony,为此它们要能够修改宿主的系统时间。由于不具备 CAP_SYS_TIME 特性,容器无法工作。为了应对这种情况,在Docker之前的版本中,容器必须以提权模式运行(使用–privileged 选项),这会禁用所有安全机制。 在Docker的1.3版中,新添了–cap-add和–cap-drop选项。要让一个ntpd容器跑起来,你现在只要执行以下命令: #docker run -d –cap-add SYS_TIME ntpd 就可以将 SYS_TIME 特性添加到你的容器中。 再举个例子,如果你确定你的容器不会改变任何进程的UID和GID,那完全可以将这些特性从你的容器中移除,这样会更安全: #docker run –cap-drop SETUID –cap-dropSETGID –cap-drop FOWNER fedora /bin/sh 命令示例,用于查看启用的特性: # pscap | grep 2912 运行结果示例: 5417 2912 root sh chown, dac_override,fsetid, kill, setpcap, net_bind_service, net_raw, sys_chroot, mknod,audit_write, setfcap 或者你可以先移除所有特性,然后再把一个添加回去: #docker run –cap-drop ALL –cap-addSYS_TIME ntpd /bin/sh 查看启用的特性: # pscap | grep 2382 5417 2382 root sh sys_time |
–cap-drop list | Drop Linux capabilities 控制docker的内核权限 例如:docker run –cap-add=ALL –cap-drop=MKNOD //容器拥有除了MKNOD之外的所有内核权限 |
–cgroup-parent string | Optional parent cgroup for the container |
–cidfile string | Write the ccontainer ID to the file 将容器的id写入主机中的文件 [root@110 ~]# docker run -it –cidfile=/root/cid.file –name=ins01 centos bash [root@110 ~]# cat cid.file eec2d694dfb6ef53d24c1942866067269e026931e9c1851249f863ebcc47fc16 |
–cpu-period int | Limit CPU CFS (Completely Fair Scheduler) period 内核默认的Linux 调度CFS(完全公平调度器)周期为100ms,我们通过–cpu-period来设置容器对CPU的使用周期,同时–cpu-period接口需要和–cpu-quota接口一起来使用。–cpu-quota接口设置了CPU的使用值。CFS(完全公平调度器) 是内核默认使用的调度方式,为运行的进程分配CPU资源。对于多核CPU,根据需要调整–cpu-quota的值。单位为微秒(μs)。cpu-period的最小值为1000微秒,最大值为1秒(10^6 μs),默认值为0.1秒(100000 μs) –cpu-period的详细说明,参考:Docker资源管理探秘-Cgroups机制 |
–cpu-quota int | Limit CPU CFS (Completely Fair Scheduler) quota –cpu-quota接口设置了CPU的使用值,通常情况下它需要和–cpu-period接口一起来使用。具体使用方法请参考–cpu-period选项。 是用来指定在cpu-period周期内,最多可以有多少时间用来跑这个容器,单位为微秒(μs),值默认为-1,表示不做控制。 跟–cpu-shares不同的是这种配置是指定一个绝对值,而且没有弹性在里面,容器对CPU资源的使用绝对不会超过配置的值。 –cpu-quota的详细说明,参考:Docker资源管理探秘-Cgroups机制 |
–cpu-rt-period int | Limit CPU real-time period in microseconds 实时调度策略的时间周期,类似于–cpu-period |
–cpu-rt-runtime int | Limit CPU real-time runtime in microseconds 实时调度策略的周期中的运行时间,类似于–cpu-quota |
-c, –cpu-shares int | CPU shares (relative weight) 是相对权重, 设置为一个正整数,代表所分配的相对CPU资源比。默认是平均分配 注意:该值的设置不能小于2 默认情况下所有容器的share(简单理解成是权重吧)是相同的,也就是所有容器有相同的权重,在所有容器一起竞争资源时,最终得到的资源是相同的。这个share是一个相对的值,那么这个值的意义就不能单纯的通过一个容器的share值来看,而是多个在一起对比,比如A和B两个容器,A配置的是1024,B配置的是512,那么A最大可以使用的CPU资源是B的两倍。还有一点要注意的是这种配置是有弹性的,如果A容器一直闲着,那B容器是可以使用空闲资源的。 设置容器使用CPU的权重,这个权重设置是针对CPU密集型的进程的。如果某个容器中的进程是空闲状态,那么其它容器就能够使用本该由空闲容器占用的CPU资源。也就是说,只有当两个或多个容器都试图占用整个CPU资源时,–cpu-shares设置才会有效。 –cpu-shares的详细说明,参考:Docker资源管理探秘-Cgroups机制 |
–cpus decimal | Number of CPUs 容器CPU占用主机的CPU的比例,占用的比例关系暂时未找到相关的资料 参考:Docker 资源(cpu、memory)限制实践篇 |
–cpuset-cpus string | CPUs in which to allow execution (0-3, 0,1) 指定允许容器使用的CPU序号,从0开始,默认使用主机的所有CPU 例如: –cpuset-cpus=0-2 // 允许使用0,1,2号cpu –cpuset-cpus=0-1,3 // 允许使用0,1,3号cpu |
–cpuset-mems string | MEMs in which to allow execution (0-3, 0,1) 限制容器进程使用的哪些内存节点,用法与–cpuset-cpus相似. 可参考:Docker资源管理探秘-Cgroups机制 |
–device list | Add a host device to the container 映射设备到容器 例如:–device /dev/sda:/dev/sda |
–device-cgroup-rule list | Add a rule to the cgroup allowed devices list |
–device-read-bps list | Limit read rate (bytes per second) from a device (default []) 用来限制指定设备的读取速率,单位可以是kb、mb或者gb 例如:–device-read-bps /dev/sda:1mb 可参考:Docker资源管理探秘-Cgroups机制 |
–device-read-iops list | Limit read rate (IO per second) from a device (default []) 设置了设备的IO读取速率 可以通过”–device-read-iops /dev/sda:400″来限定sda的IO读取速率(400次/秒) 可参考:Docker资源管理探秘-Cgroups机制 |
–device-write-bps list | Limit write rate (bytes per second) to a device (default []) 用来限制指定设备的写速率,单位可以是kb、mb或者gb 可参考:Docker资源管理探秘-Cgroups机制 |
–device-write-iops list | Limit write rate (IO per second) to a device (default []) 设置了设备的IO写速率 可以通过”–device-write-iops /dev/sda:400″来限定sda的IO写速率(400次/秒) 可参考:Docker资源管理探秘-Cgroups机制 |
–disable-content-trust | Skip image verification (default true) 跳过镜像验证 |
–dns list | Set custom DNS servers 设定容器的DNS地址,在容器的 /etc/resolv.conf 文件中可查看。注意:如果不设置, Docker 会默认用主机上的 /etc/resolv.conf 来配置容器。 例如: [root@110 ~]# docker run -it –dns=114.114.114.114 –dns=8.8.8.8 centos bash -c “cat /etc/resolv.conf” search 100.com nameserver 114.114.114.114 nameserver 8.8.8.8 例如: [root@110 ~]# docker run -it centos bash -c “cat /etc/resolv.conf” search 100.com nameserver 192.168.80.1 |
–dns-option list | Set DNS options 容器 /etc/resolv.conf 文件,其他设置 |
–dns-search list | Set custom DNS search domains 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的 主机时,DNS 不仅搜索host,还会搜索 host.example.com 。 注意:如果不设置, Docker 会默认用主机上的 /etc/resolv.conf 来配置容器。 |
–entrypoint string | Overwrite the default ENTRYPOINT of the image |
-e, –env list | Set environment variables 设置容器实例的环境变量 [root@110 ~]# docker run -it –env=GOROOT=/usr/local/go centos bash [root@ef3f8a131d13 /]# echo $GOROOT /usr/local/go |
–env-file list | Read in a file of environment variables 读入配置文件 例如:docker service create –name=redis –replicas=5 –env-file=/root/file.env rediscat /root/file.env GOPATH=/usr/local/go PHPROOT=/data/www/web NGINX_CONF=/usr/local/nginx/conf/nginx.conf |
--expose list | Expose a port or a range of ports 开放一个端口或一组端口 例如: docker create -it –expose=”80″ –expose=”8080″ –expose=”9001″ –name=ins01 centos |
–group-add list | Add additional groups to join |
–health-cmd string | Command to run to check health |
–health-interval duration | Time between running the check (ns|us|ms|s|m|h) (default 0s) |
–health-retries int | Consecutive failures needed to report unhealthy |
–health-start-period duration | Start period for the container to initialize before starting health-retries countdown(ns|us|ms|s|m|h) (default 0s) |
–health-timeout duration | Maximum time to allow one check to run (ns|us|ms|s|m|h) (default 0s) |
–help | Print usage 帮忙文档 |
-h, –hostname string | Container host name 容器的hostName,在容器中使用 cat /etc/hostname 查看 |
–init | Run an init inside the container that forwards signals and reaps processes |
-i, –interactive | Keep STDIN open even if not attached |
–ip string | IPv4 address (e.g., 172.30.100.104) 指定容器IPv4地址,例如:–ip=192.168.10.10 |
–ip6 string | IPv6 address (e.g., 2001:db8::33) 指定容器IPv6地址 |
–ipc string | IPC namespace to use |
–isolation string | Container isolation technology |
–kernel-memory bytes | Kernel memory limit 内核内存限制,即容器的系统内核可以使用多少内存。数字需要使用正整数,对应的单位是b, k, m, g中的一个。最小取值是4M。 使用方式:–kernel-memory=”<数字>[<单位>]” –kernel-memory的详细说明,参考:Docker资源管理探秘-Cgroups机制 |
-l, –label list | Set meta data on a container 设置容器标签 docker主机的标签,很实用的功能 例如:docker create –label nodeName=host-121 –name ins01 centos bash label 使用方法参考:Docker的命令之集群服务管理 Service |
–label-file list | Read in a line delimited file of labels 通过文件设置容器标签 [root@110 ~]# docker create –label-file=/root/label.file –name=ins-1 centos bash [root@110 ~]# cat /root/label.file tag1=aaaaa tag2=bbbbb tag3=标签3 |
–link list | Add link to another container |
–link-local-ip list | Container IPv4/IPv6 link-local addresses |
–log-driver string | Logging driver for the container |
–log-opt list | Log driver options |
–mac-address string | Container MAC address (e.g., 92:d0:c6:0a:29:33) |
-m, –memory bytes | Memory limit 内存使用限制。 数字需要使用整数,对应的单位是b, k, m, g中的一个。最小取值是4M。 在默认情况下,容器可以占用无限量的内存,直至主机内存资源耗尽。 注意,在实际容器使用场景中,如果不对容器使用内存量加以限制的话,可能导致一个容器会耗尽整个主机内存,从而导致系统不稳定。所以在使用容器时务必对容器内存加以限制。 使用方式:-m, –memory=” <数字>[<单位>]”,例如:–memory=1G –memory的详细说明,参考:Docker资源管理探秘-Cgroups机制 |
–memory-reservation bytes | Memory soft limit 内存软限制。 数字需要使用正整数,对应的单位是b, k, m, g中的一个。 通常情况下,容器能够使用的内存量仅仅由-m/–memory选项限定。如果设置了–memory-reservation选项,当内存使用量超过–memory-reservation选项所设定的值时,系统会强制容器执行回收内存的操作,使得容器内存消耗不会长时间超过–memory-reservation的限定值。这个限制并不会阻止进程使用超过限额的内存,只是在系统内存不足时,会回收部分内存,使内存使用量向限定值靠拢。 使用方式:–memory-reservation=”<数字>[<单位>]”,例如:–memory-reservation=2G –memory-reservation的详细说明,参考:Docker资源管理探秘-Cgroups机制 |
–memory-swap bytes | Swap limit equal to memory plus swap: ‘-1′ to enable unlimited swap 总内存使用限制 (物理内存 + 交换分区,数字需要使用整数,对应的单位是b, k, m, g中的一个。 注意:这里是物理内存+交换分区的总和,并非仅是交换分区。 使用方式:–memory-swap=”<数字>[<单位>]”,例如:–memory-swap=500M –memory-swap的使用说明,参考:Docker资源管理探秘-Cgroups机制 |
–memory-swappiness int | Tune container memory swappiness (0 to 100) (default -1) 调节容器内存使用交换分区的选项,取值为0和100之间的整数(含0和100)。0表示容器不使用交换分区,100表示容器尽可能多的使用交换分区。 –memory-swappiness的使用说明,参考:Docker资源管理探秘-Cgroups机制 |
–mount mount | Attach a filesystem mount to the container |
–name string | Assign a name to the container 容器名称 |
–network string | Connect a container to a network (default “default”) 设置容器网络,网络通过docker network create 创建 例如: [root@110 ~]# docker network create –subnet=192.168.10.0/24 –ip-range=192.168.10.0/24 br10 [root@110 ~]# docker run -it –network=br10 centos bash |
–network-alias list | Add network-scoped alias for the container |
–no-healthcheck | Disable any container-specified HEALTHCHECK |
–oom-kill-disable | Disable OOM Killer 内存耗尽时是否杀掉容器,默认杀掉容器进程 当out-of-memory (OOM)发生时,系统会默认杀掉容器进程,如果你不想让容器进程被杀掉,可以使用该接口。 注意:建议采用默认值,一旦OOM,杀掉容器进程。如果挂起,将无法释放容器中已使用的内存,而影响占用主机的内存。 –oom-kill-disable的使用说明,参考:Docker资源管理探秘-Cgroups机制 |
–oom-score-adj int | Tune host’s OOM preferences (-1000 to 1000) |
–pid string | PID namespace to use |
–pids-limit int | Tune container pids limit (set -1 for unlimited) |
–privileged | Give extended privileges to this container 默认情况下container是不能访问任何其他设备的。但是通过”privileged”,container就拥有了访问任何其他设备的权限。 当操作者执行docker run –privileged时,Docker将拥有访问主机的所有设备的权限 |
-p, –publish list | Publish a container’s port(s) to the host 指定端口映射 |
-P, –publish-all | Publish all exposed ports to random ports 映射所有开发的端口 例如:docker create -it -P –expose={“80″,”8080″,”3306″} –name=ins01 centos // 将映射主机的随机端口到容器的80,8080,3306端口 |
–read-only | Mount the container’s root filesystem as read only |
–restart string | Restart policy to apply when a container exits (default “no”) |
–rm | Automatically remove the container when it exits 注意:–rm 和 -d不能共用 |
–runtime string | Runtime to use for this container |
–security-opt list | Security Options |
–shm-size bytes | Size of /dev/shm |
–stop-signal string | Signal to stop a container (default “SIGTERM”) |
–stop-timeout int | Timeout (in seconds) to stop a container |
–storage-opt list | Storage driver options for the container |
–sysctl map | Sysctl options (default map[]) |
–tmpfs list | Mount a tmpfs directory |
-t, –tty | Allocate a pseudo-TTY 通常和-i联合使用 –it |
–ulimit ulimit | Ulimit options (default []) |
-u, –user string | Username or UID (format: <name|uid>[:<group|gid>]) |
–userns string | User namespace to use |
–uts string | UTS namespace to use |
-v, –volume list | Bind mount a volume 挂载数据卷 数据卷的用法参考: Docker的命令之数据卷管理 Volume |
–volume-driver string | Optional volume driver for the container |
–volumes-from list | Mount volumes from the specified container(s) # docker create -it –name=ins01 -v=logs:/data/logs centos bash # docker create -it –name=ins02 –volumes-from=ins01 centos bash |
-w, –workdir string | Working directory inside the container 进入容器后的默认目录,如果目录不存在,则创建。 [root@110 ~]# docker run -it -w=/data/logs –name=ins01 centos bash [root@aa358735869e logs]# pwd /data/logs |
推荐相关文档:
- Docker的安装
- Docker的配置文件 daemon.json 详细解
- Docker的启动参数
- Docker的命令之概述
- Docker的命令之容器管理 Container
- Docker的命令之镜像管理 Image
- Docker的命令之网络管理 network
- Docker的命令之集群节点管理 Swarm node
- Docker的命令之插件管理 Plugin
- Docker的命令之安全管理 Docker secret
- Docker的命令之集群服务管理 Service
- Docker的命令之 Docker stacks
- Docker的命令之集群管理 swarm
- Docker的命令之系统管理 Docker system
- Docker的命令之数据卷管理 Volume
- Docker的命令之快捷指令
- Docker中的镜像构建-Dockerfile指令详解
- Docker的实践笔记
- Docker create / Docker run 的选项详解
Pingback引用通告: Docker的命令之概述 | 精彩每一天