使用dockers [container] create
创建一个容器
新建的容器处于停止状态的时候可以使用docker [container] start
命令来启动它。
由于容器是整个Docker技术栈的核心,create命令和后续的run命令支持的选项都十分复杂。选项主要包括以下几个大类:与容器运行模式相关、与容器环境配置相关、与容器资源限制和安全保护相关。
选项 | 说明 |
---|---|
-a, --attach=[] | 是否绑定到标准输入、输出和错误 |
-d, --detach=true|false | 是否在后台运行容器,默认为false |
-detach-keys=“” | 从attach模式推出的快捷键 |
--entrypoint=“” | 镜像存在入口命令时,覆盖为新的命令 |
--expose=[] | 指定镜像会暴露出来的端口或端口范围 |
--group-add=[] | 运行容器的用户组 |
-i, --interactive=true|false | 保持标准输入打开,默认为false |
--ipc=“” | 容器IPC命名空间,可以为其他容器或主机 |
--isolation=“default” | 容器使用的隔离机制 |
--log-drive=“json-file” | 指定容器的日志驱动类型,可以为json-file、syslog、journald、gelf、fluentd、awslogs、splunk、etwlogs、gcplogs或none |
--log-opt=[] | 传递给日志驱动的选项 |
--net=“bridge” | 指定容器网络模式,包括bridge、none、其他容器内网络、host的网络或某个现有的网络等 |
--net-alias=[] | 容器在网络中的别名 |
-P, --published-all=true|false | 通过NAT机制将容器标记暴露的端口自动映射到本地主机的临时端口 |
-p, -publish=[] | 指定如何映射到本地主机端口,例如:-p 11234 - 12234:1234-2234 |
--pid=host | 容器的UTS命名空间 |
--restart=“no” | 容器的重启策略,包括no、on-failure[:max-retry]、always、unless-stopped等 |
--rm=true|false | 容器推出后是否自动删除,不能跟-d同时使用 |
-t, --tty=true|false | 是否分配一个伪终端,默认为false |
–tmpfs=[] | 挂载临时文件系统到容器 |
-v, --volume[=[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]] | 挂载主机上的文件卷到容器内 |
--volume-driver=“” | 挂载文件卷的驱动类型 |
--volumes-from=[] | 从其他容器挂载卷 |
-w, --workdir=“” | 容器内的默认工作目录 |
选项 | 说明 |
---|---|
--add-host=[] | 在容器内添加一个主机名到IP地址的映射关系(通过/etc/hosts文件) |
--device=[] | 映射物理机上的设备到容器内 |
--dns-research=[] | DNS搜索域 |
--dns-opt=[] | 自定义的dns选项 |
-e, --env=[] | 指定容器内环境变量 |
--env-file=[] | 从文件中读取环境变量到容器内 |
-h, --hostname=“” | 指定容器内的主机名 |
--ip=“” | 指定容器内的IPv4地址 |
--ip6=“” | 指定容器内的IPv6地址 |
--link=[ | 链接到其他容器 |
--link-local-ip=[]: | 容器本地链接地址列表 |
--mac-address=“” | 指定容器的Mac地址 |
--name=“” | 指定容器的别名 |
选项 | 说明 |
---|---|
--blkio-weight=10~1000 | 容器读写块设备的I/O性能权重,默认为10 |
--blkio-weight-device=[DEVICE_NAME:WEIGHT] | 指定各个块设备的I/O性能权重 |
--cpu-shares=0 | 允许容器使用CPU资源的相对权重,默认一个容器能用满一个核的CPU |
--cap-add=[] | 增加容器Linux指定安全能力 |
--cap-drop=[] | 移除容器的Linux指定安全能力 |
--cgroup-parent=“” | 容器cgroups限制的创建路径 |
--cidfile=“” | 指定容器的进程ID号写到文件 |
--cpu-period=0 | 限制容器在CFS调度器下的CPU占用时间片 |
--cpuset-cpus=“” | 限制容器能使用哪些CPU核心 |
--cpuset-mems=“” | NUMA架构下使用哪些核心的内存 |
--cpu-quota=0 | 限制容器在CFS调度器下的CPU配额 |
--device-read-bps=[] | 挂载设备的读吞吐率(以bps为单位)限制 |
--device-write-bps=[] | 挂载设备的写吞吐率(以bps为单位)限制 |
--device-read-iops=[] | 挂载设备的读速率(以每秒i/o次数为单位)限制 |
--device-write-iops=[] | 挂载设备的写速率(以每秒i/o次数为单位)限制 |
--health-cmd=“” | 指定检查容器健康状态的命令 |
--health-interval=0s | 执行健康检查的间隔时间,单位可以为ms、s、m或h |
--health-retries=int | 健康检查失败重试次数,超过则认为不健康 |
--health-start-period=0s | 容器启动后进行健康检查的等待时间,单位可以为ms、s、m或h |
--health-timeout=0s | 健康检查执行超时,单位可以为ms、s、m或h |
--no-healthcheck=true|false | 是否禁用健康检查 |
--init | 在容器中执行一个init进程,来负责响应信号和处理僵尸状态子进程 |
--kernal-memory=“” | 限制容器使用内核的内存大小,单位可以是k、b、m或g |
-m, --memory=“” | 限制容器内应用使用的容器内存,单位可以是k、b、m或g |
--memory-reservation=“” | 当系统中内存过低时,容器会被强制限制内存到给定值,默认情况下等于内存限制值 |
--memory-swap=“LIMIT” | 限制容器内使用内存和交换区的总大小 |
--oom-kill-disable=true|false | 内存耗尽时是否杀死容器 |
--oom-score-adj=“” | 调整容器内存耗尽参数 |
--pids-limit=“” | 限制容器的pid个数 |
--priviledged=true|false | 是否给容器高权限,这意味着容器内应用将不再受权限的限制,一般不推荐 |
--read-only=true|false | 是否让文件内的系统只读 |
--security-opt=[] | 指定一些安全参数,包括权限、安全能力、apparmor等 |
--stop-signal=SIGTERM | 指定停止容器的系统信号 |
--shm-size=“” | /dev/shm的大小 |
--sig-proxy=true|false | 是否代理收到的信号给应用,默认为true,不能代理SIGCHLD、SIGSTOP和SIGKILL信号 |
--memory-swappiness=“0~100” | 调整容器内存交换区参数 |
-u, --user=“” | 指定在容器内执行命令的用户信息 |
--userns=“” | 指定用户命名空间 |
--ulimit=[] | 通过ulimit来限制最大文件数、最大进程数等 |
其他选项还包括:
-l, --lable=[]:以键值对的方式指定容器的标签信息
–lable-file=[]:从文件中读取标签信息
使用docker [container] start
来启动一个已经创建的容器
使用docker [container] run
等价于先执行create命令再执行start命令
这个测试在上面那个图中自己看啦~~~~~~~~~~
Dockers在后台运行的标准操作包括:
对于所创建的bash容器,在执行exit命令退出进程后容器也就退出了。
可以使用docker container wait CONTAINER[CONTAINER...]
子命令来等待容器退出,并打印退出返回结果。
某些时候,执行docker [container] run
时因为命令无法正常执行,可能会出现错误而直接推出,常见的错误代码:
很多时候需要让Docker容器在后台以守护态(Deamonized)形式运行,通过-d参数来实现。
获取容器的输出信息,可以通过docker [container] logs
命令
支持的选项包括:
可以使用docker [container] pause CONTAINER[CONTAINER...]
暂停一个在运行中的容器
可以使用docker [container] stop
停止一个在运行中的容器
语法为
docker [container] stop [[-t] --time[=10]] [CONTAINER...]
执行docker container prune
会自动清除掉所有处于停止状态的容器。
还可以通过docker [container] kill
直接发送SIGKILL信号来强行终止容器。
处于终止状态的容器,可以通过docker [container] start
命令来重新启动
docker [container] restart
会将一个运行态的容器先终止,然后再重新启动
docker [container] attach [--detach-keys[=]] [no-stdin] [--sig-proxy[=true]] CONTAINER
docker [container] exec [-d|--detach] [--detach-keys[=[]]] [-i|--interactive] [--priviledged] [-t|--tty] [-u|--user=[USER]] CONTAINER COMMAND [ARG...]
可以使用docker [container] rm
命令来删除处于终止或退出状态的容器,命令格式为
docker [container] rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER[CONTAINER...]
注意:docker rm命令只能删除已经处于终止或者退出状态的容器,并不能删除处于运行态的容器,如果要删除处于运行态的容器,可以添加-f参数强制删除或者先stop停止后再删除。
导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker [container] export
命令,该命令的格式为:
docker [container] export [-o|--output[=""]] CONTAINER
-o可以用来指定导出的tar文件名,也可以直接通过重定向来实现。
导出的容器可以通过docker [container] import
命令导入变成镜像,命令的格式为
docker import [-c|--change[=[]]] [-m|-message[=MESSAGE]] file|URL|-[REPOSITORY[:TAG]]
查看容器详情可以使用docker container inspect [OPTIONS] CONTAINER[CONTAINER...]
子命令
包含的信息比较多,这里只截取部分图,以json格式返回
查看容器内进程可以使用docker [container] top [OPTIONS] CONTAINER[CONTAINER...]
子命令
查看统计信息可以使用docker [container] states [OPTIONS] [CONTAINER...]
子命令,会显示CPU、内存、存储、网络等使用情况的统计信息。
支持的选项包括:
container cp
支持在容器和主机之间复制文件。命令格式为docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH | -
支持的选项包括:
container diff
查看容器内文件系统的变更。命令格式为docker [container] diff CONTAINER
container port
命令可以查看容器的端口映射情况。命令格式为docker [container] port CONTAINER [PRIVATE_PORT[/PROTO]]
container update
命令可以更新容器的一些运行时配置,主要是一些资源限制份额。命令的格式为docker [container] update [OPTIONS] CONTAINER[CONTAINER...]
。
支持的选项包括:
-blkio-weight uint16:更新块IO限制,10~1000,默认值为0,代表着无限制;
-cpu-period int:限制CPU的调度器CFS (Completely Fair Schedular) 使用时间,单位为微秒,最小1000;
-cpu-quota int:限制CPU调度器的CFS配额,单位为微秒,最小1000;
-cpu-rt-period int:限制CPU调度器的实时周期,单位为微秒;
-cpu-rt-runtime int:限制CPU调度器的运行时,单位为微秒;
-c, -cpu-shares int:限制CPU的使用份额;
-cpus decimal:限制CPU个数;
-cpuset-cpus string:允许使用的CPU核,如0-3, 0,1;
-cpuset-mems string:允许使用的内存块,如0-3, 0,1;
-kernal memory bytes:限制使用的内存内核;
-m, -memory bytes:限制使用的内存内核;
-memory-reservation bytes:内存软限制;
-memory-swap bytes:内存加上缓存区的限制,-1表示对缓冲区无限制;
-restart string:容器退出后的重启策略。