一、新建容器
1. 创建容器
创建容器之☞ | create命令与容器运行模式相关的选项 |
命令 |
描述 |
-a, --attach=[] |
是否绑定到标准输入、输出和错误 |
-d,--detach=true|false |
是否在后台运行容器,默认为否 |
--detach-key="" |
从 attach 模式退出的快捷键 |
--encrypoint="" |
镜像存在入口命令时,覆盖为新的命令 |
--expose=[] |
指定容器会暴露出来的端口或端口范围 |
--group-add=[] |
运行容器的用户组 |
-i, --interactive=true|fasle |
保持标准输入打开,默认为 false |
--ipc="" |
容器 IPC 命名空间,可以为其他容器或主机 |
--isolation="default" |
容器使用的隔离机制 |
--log-driver="json-file" |
指定容器的日志驱动类型,可以为 json-file、syslog、journald、gelf、fluented、awslogs、 splunk、etwlogs、gcplogs 或 none |
--log-opt=[] |
传递给日志的驱动选项 |
--net="bridge" |
指定容器的网络模式,包括 bridge、none、其他容器内网络、host 的网络或某个现有网络等 |
--net-alias=[] |
容器在网络中的别名 |
-P,--publish-all=true|false |
通过 NAT 机制将容器标记暴露的端口自动映射到本地主机的临时端口 |
-p, --publish-all=true|false |
指定如何映射到本地主机端口,例如 -p 11234-12234:1234-2234 |
--pid=host |
容器的 PID 命名空间 |
--userns="" |
启用 userns-remap 时配置用户命名空间的模式 |
--uts=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="" |
挂载文件卷的驱动类型 |
--volume-from=[] |
从其他容器挂载卷 |
-w, --workdir="" |
容器内的默认工作目录 |
创建容器之☞ |
create命令与容器环境和配置相关的选项 |
命令 |
描述 |
--add-host=[] |
在容器内添加一个主机名到 IP 地址的映射关系(通过 /etc/hosts 文件) |
--device=[] |
映射物理机上的设备到容器内 |
--dns-search=[] |
DNS 搜索域 |
--dns-opt=[] |
自定义的 DNS 选项 |
--dns=[] |
自定义的 DNS 服务器 |
-e, --env=[] |
指定容器内环境变量 |
--env-file=[] |
从文件中读取环境变量到容器内 |
-h, --hostname="" |
指定容器内的主机名 |
--ip="" |
指定容器的 IPv4 地址 |
--ip6="" |
指定容器的 IPv6 地址 |
--link=[<name or id>:alias] |
链接到其他容器 |
--mac-address="" |
指定容器的 mac 地址 |
--name="" |
指定容器的别名 |
创建容器之☞ | create命令与容器资源限制和安全保护相关的选项 |
命令 |
描述 |
--blkio-weight=10~100 |
容器读写块设备的 I/O 性能权重,默认为0 |
--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 次数为单位)限制 |
--kernel-memory="" |
限制容器使用内核的内存大小,单位可以是 b、k、m 或 g |
-m, --memory="" |
限制容器内应用使用的内存,单位可以是 b、k、m 或 g |
--memory-reservation="" |
当系统中内存过低时,容器会被强制限制内存到给定值,默认情况下等于内存限制值 |
--memory-swap="LIMIT" |
限制容器使用内存和交换区的总大小 |
--oom-kill-disable=true|false |
内存耗尽(Out-Of-Memory)时是杀死容器 |
--om-score-adj="" |
调整容器的内存耗尽参数 |
--pids-limit="" |
限制容器的 pid 个数 |
--privileged=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="" |
指定在容器内执行命令的用户信息 |
-ulimit=[] |
通过 ulimit 来限制最大文件数、最大进程数等 |
-l,--label=[] |
以键值对方式指定容器的标签信息 |
--label-file=[] |
从文件中读取标签信息 |
2. 启动容器
3. 新建并启动容器
当利用 docker run 来创建并启动容器时, Docker 在后台运行标准操作包括:
-
检查本地是否存在指定的镜像,不存在就从公有仓库下载;
-
利用镜像创建一个容器,并启动该容器;
-
分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;
-
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;
-
从网桥的地址池配置一个 IP 地址给容器;
-
执行用户指定的应用程序;
-
执行完毕后容器被自动终止
-
-t 选项让 Dokcer 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
-
-i 则让容器的标准输入保持打开
-
exit 或 Ctrl+D 退出
-
对于所创建的 bash 容器,当时用 exit 命令退出之后,容器就自动处于退出(Exited)状态了。因为对 Docker 容器来说,当运行的应用退出后,容器也就没有继续运行的必要了。
-
docker run 会出错,因为命令无法正常执行容器会直接退出,此时可以查看退出的错误代码:
-
125:Docker daemon 执行出错,例如制定了不支持的 Docker 命令参数
-
126:所指定命令无法执行,例如权限出错;
-
127:容器内命令无法找到
-
4. 守护态运行
更多时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。可以通过添加 -d 参数来实现
二、终止容器
-
使用 docker stop 终止一个容器,会首先发送 SIGTERM 信号,等待一段超时时间(默认为10秒)后,再发送 SIGKILL 信号来终止容器
-
docker kill 命令会直接发送 SIGKILL 信号来强行终止容器
-
当 Docker 容器中指定的应用终结时,容器也会自动终止
-
docker ps-qa 命令会看到所有容器的 ID
-
docker start CONTAINER_ID 启动容器
-
docker restart CONTAINER_ID 会将一个运行态的容器重启
三、进入容器
1. attach 命令,Docker自带命令
-
格式:docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
-
--detach-keys[=[]]: 指定退出 attach 模式的快捷键序列,默认是 CTRL-p CTRL-q;
-
--no-stdin=true|false: 是否关闭标准输入,默认是保持打开;
-
--sig-proxy=true|false: 是否代理收到的系统信号给应用进程,默认为 true
当多个窗口同时用 attach 命令连到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
2. exec 命令,可以在容器内直接执行任意命令
-
docker exec [-d | --detach] ....
-
-i, --interactive=true|false: 打开标准输入接受用户输入命令,默认为 false;
-
--privileged=true|false: 是否给执行命令以最高权限,默认为 false;
-
-t, --tty=true|false: 分配伪终端,默认 false;
-
-u, --user="": 执行命令的用户名或ID
通过指定 -it 参数来保持标准输入打开,并且分配一个伪终端。通过 exec 命令对容器执行操作是最为推荐的方式。
四、删除容器
使用 docker rm 命令来删除处于终止或退出状态的容器
-
-f, --force=false: 是否强行终止并删除一个运行中的容器;
-
-l, --link=false: 删除容器的连接,但保留容器;
-
-v, --volumes=false: 删除容器挂载的数据卷。
五、容器导出和导入
-
导出:docker export
-
导入:docker import
docker load 命令导入镜像存储文件到本地镜像库, docker import 命令导入一个容器快照到本地镜像库。
容器快照文件将丢弃所有的记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。从容器快照文件导入时可以重新指定标签等元数据信息。