Docker在隔离的容器中运行进程。容器是运行在主机上的进程。主机可以是本地的,也可以是远程的。当一个操作员执行docker run时,运行的容器进程是隔离的,因为它有自己的文件系统,自己的网络,自己独立于主机的进程树。

一般形式

基本的docker run命令是这样的:一般形式

  1. $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

docker run命令必须指定 要从中派生容器的IMAGE。图像开发人员可以定义与以下内容有关的图像默认值:

  • 独立运行或前台运行
  • 容器识别
  • 网络设置
  • CPU和内存的运行时限制

使用,docker run [OPTIONS]操作员可以添加或覆盖开发人员设置的图像默认设置。此外,操作员可以覆盖Docker运行时本身设置的几乎所有默认设置。操作员具有覆盖映像和Docker运行时默认值的能力,这就是为什么run具有比其他任何docker命令更多的选项的原因 。

docker run命令首先creates是在指定图像上的可写容器层,然后starts使用指定命令。也就是说, docker run相当于API /containers/create,然后 /containers/(id)/start。使用可以重新启动已停止的容器,使其之前的所有更改保持不变docker start。请参阅docker ps -a以查看所有容器的列表。
docker run命令可与结合使用docker commit更改容器运行的命令docker runDocker运行参考中还有关于的其他详细信息。
有关将容器连接到网络的信息,请参阅Docker网络概述
有关此命令的示例用法,请参阅下面的示例部分

选项

