1. docker create
1.1. 描述
创建一个新容器。
使用该命令创建的容器并不会自动运行,创建完成后还需要使用 docker start 命令将容器运行起来。
使用 docker run 命令可以同时完成容器的创建和运行。
1.2. 帮助
$ docker create --help
Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
Create a new container
Options:
--add-host list Add a custom host-to-IP mapping (host:ip)
-a, --attach list Attach to STDIN, STDOUT or STDERR
--blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
--blkio-weight-device list Block IO weight (relative device weight) (default [])
--cap-add list Add Linux capabilities
--cap-drop list Drop Linux capabilities
--cgroup-parent string Optional parent cgroup for the container
--cidfile string Write the container ID to the file
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
--cpu-rt-period int Limit CPU real-time period in microseconds
--cpu-rt-runtime int Limit CPU real-time runtime in microseconds
-c, --cpu-shares int CPU shares (relative weight)
--cpus decimal Number of CPUs
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--device list Add a host device to the container
--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 [])
--device-read-iops list Limit read rate (IO per second) from a device (default [])
--device-write-bps list Limit write rate (bytes per second) to a device (default [])
--device-write-iops list Limit write rate (IO per second) to a device (default [])
--disable-content-trust Skip image verification (default true)
--dns list Set custom DNS servers
--dns-option list Set DNS options
--dns-search list Set custom DNS search domains
--entrypoint string Overwrite the default ENTRYPOINT of the image
-e, --env list Set environment variables
--env-file list Read in a file of environment variables
--expose list Expose a port or a range of ports
--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 (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 (ms|s|m|h) (default 0s)
--health-timeout duration Maximum time to allow one check to run (ms|s|m|h) (default 0s)
--help Print usage
-h, --hostname string Container host name
--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)
--ip6 string IPv6 address (e.g., 2001:db8::33)
--ipc string IPC mode to use
--isolation string Container isolation technology
--kernel-memory bytes Kernel memory limit
-l, --label list Set meta data on a container
--label-file list Read in a line delimited file of labels
--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
--memory-reservation bytes Memory soft limit
--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--memory-swappiness int Tune container memory swappiness (0 to 100) (default -1)
--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")
--network-alias list Add network-scoped alias for the container
--no-healthcheck Disable any container-specified HEALTHCHECK
--oom-kill-disable Disable OOM Killer
--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)
--platform string Set platform if server is multi-platform capable
--privileged Give extended privileges to this container
-p, --publish list Publish a container's port(s) to the host
-P, --publish-all Publish all exposed ports to random ports
--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
--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
--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
--volume-driver string Optional volume driver for the container
--volumes-from list Mount volumes from the specified container(s)
-w, --workdir string Working directory inside the container
1.3. 选项
选项, 简写 | 数据类型 | 默认值 | 描述 | |||
---|---|---|---|---|---|---|
--add-host | list | - | 在容器内添加一条主机名和 IP 的对应关系(通过 /etc/hosts ) | |||
-a, --attach=[] | list | - | 将标准输入、标准输出、标准错误绑定到容器 | |||
--blkio-weight | uint16 | 0 | 容器读写块设备的 IO 心梗权重,范围是 10 ~ 1000,默认为 0 禁用限制 | |||
--blkio-weight-device | list | [] | 指定个块设备的 IO 权重,格式 [DEVICE:WEEIGHT] 默认 [] 不指定 | |||
--cap-add | list | - | 增加 Linux capabilities 安全能力,设置容器中使用的 cgroups 的特定 capablity,若设置为 all 则使用所有的 capablity | |||
--cap-drop | list | - | 移除 Linux capabilities 安全能力,从容器中删除 cgroup 的特定 capablity | |||
--cgroup-parent | string | - | 容器 cgroups 限制的创建路径 | |||
--cgroupns | string | '' | API 1.41+ 为容器配置 Cgroup 命名空间,可配置 host 或private。host Run the container in the Docker host's cgroup namespace。private Run the container in its own private cgroup namespace。'' Use the cgroup namespace as configured by the。default-cgroupns-mode option on the daemon (default) |
|||
--cidfile | string | - | 设置 cid 文件路径,cid 文件中存储着所创建容器的 ID | |||
--cpu-period | int | - | 限制容器在 CFS 调度器下 CPU 占用时间片 | |||
--cpu-quota | int | - | 限制容器在 CFS 调度器下 CPU 配额 | |||
--cpu-rt-period | int | - | API 1.25+ Limit CPU real-time period in microseconds |
|||
--cpu-rt-runtime | int | - | API 1.25+ Limit CPU real-time runtime in microseconds |
|||
-c, --cpu-shares | int | - | 允许容器使用的 CPU 资源(相对权重) | |||
--cpus | decimal | - | API 1.25+ 在多核 CPU 中设置要运行容器的核心数 |
|||
--cpuset | decimal | - | 在多核 CPU 中设置要运行容器的核心数,新版本使用 --cpus 参数 | |||
--cpuset-cpus | string | - | 配置容器使用那些 CPU 核心 (0-3, 0,1) | |||
--cpuset-mems | string | - | NUMA 架构下使用哪些核的内存 (0-3, 0,1) | |||
--device | list | - | 映射宿主机上的设备到容器中,格式为<主机设备>:<容器设备> | |||
--device-cgroup-rule | list | - | Add a rule to the cgroup allowed devices list | |||
--device-read-bps | list | [] | 挂载设备的数据读带宽(单位bps)限制 | |||
--device-read-iops | list | [] | 挂载设备的数据读 IOPS (单位io/s) 限制 | |||
--device-write-bps | list | [] | 挂载设备的数据写带宽(单位bps)限制 | |||
--device-write-iops | list | [] | 挂载设备的数据写 IOPS(单位io/s)限制 | |||
--disable-content-trust | bool | true | Skip image verification (default true) | |||
--dns | list | - | 设置 /etc/resolv.conf 中 nameserver 配置 | |||
--dns-option | list | - | 设置 /etc/resolv.conf 中 option 配置 | |||
--dns-search | list | - | 设置 /etc/resolv.conf 中 search 配置 | |||
--domainname | string | - | Container NIS domain name | |||
--detach-keys | string | - | 从 attache 模式退出的快捷键,新版本已移除 | |||
-d,--detach | bool | false | 是否在后台运行容器,新版本已移除 | |||
--entrypoint | string | - | 覆盖 Dockerfile 构建镜像时的默认 ENTRYPOINT 配置 | |||
-e, --env | list | - | 设置容器内的 ENV 环境变量 | |||
--env-file | list | - | 读取一个文件来设置容器的环境变量 | |||
--expose | list | - | 声明一个或一段端口范围,和 Dockerfile 中 EXPOSE 类似,只是声明不会暴露,暴露需要使用 -p 选项。 | |||
--gpus | gpu-request | - | API 1.40+ 将 GPU 设备添加到容器('all'可以添加所有宿主机的 GPU) |
|||
--group-add | list | - | Add additional groups to join | |||
--health-cmd | string | - | 指定容器健康检查的命令 | |||
--health-interval | duration | 0s | 2次健康检查之间的时间间隔 (单位:ms | s | m | h) (default 0s) |
--health-retries | int | - | 连续出现多少次健康检查失败后,判定服务运行异常 | |||
--health-start-period | duration | 0s | API 1.29+ 开始运行健康检查命令前等待容器启动的时间 (单位:ms |
s | m | h) (default 0s) |
--health-timeout | duration | 0s | 健康检查运行的最大时间 (单位:ms | s | m | h) (default 0s) |
--help | - | - | 显示使用帮助 | |||
-h, --hostname= | string | - | 设置容器主机名, | |||
--init | - | - | API 1.25+ 在容器内运行一个初始化程序,以转发信号并获取进程 |
|||
-i, --interactive | bool | false | 激活标准输入 STDIN,即使未与容器连接,也维持标准输入存在 | |||
--ip | string | - | 配置容器的 IPV4 地址 (例如: 172.30.100.104) | |||
--ip6 | string | - | 配置容器的 IPv6 地址 (例如: 2001:db8::33) | |||
--ipc | string | - | 使用 IPC 模式,容器的 IPC 命令空间可以为其他容器或主机 | |||
--isolation | string | - | 容器使用隔离机制 | |||
--kernel-memory | bytes | - | 内核 Kernel 内存限制, | |||
-l, --label | list | - | 给容器设置 label 元数据 | |||
--label-file | list | - | 通过按照行读取文件来给容器设置 label 元数据 | |||
--link | list | - | 链接到其他容器,格式 <容器名称>:<别名> | |||
--link-local-ip | list | - | Container IPv4/IPv6 link-local addresses | |||
--log-driver | string | - | 为容器指定日志驱动,可选:json-file/syslog/journald/gelf/fluentd/awslogs/splunk/etwlogs/gcplogs/none | |||
--log-opt | list | - | 传递给日志驱动的选项 | |||
--lxc-conf | - | - | 若使用 LXC 驱动则可设置 LXC 选项配置,新版本已经废弃 | |||
--mac-address | string | - | 指定容器的 MAC 地址 (例如: 92:d0:c6:0a:29:33) | |||
-m, --memory | bytes | - | 限制容器使用内存(单位:b、k、m 或 g) | |||
--memory-reservation | bytes | - | 内存使用的软限制,但是当系统中内存不足时,容器会被强制限制内存为指定的值 | |||
--memory-swap | bytes | - | 限制容器中使用 SWAP 内存的大小,设置为 '-1' 时为不限制 | |||
--memory-swappiness | int | -1 | 调整容器的 swappiness 参数 (0 to 100) (default -1) | |||
--mount | - | - | 挂载一个宿主机文件系统到容器中 | |||
--name | string | - | 设置容器名称 | |||
--net | - | - | 设置容器网络模式,可选:bridge、none、其他容器网络、host网络、或其他网络。新版本已废弃 | |||
--network | network | - | 将一个容器和网络进行连接 | |||
--network-alias | list | - | 容器在网络中的别名 | |||
--no-healthcheck | - | - | Disable any container-specified HEALTHCHECK | |||
--oom-kill-disable | - | - | 禁用 OOM Killer | |||
--oom-score-adj | int | - | 调整容器 OOM 时的参数 (-1000 to 1000) | |||
--pid | string | - | 指定一个 PID 命名空间给该容器使用 | |||
--pids-limit | int | - | 调整容器的 pid 炼制,设置为 -1 为不限制 | |||
--platform | string | - | API 1.32+ Set platform if server is multi-platform capable |
|||
--privileged | bool | false | 为容器提供扩展权限,可以在容器内部使用主机的所有linux内核功能,相当于容器能获取到宿主机最高的权限 | |||
-p, --publish | list | - | 将容器内的端口映射到宿主机上,可以多次指定 | |||
-P, --publish-all | - | false | 将 exposed 中声明的端口全部映射到宿主机上的随机端口 | |||
--read-only | bool | - | 是否容器容器的文件系统只读 | |||
--restart | string | no | 当容器退出时指定重启的策略,可选:no、on-failure[:max-retry]、always、unless-stopped等 | |||
--rm | - | - | 当容器退出时自动删除该容器,不能和 -d 同时使用 | |||
--runtime | string | - | 指定容器运行时 | |||
--security-opt | list | - | 设置 SELinux、AppArmor选项,指定一些安全的参数包括权限、安全能力、apparmor 等 | |||
--shm-size | bytes | - | 设置 /dev/shm 大小 | |||
--stop-signal | string | SIGTERM | 停止容器的 Signal (default "SIGTERM") | |||
--stop-timeout | int | - | API 1.25+ 停止一个容器的超时时间 (单位: 秒) |
|||
--storage-opt | list | - | 配置容器的存储驱动选项 | |||
--sysctl | map | [] | 系统 Sysctl 选项 (default map[]) | |||
--tmpfs | list | - | 挂载临时文件系统 tmpfs 到容器中 | |||
-t, --tty | bool | false | 是否分配一个 TTY 伪终端给容器,以便可以连接登录到容器中 | |||
--ulimit | ulimit | [] | 设置容器的 ulimit 参数来限制最大打开文件数量、进程数量等 | |||
-u, --user | string | - | 设置容器运行时要使用的 Linux 用户账户或UID(格式: |
|||
--userns | string | - | 为容器设置 USER 命名空间 | |||
--uts | string | - | 为容器设置 UTS 命名空间 | |||
-v, --volume | list | - | 挂载数据卷,设置要与主机共享的目录,不将文件保存到容器而是直接保存到主机,在主机目录后添加:ro与:rw进行读写设置,默认未:rw。 | |||
--volume-driver | string | - | 挂载文件卷驱动类型 | |||
--volumes-from | list | - | 挂载数据卷容器,设置格式未<容器名称,id>:<:ro, :rw>,默认读写设置遵从-v选项的设置 | |||
-w, --workdir | string | - | 设置容器内的工作目录,覆盖 Dockerfile 中指定的 WORKDIR |
1.4. 示例
1.4.1. 创建并启动一个容器
$ docker create -t -i fedora bash
6d8af538ec541dd581ebc2a24153a28329acb5268abe5ef868c1f1a261221752
$ docker start -a -i 6d8af538ec5
bash-4.2#
1.4.2. 挂载存储到容器中
从 v1.4.0 开始,容器卷可以在 docker create 阶段被初始化配置(也可以在 docker run 时初始化)。
例如,可以创建一个数据容器,然后在另外一个容器中使用它:
$ docker create -v /data --name data ubuntu
240633dfbb98128fa77473d3d9018f6123b99c454b3251427ae190a7d951ad57
$ docker run --rm --volumes-from data ubuntu ls -la /data
total 8
drwxr-xr-x 2 root root 4096 Dec 5 04:10 .
drwxr-xr-x 48 root root 4096 Dec 5 04:11 ..
当然也可以直接挂载宿主机的存储使用
$ docker create -v /home/docker:/docker --name docker ubuntu
9aa88c08f319cd1e4515c3c46b0de7cc9aa75e878357b1e96f91e2c773029f03
$ docker run --rm --volumes-from docker ubuntu ls -la /docker
total 20
drwxr-sr-x 5 1000 staff 180 Dec 5 04:00 .
drwxr-xr-x 48 root root 4096 Dec 5 04:13 ..
-rw-rw-r-- 1 1000 staff 3833 Dec 5 04:01 .ash_history
-rw-r--r-- 1 1000 staff 446 Nov 28 11:51 .ashrc
-rw-r--r-- 1 1000 staff 25 Dec 5 04:00 .gitconfig
drwxr-sr-x 3 1000 staff 60 Dec 1 03:28 .local
-rw-r--r-- 1 1000 staff 920 Nov 28 11:51 .profile
drwx--S--- 2 1000 staff 460 Dec 5 00:51 .ssh
drwxr-xr-x 32 1000 staff 1140 Dec 5 04:01 docker
1.5. 参考
https://docs.docker.com/engine/reference/commandline/create/