create

用法:docker create [OPTIONS] IMAGE [COMMAND] [ARG…]

功能:使用image创建一个新的容器,并将返回一个容器的ID,创建之后的容器用docker start命令启动,OPTIONS用于创建容器时对容器进行配置,有些选项将覆盖image中对容器的配置,COMMAND指定容器启动时执行的命令。

选项:

表 1 参数说明

参数

参数含义

-a —attach=[]

使控制台Attach到容器内进程的STDIN,STDOUT,STDERR

—name=””

指定容器的名字

—add-host=[host:ip]

在容器内的/etc/hosts中添加一个hostname到IP地址的映射

e.g. —add-host=test:10.10.10.10

—annotation

设置容器的annotations。例如支持native.umask选项:

  1. annotation native.umask=normal # 启动的容器umask值为0022
  2. annotation native.umask=secure # 启动的容器umask值为0027

注意如果没有配置该参数,则使用dockerd中的umask配置。

—blkio-weight

blockio的相对权重,从10到1000

—blkio-weight-device=[]

blockio权重(设置相对权重)

-c, —cpu-shares=0

容器获得主机CPU的相对权重,通过设置这个选项获得更高的优先级,默认所有的容器都是获得相同的CPU优先权。

—cap-add=[]

添加Linux权能

—cap-drop=[]

清除Linux权能

—cgroup-parent

为容器设置cgroup父目录

—cidfile=””

将容器的ID写到指定的文件中

e.g. —cidfile=/home/cidfile-test 将该容器的ID写入到/home/cidfile-test中

—cpu-period

设置CFS(完全公平调度策略)进程的CPU周期。

默认值为100ms;一般—cpu-period参数和—cpu-quota是配合使用的,比如—cpu-period=50000 —cpu-quota=25000,意味着如果有1个CPU,该容器可以每50ms获取到50%的CPU。

使用—cpus=0.5也可达到同样的效果

—cpu-quota

设置CFS(完全公平调度策略)进程的CPU配额,默认为0,即没有限制

—cpuset-cpus

设置容器中进程允许运行的CPU (0-3, 0,1)。默认没有限制

—cpuset-mems

设置容器中进程运行运行的内存内存节点 (0-3, 0,1),只对NUMA系统起作用

—device=[]

将主机的设备添加到容器中 (e.g. —device=/dev/sdc:/dev/xvdc:rwm)

—dns=[]

强制容器使用指定的dns服务器(e.g. 创建容器时指定—dns=114.114.xxx.xxx,将在容器的/etc/resolv.conf中写入nameserver 114.114.xxx.xxx并将覆盖原来的内容)

—dns-opt=[]

设置DNS选项

—dns-search=[]

强制容器使用指定的dns搜索域名

-e, —env=[]

设置容器的环境变量

—env=[KERNEL_MODULES=]:

在容器中插入指定模块。目前仅支持Host主机上有的模块,且容器删除后Host主机上模块仍然驻留,且容器需要同时指定—hook-spec选项。以下都是参数的合法格式:

KERNEL_MODULERS=

KERNEL_MODULERS=a

KERNEL_MODULERS=a,b

KERNEL_MODULERS=a,b,

—entrypoint=””

覆盖image中原有的entrypoint,entrypoint设置容器启动时执行的命令

—env-file=[]

从一个文件中读取环境变量,多个环境变量在文件中按行分割(e.g. —env-file=/home/test/env,其中env文件中存放了多个环境变量)

—expose=[]

开放一个容器内部的端口,使用下文介绍的-P选项将会使开放的端口映射到主机的一个端口。

—group-add=[]

指定容器添加到额外的组

-h, —hostname=””

设置容器主机名

—health-cmd

设置容器健康检查执行的命令

—health-interval

相邻两次命令执行的间隔时间,默认 30s

—health-timeout

单次检查命令执行的时间上限,超时则任务命令执行失败,默认30s

—health-start-period

容器启动距离第一次执行健康检查开始的时间,默认0s

—health-retries

健康检查失败最大的重试次数,默认3

—health-exit-on-unhealthy

容器被检查为非健康后停止容器,默认false

—host-channel=[]

设置一个通道供容器内进程与主机进行通信,格式:<host path>:<container path>:<rw/ro>:<size limit>

-i, —interactive=false

设置STDIN打开即使没有attached

—ip