名称,速记 默认 描述
--add-host 添加自定义主机到IP的映射(host:ip)
--attach , -a 附加到STDIN,STDOUT或STDERR
--blkio-weight 块IO(相对权重),介于10到1000之间,或者为0禁用(默认为0)
--blkio-weight-device 块IO重量(相对设备重量)
--cap-add 添加Linux功能
--cap-drop 放弃Linux功能
--cgroup-parent 容器的可选父cgroup
--cgroupns API 1.41以上
要使用(host | private)’host’的Cgroup命名空间:在Docker主机的cgroup命名空间’private’中运行容器:在其自己的私有cgroup命名空间中运行容器’’:使用由default-cgroupns-配置的cgroup命名空间守护程序上的mode选项(默认)
--cidfile 将容器ID写入文件
--cpu-count CPU数量(仅Windows)
--cpu-percent CPU百分比(仅Windows)
--cpu-period 限制CPU CFS(完全公平的调度程序)期限
--cpu-quota 限制CPU CFS(完全公平的调度程序)配额
--cpu-rt-period API 1.25以上
限制CPU实时时间(以微秒为单位)
--cpu-rt-runtime API 1.25以上
限制CPU实时运行时间(以微秒为单位)
--cpu-shares , -c CPU份额(相对重量)
--cpus API 1.25以上
CPU数量
--cpuset-cpus 允许执行的CPU(0-3,0,1)
--cpuset-mems 允许执行的MEM(0-3,0,1)
--detach , -d 在后台运行容器并打印容器ID
--detach-keys 覆盖分离容器的键序列
--device 将主机设备添加到容器
--device-cgroup-rule 将规则添加到cgroup允许的设备列表中
--device-read-bps 限制从设备读取的速率(每秒字节数)
--device-read-iops 限制从设备读取的速率(每秒IO)
--device-write-bps 限制对设备的写入速率(每秒字节数)
--device-write-iops 限制对设备的写入速率(每秒IO)
--disable-content-trust true 跳过图像验证
--dns 设置自定义DNS服务器
--dns-opt 设定DNS选项
--dns-option 设定DNS选项
--dns-search 设置自定义DNS搜索域
--domainname 容器NIS域名
--entrypoint 覆盖图像的默认ENTRYPOINT
--env , -e 设置环境变量
--env-file 读入环境变量文件
--expose 公开一个或多个端口
--gpus API 1.40+
要添加到容器中的GPU设备(“全部”通过所有GPU)
--group-add 添加其他群组即可加入
--health-cmd 运行命令以检查运行状况
--health-interval 运行检查之间的时间(ms | s | m | h)(默认为0s)
--health-retries 连续失败需要报告不健康
--health-start-period API 1.29+
开始运行状况重试倒计时之前,容器初始化的开始时间(毫秒|秒|米|小时)(默认为0秒)
--health-timeout 允许执行一次检查的最大时间(ms | s | m | h)(默认为0s)
--help 打印用量
--hostname , -h 容器主机名
--init API 1.25以上
在容器内运行一个初始化程序,以转发信号并获取进程
--interactive , -i 即使未连接STDIN也保持打开状态
--io-maxbandwidth 系统驱动器的最大IO带宽限制(仅Windows)
--io-maxiops 系统驱动器的最大IOps限制(仅Windows)
--ip IPv4地址(例如172.30.100.104)
--ip6 IPv6地址(例如2001:db8 :: 33)
--ipc 使用的IPC模式
--isolation 集装箱隔离技术
--kernel-memory 内核内存限制
--label , -l 在容器上设置元数据
--label-file 读入行分隔的标签文件
--link 将链接添加到另一个容器
--link-local-ip 容器IPv4 / IPv6链接本地地址
--log-driver 容器的日志记录驱动程序
--log-opt 日志驱动程序选项
--mac-address 容器MAC地址(例如92:d0:c6:0a:29:33)
--memory , -m 内存限制
--memory-reservation 内存软限制
--memory-swap 交换限制等于内存加交换:“-1”以启用无限交换
--memory-swappiness -1 调整容器内存交换(0到100)
--mount 将文件系统挂载附加到容器
--name 为容器分配一个名称
--net 将容器连接到网络
--net-alias 为容器添加网络范围的别名
--network 将容器连接到网络
--network-alias 为容器添加网络范围的别名
--no-healthcheck 禁用任何容器指定的健康检查
--oom-kill-disable 禁用OOM杀手
--oom-score-adj 调台主持人的OOM首选项(-1000至1000)
--pid 使用的PID名称空间
--pids-limit 调音容器pids限制(将-1设置为无限)
--platform API 1.32+
如果服务器支持多平台,则设置平台
--privileged 赋予此容器扩展的特权
--publish , -p 将容器的端口发布到主机
--publish-all , -P 将所有公开的端口发布到随机端口
--pull missing 在运行之前拉出图像(“总是” |“缺少” |“从不”)
--read-only 将容器的根文件系统挂载为只读
--restart no 容器退出时重新启动策略以应用
--rm 退出时自动删除容器
--runtime 用于此容器的运行时
--security-opt 安全选项
--shm-size / dev / shm的大小
--sig-proxy true 代理接收到该过程的信号
--stop-signal SIGTERM 停止容器的信号
--stop-timeout API 1.25以上
停止容器的超时时间(以秒为单位)
--storage-opt 容器的存储驱动程序选项
--sysctl Sysctl选项
--tmpfs 挂载tmpfs目录
--tty , -t 分配伪TTY
--ulimit Ulimit选项
--user , -u 用户名或UID(格式:<名称| uid> [:<组| gid>])
--userns 要使用的用户名称空间
--uts 使用的UTS名称空间
--volume , -v 绑定挂载卷
--volume-driver 容器的可选音量驱动器
--volumes-from 从指定的容器装载卷
--workdir , -w 容器内的工作目录

例子

分配名称并分配-TTY (—name, -it)

  1. $ docker run --name test -it debian
  2. root@d6c0fe130dba:/# exit 13
  3. $ echo $?
  4. 13
  5. $ docker ps -a | grep test
  6. d6c0fe130dba debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test

本示例运行一个test使用debian:latest 图像命名的容器。的-it指示多克尔分配一个伪TTY连接到所述容器的stdin; bash在容器中创建一个交互式外壳。在此示例中,bash通过输入退出外壳程序 exit 13。此退出代码将传递给的调用者 docker run,并记录在test容器的元数据中。

设置工作目录(-w)

  1. $ docker run -w /path/to/dir/ -i -t ubuntu pwd

-w让所执行的命令目录里面给出,这里 /path/to/dir/。如果路径不存在,则会在容器内创建该路径。

docker run 的常用命令

用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

  1. docker run —name mynginx -d nginx:latest

使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。

  1. docker run -P -d nginx:latest

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

  1. docker run -p 80:80 -v /data:/data -d nginx:latest

绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。

  1. $ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

  1. test@test:~$ docker run -it nginx:latest /bin/bash
  2. root@b8573233d675:/#