设置容器的IPv4地址

—ip6

设置容器的IPv6地址

—ipc

指定容器的ipc命名空间

—isolation

指定容器隔离策略

-l, —label=[]

设置容器的标签

—label-file=[]

从文件中获取标签

—link=[]

链接到其他容器,这个选项将在容器中添加一些被链接容器IP地址和端口的环境变量及在/etc/hosts中添加一条映射(e.g. —link=name:alias)

—log-driver

设置容器的日志驱动

—log-opt=[]

设置日志驱动选项

-m, —memory=””

设置容器的内存限制,格式<number><optional unit>, 其中 unit = b, k, m or g。该参数最小值为4m。

—mac-address

设置容器的mac地址 (e.g. 92:d0:c6:0a:xx:xx)

—memory-reservation

设置容器内存限制,默认与—memory一致。可认为—memory是硬限制,—memory-reservation是软限制;当使用内存超过预设值时,会动态调整(系统回收内存时尝试将使用内存降低到预设值以下),但不确保一定不超过预设值。一般可以和—memory一起使用,数值小于—memory的预设值。

—memory-swap

设置普通内存和交换分区的使用总量,-1为不做限制。如果不设置,则为—memory值的2倍,即SWAP可再使用与—memory相同的内存量。

—memory-swappiness=-1

设置容器使用交换内存的时机,以剩余内存百分比为度量(0-100)

—net=”bridge”

设置容器的网络模式,当前1.3.0版本的docker有四个模式:bridge、host、none、container:<name|id>。默认使用的是bridge。

  • bridge:使用桥接模式在docker daemon启动时使用的网桥上创建一个网络栈。
  • host:在容器内使用主机的网络栈
  • none:不使用网络
  • container:<name|id>:重复利用另外一个容器的网络栈

—no-healthcheck

设置容器不使用健康检查

—oom-kill-disable

禁用OOM killer,建议如果不设置-m参数,也不要设置此参数。

—oom-score-adj

调整容器的oom规则(-1000到1000)

-P, —publish-all=false

将容器开放的所有端口一一映射到主机的端口,通过主机的端口可以访问容器内部,通过下文介绍的docker port命令可以查看具体容器端口和主机端口具体的映射关系。

-p, —publish=[]

将容器内的一个端口映射到主机的一个端口,format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort,如果没有指定IP代表侦听主机所有网卡的访问,如果没有指定hostPort,表示自动分配主机的端口。

—pid

设置容器的PID命名空间

—privileged=false

给予容器额外的权限,当使用了—privileged选项,容器将可以访问主机的所有设备。

—restart=””

设置容器退出时候的重启规则,当前1.3.1版本支持3个规则:

  • no:当容器停止时,不重启。
  • on-failure:当容器退出码为非0时重启容器,这个规则可以附加最大重启次数,如on-failure:5,最多重启5次。
  • always:无论退出码是什么都退出。

—read-only

将容器的根文件系统以只读的形式挂载

—security-opt=[]

容器安全规则

—shm-size

/dev/shm设备的大小,默认值是64M

—stop-signal=SIGTERM

容器停止信号,默认为SIGTERM

-t, —tty=false

分配一个伪终端

—tmpfs=[]

挂载tmpfs目录

-u, —user=””

指定用户名或者用户ID

—ulimit=[]

ulimit选项

—userns

指定容器的user命名空间

-v, —volume=[]

将主机的一个目录挂载到容器内部,或者在容器中创建一个新卷(e.g. -v /home/test:/home将主机的/home/test目录挂载到容器的/home目录下,-v /tmp 在容器中的根目录下创建tmp文件夹,该文件夹可以被其他容器用—volumes-from选项共享 )。不支持将主机目录挂载到容器/proc子目录,否则启动容器会报错。

—volume-driver

设置容器的数据卷驱动,可选。

—volumes-from=[]

将另外一个容器的卷挂载到本容器中,实现卷的共享(e.g. -volumes-from container_name将container_name中的卷挂载到这个容器中 )。-v和—volumes-from=[]是两个非常重要的选项用于数据的备份和热迁移。

-w, —workdir=””

指定容器的工作目录,进入容器时的目录

示例:

创建了一个名为ubuntu的容器,创建之后的容器用docker start命令启动。

  1. $ sudo docker create -ti --name=ubuntu ubuntu /bin/bash