文前说明
作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。
本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。
1. 概述
- Docker 命令分为 管理命令、镜像命令、容器命令、仓库命令、网络命令、数据卷命令、编排命令 等。
1.1 依附容器(docker attach)
- 命令格式:docker attach [OPTIONS] CONTAINER。
- 允许使用容器 ID 或名称附加到正在运行的容器,查看其正在进行的输出或以交互方式控制它。
- 可以同时连接上同一个容器来共享屏幕(与 screen 命令的 attach 类似)。
- 使用 Ctrl + C 或者 exit 命令退出容器,会使容器停止。可以使用 Ctrl + P,然后使用 Ctrl + Q 退出容器的虚拟终端。
- 官方不推荐 attach 开启了交互模式(使用 -t 参数的容器)的容器,docker attach 的主要功能为查看信息。
操作 |
说明 |
--detach-keys="" |
覆盖键序列分离容器。可以是一个单独的字符 [a-z],也可以是 Ctrl-<value>,<value> 可以是 [a-z]、@、^、[、, 或者 _。 |
--help |
打印帮助信息。 |
--no-stdin=true|false |
不附加输入操作。默认为 false。 |
--sig-proxy=true|false |
代理所有接受到的信号到进程中(仅限非 TTY 模式),SIGCHLD、SIGKILL 和 SIGSTOP 是非代理的,默认为 true。 |
1.2 构建镜像(docker build)

docker build
- 命令格式:docker build [OPTIONS] PATH | URL | -
- 将从路径中指定的目录中读取 Dockerfile 文件,还将该目录中找到的任何其他文件和目录发送到 docker daemon。在 Dockerfile 文件中可以通过 ADD 命令来使用这个目录的内容。
- 将根据当前目录的内容向 docker daemon 发送大量数据。
- 构建由 docker daemon 运行,而不是由 Cli 运行,因此整个上下文(context)都必须传输到 docker daemon。当上下文(context)发送到 docker daemon 时,docker Cli 报告 " sending build context to docker daemon "。
- 当给出原始存档(支持的压缩格式有 " xz "、" bzip2 "、" gzip " 和 " identity "(无压缩)。或单个 Dockerfile 的 URL 时,上下文不直接发送到 docker daemon,在这种情况下,存档根目录下的 Dockerfile 和存档的其余部分将用作构建的上下文(context)。
- 当 Git 存储库设置为 URL 时,该存储库将在本地克隆(git clone),然后作为上下文发送(context)。
- docker build 命令会反复的执行多个命令。

反复执行多个命令
参数 |
说明 |
--build-arg=[] |
设置镜像创建时的变量。 |
--cpu-shares |
设置 cpu 使用权重。 |
--cpu-period |
限制 CPU CFS 周期。 |
--cpu-quota |
限制 CPU CFS 配额。 |
--cpuset-cpus |
指定使用的 CPU id。 |
--cpuset-mems |
指定使用的内存 id。 |
--disable-content-trust |
忽略校验,默认开启。 |
-f |
指定要使用的 Dockerfile 路径。 |
--force-rm |
设置镜像过程中删除中间容器。 |
--isolation |
使用容器隔离技术。 |
--label=[] |
设置镜像使用的元数据。 |
-m |
设置内存最大值。 |
--memory-swap |
设置 Swap 的最大值为内存 +swap," -1 " 表示不限 swap。 |
--no-cache |
创建镜像的过程不使用缓存。 |
--pull |
尝试去更新镜像的新版本。 |
--quiet, -q |
静默模式,成功后只输出镜像 ID。 |
--rm |
设置镜像成功后删除中间容器。 |
--shm-size |
设置 /dev/shm 的大小,默认值是 64M。 |
--ulimit |
Ulimit 配置。 |
--tag, -t |
镜像的名字及标签,通常 name:tag 或者 name 格式。可以在一次构建中为一个镜像设置多个标签。 |
--network |
默认 default。在构建期间设置 run 指令的网络模式。 |
--help |
帮助信息。 |
--build-arg=variable |
构建参数。例如 --build-arg=http_proxy="http://some.proxy.url"。 |
--compress |
使用 gzip 压缩生成上下文。默认值 false。 |
[root@localhost ~]# docker build -t whenry/fedora-jboss . //标签。
[root@localhost ~]# docker build -f /root/Dockerfile . //指定 Dockerfile。
[root@localhost ~]# docker build github.com/creack/docker-firefox //Git
- 将原始存档发送到 docker daemon,进行解压,在解压后的目录中查找 dev/Dockerfile 文件。
[root@localhost ~]# docker build -f dev/Dockerfile https://10.10.10.1/docker/context.tar.gz
- 在docker daemon 执行 Dockerfile 中的指令前,会对 Dockerfile 进行语法检查,有错误会返回。
[root@localhost ~]# docker build -t test/myapp .
Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD
1.2.1 Dockerfile 语法
FROM
- 指定基础镜像,并且必须是第一条指令。
- 如果不以任何镜像为基础,写为 FROM scratch。
- 同时意味着接下来所写的指令将作为镜像的第一层开始。
- 语法格式为:
- FROM <image>
- FROM <image>:<tag>
- FROM <image>:<digest>
- 其中 <tag> 和 <digest> 是可选项,没有选择,默认值为 latest。
FROM centos:centos7
MAINTAINER
MAINTAINER "XXX CLOUD DEV" <dev@xxx-cloud.com>
LABEL
- 为镜像指定标签。
- 语法格式:
-
LABEL <key>=<value> <key>=<value> <key>=<value> ...。
- 一个 Dockerfile 中可以有多个 LABEL。
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."
- 最好写为一行,换行使用 \ 符号。
- LABEL 会继承基础镜像中的 LABEL,key 相同则值覆盖。
ENV
- 设置环境变量。
- 语法格式:
-
ENV <key> <value>。
- ENV <key>=<value> ...
ENV OVIRT_FQDN localhost
ENV HOST_INSTALL=true
EXPOSE
- 暴露容器运行时的监听端口给外部。
- EXPOSE 并不会使容器访问主机的端口。
- 想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P 参数。
- 语法格式:
EXPOSE 8080 8443
USER
- 启动容器的用户,可以是用户名或 UID。
- 语法格式:
- 如果设置了容器以某个用户运行,那么 RUN、CMD 和 ENTRYPOINT 都会使用这个用户运行。
USER root
ADD
- 复制命令,把文件复制到镜像中。
- 语法格式:
-
ADD <src>... <dest>。
-
ADD ["<src>",... "<dest>"]。
- <src> 可以是一个本地文件或者是一个本地压缩文件,还可以是一个 URL。
- 如果 <src> 为 URL,那么 ADD 类似于 wget 命令。
- <dest> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径。
ADD test relativeDir/
ADD test /relativeDir
ADD http://example.com/foobar /
- 尽量不要把 <scr> 写成一个文件夹,<src> 是文件夹,会复制整个目录的内容,包括文件系统元数据等。
COPY
- 另外一个复制命令。
- 语法格式:
-
COPY <src>... <dest>。
-
COPY ["<src>",... "<dest>"]。
- 与 ADD 的区别在于 COPY 的 <src> 只能是本地文件,其他用法一致。
COPY supervisord.conf /etc/
RUN
- 运行指定的命令。
- 语法格式为:
-
RUN <command>。
- 在 Linux 操作系统上默认 /bin/sh -c。
- 在 Windows 操作系统上默认 cmd /S /C。
-
RUN ["executable", "param1", "param2"]。
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME
RUN ["/bin/bash", "-c", "echo hello"]
- 多行命令不要写多个 RUN,原因是 Dockerfile 中每一个指令都会建立一层。
- 多个 RUN 构建多层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。
- RUN 书写时的换行符是 \。
CMD
- 定义容器启动时执行的命令。
- 语法格式:
-
CMD ["executable","param1","param2"]。
-
CMD ["param1","param2"]。
-
CMD command param1 param2。
CMD [ "sh", "-c", "echo $HOME"]
CMD [ "echo", "$HOME" ]
CMD bash /sdcvm-setup-run.sh
- 参数一定要用双引号("),不能是单引号('),因为参数传递后,Docker 解析的是一个 JSON array。
- RUN 是 构件容器时 执行的命令以及提交执行结果。
- CMD 是 容器启动时 执行的命令,构建时只定义不执行。
ENTRYPOINT
- 容器启动时的默认命令。
- 语法格式:
-
ENTRYPOINT ["executable", "param1", "param2"]。
-
ENTRYPOINT command param1 param2。
- 与 CMD 相同在于只能写一条命令,如果多条命令,那么只有最后一条生效,只在容器启动时执行。
- 与 CMD 不同在于 ENTRYPOINT 不会被运行的 command 覆盖,而 CMD 会。
- 如果在 Dockerfile 中同时写了 ENTRYPOINT 和 CMD,并且 CMD 指令不是一个完整的可执行命令,那么 CMD 指定的内容将会作为 ENTRYPOINT 的参数。
ROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
- 如果在 Dockerfile 中同时写了 ENTRYPOINT 和 CMD,并且 CMD 是一个完整的指令,那么会互相覆盖,在最后的生效。
- 将执行 ls -al,而 top -b 不会执行。
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ls -al
- ENTRYPOINT 和 CMD 不同组合的执行情况。

ENTRYPOINT 和 CMD 的不同组合
VOLUME
- 实现挂载功能,可以将本地文件夹或者其他容器中的文件夹挂在到这个容器中。
- 语法格式:
- ["/data"] 可以是一个 JsonArray ,也可以是多个值。
VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /var/db
- 一般的使用场景为需要持久化存储数据时。容器使用的是 AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失,所以当数据需要持久化时可以使用这个命令。
WORKDIR
- 设置工作目录。
- 语法格式:
-
WORKDIR /path/to/workdir。
- 对 RUN、CMD、ENTRYPOINT、COPY、ADD 生效。不存在则会创建,可以设置多次。
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
- WORKDIR 也可以解析环境变量。
- pwd 的执行结果是 /path/$DIRNAME。
ENV DIRPATH /path
WORKDIR $DIRPATH/$DIRNAME
RUN pwd
ARG
- 定义变量,在 docker build 创建镜像时,使用 --build-arg <varname>=<value> 可以设置变量值。
- 语法格式:
-
ARG <name>[=<default value>]。
- 用户在 build 镜像时指定了一个没有定义在 Dockerfile 中的变量,那么将产生一个 Warning。
[Warning] One or more build-args [varname1] were not consumed.
FROM busybox
ARG user1
ARG user2=someuser
- ARG 定义了默认值,build 镜像时没有指定变量值,会使用这个默认值。
ONBUILD
- 设置只对当前镜像的子镜像生效。
- 语法格式:
- 假设当前镜像为 A,Dockerfile 中添加了ONBUILD RUN ls -al,B 基于 A 镜像构建,ls -al 命令在 B 镜像构建时执行。
ONBUILD RUN ls -al
STOPSIGNAL
HEALTHCHECK
- 容器健康状况检查。
- 语法格式:
-
HEALTHCHECK [OPTIONS] CMD command。
- 在容器内部运行一个命令来检查容器的健康状况。
- CMD 后边命令的返回值决定了本次健康检查是否成功。
- 0: success - 表示容器是健康的。
- 1: unhealthy - 表示容器已经不能工作。
- 2: reserved - 保留值。
-
HEALTHCHECK NONE。
OPTIONS 选项 |
说明 |
--interval=DURATION |
两次检查默认的时间间隔为 30 秒。 |
--timeout=DURATION |
健康检查命令运行超时时长,默认 30 秒。 |
--retries=N |
当连续失败指定次数后,则容器被认为是不健康的,状态为 unhealthy,默认次数是 3。 |
- HEALTHCHECK 命令多次出现,最后一个生效。
HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost/ || exit 1
1.3 提交容器(docker commit)

docker commit
- 命令格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]。
- 把选择的容器提交打包为新的镜像。
- docker commit 命令将容器的可读写层转换为一个只读层。

转换为只读层
参数 |
说明 |
-a, --author string |
提交的镜像作者。 |
-c, --change list |
使用 Dockerfile 指令来创建镜像。(可使用的指令有 CMD、ENTRYPOINT、ENV、EXPOSE、LABEL、ONBUILD、USER、VOLUME、WORKDIR) |
-m, --message string |
提交时的说明文字。 |
-p, --pause |
在 commit 时,将容器暂停。 |
--help |
帮助信息。 |
[root@localhost ~]# docker commit -a "xxx.com" -m "my apache" a404c6c174a2 mymysql:v1
sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057
[root@localhost ~]# docker images mymysql:v1
REPOSITORY TAG IMAGE ID CREATED SIZE
mymysql v1 37af1236adef 15 seconds ago 329 MB
1.4 复制(docker cp)
- 命令格式:
-
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-。
-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH。
- 本地文件系统与容器之间的文件或目录复制。
参数 |
说明 |
-L, --follow-link |
保持源目标中的链接。 |
-a, --archive |
存档模式(复制所有 uid/gid 信息)。 |
--help |
帮助信息。 |
[root@localhost ~]# docker cp sharp_ptolemy:/tmp/foo/myfile.txt /test //从容器到本地
[root@localhost ~]# docker cp /config/. myappcontainer:/etc/my-app.d //从本地到容器
1.5 创建容器(docker create)

docker create
- 命令格式:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]。
- docker create 命令为指定的镜像(image)添加了一个可读写层,构成了一个新的容器,这个容器并没有运行。

添加一个可读写层
常用参数 |
说明 |
-i, --interactive=false |
打开 STDIN,用于控制台交互,通常与 -t 同时使用。 |
-t, --tty=false |
为容器重新分配一个伪输入终端,通常与 -i 同时使用,默认为 false。 |
-u, --user="" |
指定容器的用户。(用户名或者 UID) |
-a, --attach=[] |
登录容器(必须是以 docker run -d 启动的容器),可以选择 STDIN、STDOUT 或者 STDERR。 |
-w, --workdir="" |
指定容器的工作目录。 |
-c, --cpu-shares=0 |
设置容器 CPU 权重,在 CPU 共享场景中使用。 |
-e, --env=[] |
指定环境变量,容器中可以使用该环境变量。 |
-m, --memory="" |
指定容器的内存上限。 |
-P, --publish-all=false |
将所有公开端口发布到随机端口。 |
-p, --publish=[] |
指定容器暴露的端口,默认为 [],端口映射,格式为:主机(宿主)端口:容器端口 |
-h, --hostname="" |
指定容器的主机名。 |
-v, --volume=[] |
给容器挂载存储卷,挂载到容器的某个目录。 |
--volumes-from=[] |
给容器挂载其他容器上的卷,挂载到容器的某个目录。 |
--cap-add=[] |
添加权限。 |
--cap-drop=[] |
删除权限。 |
--cidfile="" |
运行容器后,在指定文件中写入容器 PID 值,一种典型的监控系统用法。 |
--cpuset="" |
设置容器可以使用的 CPU,此参数可以用来容器独占 CPU。 |
--device=[] |
添加主机设备给容器,相当于设备直通。 |
--dns=[] |
指定容器的 dns 服务器。 |
--dns-search=[] |
指定容器的 dns 搜索域名,写入到容器的 /etc/resolv.conf 文件。 |
--entrypoint="" |
覆盖 image 的入口点。 |
--env-file=[] |
指定环境变量文件,文件格式为每行一个环境变量。 |
--expose=[] |
指定容器暴露的端口,即修改镜像的暴露端口。 |
--link=[] |
指定容器间的关联,使用其他容器的 IP、env 等信息。 |
--lxc-conf=[] |
指定容器的配置文件,只有在指定 --exec-driver=lxc 时使用。 |
--name="" |
指定容器名字,后续可以通过名字进行容器管理,links 特性需要使用名字。 |
--net="bridge" |
容器网络设置(bridge:使用 docker daemon 指定的网桥、host:容器使用主机的网络、container:NAME_or_ID:使用其他容器的网络,共享 IP 和 PORT 等网络资源、none:容器使用自己的网络(类似 --net=bridge),但是不进行配置。) |
--privileged=false |
指定容器是否为特权容器,特权容器拥有所有的 capabilities。 |
--restart="no" |
指定容器停止后的重启策略,no:容器退出时不重启、on-failure:容器故障退出(返回值非零)时重启、always:容器退出时总是重启。 |
--rm=false |
指定容器停止后自动删除容器(不支持以 docker run -d 启动的容器)。 |
--sig-proxy=true |
设置由代理接受并处理信号,但是 SIGCHLD、SIGSTOP 和 SIGKILL 不能被代理。 |
--help |
帮助信息。 |
-l, --label list |
在容器上设置元数据(默认值为[])。 |
[root@localhost ~]# docker create --name myrunoob nginx:latest
09b93464c2f75b7b69f83d56a9cfc23ceb50a48a9db7652ee4c27e3e2cb1961f
1.6 运行容器(docker run)

docker run
- 命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]。
- 运行一个新的容器,参数与 create 类似,包含了上述 docker create 中的参数。
- docker run 命令先是利用镜像创建了一个容器,然后运行这个容器。

docker run 命令流程
常用参数 |
说明 |
-d, --detach=false |
后台运行容器,并返回容器 ID。 |
--read-only=true|false |
将容器的根文件系统安装为只读。 |
[root@localhost ~]# docker run --read-only --tmpfs /run --tmpfs /tmp -i -t fedora /bin/bash
退出状态
- Docker 运行的退出代码提供了有关容器为什么运行失败或为什么退出的信息。
- 当 Docker 用非零代码运行 exit 时,exit 代码遵循 chroot 标准。
退出码 |
说明 |
125 |
错误发生在 Docker 守护进程本身。 |
126 |
容器命令执行失败(例如没有权限)。 |
127 |
容器命令不能找到。 |
1.7 容器变化(docker diff)
- 命令格式:docker diff CONTAINER。
- 检查容器文件系统上的更改,并支持快速的共享环境。
- A(Add)增加。
- D(Delete)删除。
- C(Change)修改。
- 可以使用完整或缩短的容器 ID 或使用 docker run --name 选项设置的容器名称。
[root@localhost ~]# docker diff 1fdfd1f54c1b
C /dev
C /dev/console
C /dev/core
C /dev/stdout
C /dev/fd
C /dev/ptmx
C /dev/stderr
C /dev/stdin
C /run
A /run/nginx.pid
C /var/lib/nginx/tmp
A /var/lib/nginx/tmp/client_body
A /var/lib/nginx/tmp/fastcgi
A /var/lib/nginx/tmp/proxy
A /var/lib/nginx/tmp/scgi
A /var/lib/nginx/tmp/uwsgi
C /var/log/nginx
A /var/log/nginx/access.log
A /var/log/nginx/error.log
- docker diff 的运行与容器状态无关,只显示文件差异。
1.8 容器事件(docker events)
- 命令格式:docker events [OPTIONS]
- 实时的输出 Docker 服务端事件、包括容器的创建、启动、关闭等。
参数 |
说明 |
-f, --filter filter |
根据条件过滤事件。 |
--format string |
使用给定的模板格式化输出。 |
--help |
帮助信息。 |
--since string |
从指定的时间戳后显示所有事件。 |
--until string |
流水时间显示到指定的时间为止。 |
filter
- 容器(container=<name or id>)
- 事件(event=<event action>)
- 镜像(image=<tag or id>)
- 插件(试验性的)(plugin=<name or id>)
- 标签 (label=<key> or label=<key>=<value>)
- 类型 (type=<container or image or volume or network or daemon>)
- 存储卷(volume=<name or id>)
- 网络(network=<name or id>)
- 守护进程(daemon=<name or id>)
[root@localhost ~]# docker events --since '2015-01-28'
2015-01-28T20:25:38.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) create
2015-01-28T20:25:38.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) start
2015-01-28T20:25:39.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) create
2015-01-28T20:25:39.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) start
2015-01-28T20:25:40.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) die
2015-01-28T20:25:42.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) stop
2015-01-28T20:25:45.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) start
2015-01-28T20:25:45.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) die
2015-01-28T20:25:46.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) stop
[root@localhost ~]# docker events --filter 'type=container' --format 'Type={{.Type}} Status={{.Status}} ID={{.ID}}'
Type=container Status=create ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26
Type=container Status=attach ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26
Type=container Status=start ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26
Type=container Status=resize ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26
Type=container Status=die ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26
Type=container Status=destroy ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26
1.9 进入容器(docker exec)

docker exec
- 命令格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]。
- 在一个运行的容器中执行命令。
- 使用 docker exec 启动的命令仅在容器的主进程(pid 1)运行时运行,如果容器重新启动,则不会重新启动。
- 如果容器暂停,那么 docker exec 命令将等待容器取消暂停,然后再运行。
- 每个 docker exec 都会分配一个不同的 tty 给用户,所以不会冲突。
参数 |
说明 |
-d, --detach |
分离模式,在后台运行。默认 false。 |
--detach-keys string |
覆盖键序列分离容器。可以是一个单独的字符 [a-z],也可以是 Ctrl-<value>,<value> 可以是 [a-z]、@、^、[、, 或者 _。 |
-e, --env=[] |
指定环境变量,容器中可以使用该环境变量。 |
--help |
帮助信息。 |
-i, --interactive |
即使没有附加也保持 STDIN 打开。 |
--privileged |
授予命令扩展权限。默认 false。 |
-t, --tty |
分配一个伪终端。 |
-u, --user="" |
指定容器的用户。(用户名或者 UID) |
[root@localhost ~]# docker exec -i -t mynginx /bin/bash
root@b1a0703e41e7:/#
1.10 导出容器(docker export)

docker export
- 命令格式:docker export [OPTIONS] CONTAINER。
- 导出本地存储的容器为一个 tar 包档案文件。
- 使用完整或缩短的容器 ID 或容器名称导出容器文件系统的内容。输出被导出到 STDOUT,并可以重定向到 tar 文件。
参数 |
说明 |
-o, --output string |
将输出内容写到文件,而不是 STDOUT。 |
--help |
帮助信息。 |
[root@localhost ~]# docker export angry_bell > angry_bell.tar
[root@localhost ~]# docker export --output=angry_bell-latest.tar angry_bell
1.11 查看镜像历史(docker history)

docker history
- 命令格式:docker history [OPTIONS] IMAGE。
- 查看指定镜像的创建历史。
- 镜像历史在一定程度上反映了 Dockerfile 的内容,可以查看镜像的构建过程。
- docker history 命令递归地输出指定镜像的历史镜像。
参数 |
说明 |
--help |
帮助信息。 |
-H, --human=true|false |
以可读的格式打印镜像大小和日期,默认为 true。 |
--no-trunc=true|false |
显示完整的提交记录。默认为 false。 |
-q, --quiet=true|false |
仅列出提交记录 ID。 |
[root@localhost ~]# docker history fedora
IMAGE CREATED CREATED BY SIZE COMMENT
105182bb5e8b 5 days ago /bin/sh -c #(nop) ADD file:71356d2ad59aa3119d 372.7 MB
73bd853d2ea5 13 days ago /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar 0 B
511136ea3c5a 10 months ago 0 B Imported from -
1.12 查看镜像(docker images)

docker images
- 命令格式:docker images [OPTIONS] [REPOSITORY[:TAG]]。
- 列出本地镜像。
- 默认情况下,不会列出生成期间使用的中间图像。由于空间原因,某些输出(如图像 ID)被截断。但是被截断的图像 ID,通常是前几个字符足以用于其他使用图像 ID 的 docker 命令。输出包括存储库、标记、图像 ID、创建日期和虚拟大小。
参数 |
说明 |
-a, --all=true|false |
列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层),默认 false。 |
--digests=true|false |
显示镜像的摘要信息。默认 false。 |
-f, --filter=[] |
显示满足条件的镜像。 |
--format="TEMPLATE" |
指定返回值的模板文件。 |
--no-trunc=true|false |
显示完整的提交记录。默认为 false。 |
-q, --quiet=true|false |
仅列出提交记录 ID。 |
--help |
帮助信息。 |
filter
- dangling=(true|false) (查找未使用的图像。)
- label=<key> or label=<key>=<value>(标签)
- before=(<image-name>[:tag]|<image-id>| ⟨image@digest⟩)(过滤出指定镜像之前的镜像)
- since=(<image-name>[:tag]|<image-id>| ⟨image@digest⟩)(过滤出指定镜像之后的镜像)
format
- 使用模板打印镜像信息,可以打印的信息包含有。
- ID(镜像 ID)
- Repository(仓库)
- Image tag(镜像标记)
- Digest(镜像摘要)
- CreatedSince (自创建镜像以来经过的时间)
- CreatedAt(创建镜像的时间)
- Size(镜像磁盘的大小)
[root@localhost ~]# docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID REPOSITORY TAG
77af4d6b9913 <none> <none>
b6fa739cedf5 committ latest
78a85c484bad ipbabble <none>
30557a29d5ab docker latest
5ed6274db6ce <none> <none>
746b819f315e postgres 9
746b819f315e postgres 9.3
746b819f315e postgres 9.3.5
746b819f315e postgres latest
1.13 导入容器(docker import)
- 命令格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]。
- 从归档文件中创建镜像。(格式支持 .tar、.tar.gz、.tgz、.bzip、.tar.xz、.txz)
参数 |
说明 |
-c, --change=[] |
应用 Docker 指令创建镜像。 |
-m, --message="" |
提交时的说明文字。 |
--help |
帮助信息。 |
[root@localhost ~]# docker import http://example.com/exampleimage.tgz example/imagerepo
[root@localhost ~]# docker import /path/to/exampleimage.tgz
- 使用 --change,可以在导入过程中,改变 Dockerfile 中的指令。
- 使用 --message,可以添加 commit 信息。
1.14 查看 Docker 信息(docker info)
- 命令格式:docker info [OPTIONS]。
- 显示 Docker 系统信息(包括容器数量、状态、镜像数据、服务版本、存储驱动、根目录、数据卷、插件、网络、安全、硬件等信息)。
- 显示有关 Docker 安装的系统范围信息。
- 显示的信息包括内核版本、容器数量和镜像。
- 显示的镜像数量是唯一镜像的数量。在不同名称下标记的同一镜像只计算一次。
参数 |
说明 |
--help |
帮助信息。 |
-f, --format="TEMPLATE" |
指定返回值的模板文件。 |
- 可以加上 -D 参数显示 Docker 系统的 Debug 信息。
[root@localhost ~]# docker -D info
Containers: 4
Running: 0
Paused: 0
Stopped: 4
Images: 1
Server Version: 1.13.1
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: journald
Cgroup Driver: systemd
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: docker-runc runc
Default Runtime: docker-runc
Init Binary: /usr/libexec/docker/docker-init-current
containerd version: (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc version: df5c38a9167e87f53a9894d77c0950e178a745e7 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f)
init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574)
Security Options:
seccomp
WARNING: You're not using the default seccomp profile
Profile: /etc/docker/seccomp.json
selinux
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 3
CPUs: 2
Total Memory: 3.683 GiB
Name: localhost.localdomain
ID: C7UM:TFRF:I5DQ:3VED:GNY5:HGR7:666X:INRQ:GEFN:KFOV:REGQ:3XTN
Docker Root Dir: /var/lib/docker
Debug Mode (client): true
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Registries: docker.io (secure)
- 如果操作系统不启用某些功能,则在运行时可能会看到以下警告之一。
WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
WARNING: No swap limit support
- 可以忽略这些警告,除非实际上需要限制这些资源的能力,在这种情况下,可以参考 操作系统的文档 来启用它们。
1.15 查看详细信息(docker inspect)

docker inspect
- 命令格式:docker inspect [OPTIONS] NAME|ID [NAME|ID...]。
- 获取容器/镜像的元数据。
- 显示通过名称或 ID 标识的 Docker 对象(例如容器、图像、卷、网络、节点、服务或任务)的信息,默认情况下,将在 JSON 数组中呈现所有结果。
- 如果容器和镜像同名,将返回未指定类型的容器 JSON。如果指定了格式,将为每个结果执行给定的模板。
参数 |
说明 |
--help |
帮助信息。 |
-f, --format="TEMPLATE" |
指定返回值的模板文件。 |
-s, --size |
如果 type 为容器,则显示文件总大小。 |
--type=container|image|network|node|service|task|volume |
返回指定类型的 JSON,允许值为镜像、容器、网络、节点、服务、任务和卷。 |
[root@localhost ~]# docker inspect --type=image rhel7
[
{
"Id": "fe01a428b9d9de35d29531e9994157978e8c48fa693e1bf1d221dffbbb67b170",
"Parent": "10acc31def5d6f249b548e01e8ffbaccfd61af0240c17315a7ad393d022c5ca2",
....
}
]
[root@localhost ~]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' d2cc496561d6
172.17.0.2
[root@localhost ~]# docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} \
{{$p}} -> {{(index $conf 0).HostPort}} {{end}}' d2cc496561d6
80/tcp -> 80
[root@localhost ~]# docker inspect -s d2cc496561d6
[
{
"SizeRw": 0,
"SizeRootFs": 972,
}
]
1.16 杀掉运行容器(docker kill)

docker kill
- 命令格式:docker kill [OPTIONS] CONTAINER [CONTAINER...]。
- 杀掉一个运行中的容器。
- 使用命令可以停止一个无响应的容器。
-
stop 与 kill 的区别在于 docker stop 命令给 容器中的进程 发送 SIGTERM 信号,默认行为会导致容器退出,容器内程序可以捕获该信号自行处理,当然也可以选择忽略。docker kill 命令是给 容器进程 发送 SIGTERM 信号,该信号将会使容器必然退出。
参数 |
说明 |
--help |
帮助信息。 |
-s, --signal="KILL" |
指定发送信号,默认为 KILL。 |
[root@localhost ~]# docker kill -s KILL mynginx
mynginx
[root@localhost ~]# docker kill --signal=SIGHUP my_container
[root@localhost ~]# docker kill --signal=HUP my_container
[root@localhost ~]# docker kill --signal=1 my_container
1.17 导入镜像(docker load)
- 命令格式:docker load [OPTIONS]。
-
load、save 负责导入和导出镜像、import、export 负责导入和导出容器。
参数 |
说明 |
--help |
帮助信息。 |
-i, --input="" |
从存档文件而不是 STDIN 读取。存档可以用 gzip、bzip 或 xz 压缩。 |
-q, --quiet |
精简输出。 |
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 769b9341d937 7 weeks ago 2.489 MB
[root@localhost ~]# docker load --input fedora.tar
# […]
Loaded image: fedora:rawhide
# […]
Loaded image: fedora:20
# […]
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 769b9341d937 7 weeks ago 2.489 MB
fedora rawhide 0d20aec6529d 7 weeks ago 387 MB
fedora 20 58394af37342 7 weeks ago 385.5 MB
fedora heisenbug 58394af37342 7 weeks ago 385.5 MB
fedora latest 58394af37342 7 weeks ago 385.5 MB
[root@localhost ~]# docker load < fedora.tar
1.18 登录仓库(docker login)
- 命令格式:docker login [OPTIONS] [SERVER]。
- 登录到一个 Docker 镜像仓库的命令,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub。
参数 |
说明 |
--help |
帮助信息。 |
-p, --password="" |
登录密码。 |
-u, --username="" |
登录用户名。 |
- 登录本地仓库,登录信息保存在 $HOME/.docker/config.json。
[root@localhost ~]# docker login localhost:8080
- 登录 Docker Hub,覆盖 /etc/containers/registries.conf。
[root@localhost ~]# docker login docker.io
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:
1.19 登出仓库(docker logout)
[root@localhost ~]# docker logout localhost:8080
1.20 查看容器日志(docker logs)
- 命令格式:docker logs [OPTIONS] CONTAINER。
- 获取容器的日志。
- docker logs 命令批处理检索执行时容器存在的任何日志。不保证与 Docker 运行结合时的执行顺序(运行 docker logs 时可能没有生成任何日志)。
参数 |
说明 |
--help |
帮助信息。 |
--details=true|false |
显示详细日志信息。 |
-f, --follow=true|false |
跟踪日志输出(持续输出),默认 false。 |
--since="" |
显示某个开始时间的所有日志。 |
-t, --timestamps=true|false |
显示时间戳,默认 false。 |
--tail="all" |
仅列出最新 N 条容器日志,默认 all。 |
[root@localhost ~]# docker logs -f mynginx
192.168.239.1 - - [10/Jul/2016:16:53:33 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
2016/07/10 16:53:33 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.239.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.239.130", referrer: "http://192.168.239.130/"
192.168.239.1 - - [10/Jul/2016:16:53:33 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://192.168.239.130/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
192.168.239.1 - - [10/Jul/2016:16:53:59 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
...
1.21 暂停容器(docker pause)

docker pause
- 命令格式:docker pause [OPTIONS] CONTAINER [CONTAINER...]。
- 暂停容器中所有的进程。
- 通过 docker stats 查看资源使用情况不变。
- 通过 docker logs 查看日志无进一步输出。
- 该命令使用了 cgroup 中的 freezer 顺序暂停了容器里的所有进程。
[root@localhost ~]# docker pause db01
1.22 恢复容器(docker unpause)
- 命令格式:docker unpause [OPTIONS] CONTAINER [CONTAINER...]。
- 恢复容器中所有的进程。
- 该命令使用了 cgroup 中的 freezer 顺序恢复了容器里的所有进程。
[root@localhost ~]# docker unpause db01
1.23 查看端口信息(docker port)
- 命令格式:docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]。
- 列出指定的容器的端口映射,或者查找将 PRIVATE_PORT NAT 到面向公众的端口。
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b650456536c7 busybox:latest top 54 minutes ago Up 54 minutes 0.0.0.0:1234->9876/tcp, 0.0.0.0:4321->7890/tcp test
[root@localhost ~]# docker port test
7890/tcp -> 0.0.0.0:4321
9876/tcp -> 0.0.0.0:1234
[root@localhost ~]# docker port test 7890/tcp
0.0.0.0:4321
[root@localhost ~]# docker port test 7890
0.0.0.0:4321
1.24 查看本地容器信息(docker ps)

docker ps
- 命令格式:docker ps [OPTIONS]
- 列出容器(默认只列出了运行状态的容器)。
参数 |
说明 |
-a, --all=true|false |
列出所有容器。默认为 false,只列出了正在运行的容器。 |
-f, --filter=[] |
根据条件过滤事件。 |
--format="TEMPLATE" |
使用给定的模板格式化输出。 |
-l, --latest=true|false |
仅显示最新创建的容器(包括所有状态),默认为 false。 |
-n=-1 |
显示最近创建的 N 个容器(包括所有状态)。 |
--no-trunc=true|false |
不截断输出,默认为 false。 |
-q, --quiet=true|false |
静默输出,只显示容器编号。 |
-s, --size=true|false |
显示总的文件大小。 |
--help |
帮助信息。 |
filter
- 退出码(exited=<int> an exit code of <int>)
- 标签 (label=<key> or label=<key>=<value>)
- 状态(status=created|restarting|running|paused|exited|dead)
- 容器名称(name=<string> a container's name)
- 容器 ID(id=<ID> a container's ID)
- 任务容器(is-task=true|false)
- 过滤出指定容器之前的容器(<container-name>|<container-id>)
- 过滤出指定容器之后的容器(<container-name>|<container-id>)
- 过滤出指定镜像或后代创建的容器(<image-name>[:tag]|<image-id>| ⟨image@digest⟩)
- 存储卷(<volume-name>|<mount-point-destination>)
- 网络(<network-name>|<network-id>)
- 运行健康状况(starting|healthy|unhealthy|none)
format
- 使用模板打印容器信息,可以打印的信息包含有。
- ID(容器 ID)
- Image(镜像 ID)
- Command(引用命令)
- CreatedAt(容器的创建时间)
- RunningFor(容器启动后经过的时间)
- Ports(暴露的端口)
- Status(容器状态)
- Size(容器磁盘的大小)
- Names(容器的名称)
- Labels(分配给容器的所有标签)
- Label(容器标记,例如 {{.Label "com.docker.swarm.cpu"}})
- Mounts(容器挂载卷名称)
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c4bb11dfdb3 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago eloquent_minsky
acbc7fa4cb8c hello-world "/hello" 12 days ago Exited (0) 12 days ago sleepy_mccarthy
f77dbc06cf99 hello-world "/hello" 12 days ago Exited (0) 12 days ago amazing_cori
d2a233491403 hello-world "/hello" 12 days ago Exited (0) 12 days ago sleepy_allen
2567131e0130 hello-world "/hello" 12 days ago Exited (0) 12 days ago competent_turing
[root@localhost ~]# docker ps -a -q
1c4bb11dfdb3
acbc7fa4cb8c
f77dbc06cf99
d2a233491403
2567131e0130
1.24 拉取镜像(docker pull)
- 命令格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]。
- 从镜像仓库中拉取或者更新指定镜像。
参数 |
说明 |
-a, --all=true|false |
拉取所有标记镜像,默认为 false。 |
--help |
帮助信息。 |
--disable-content-trust=false |
校验镜像。 |
--platform |
如果服务器支持多平台,则设置平台。 |
[root@localhost ~]# docker pull java
1.25 推送镜像(docker push)
- 命令格式:docker push [OPTIONS] NAME[:TAG]。
- 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库。
参数 |
说明 |
--disable-content-trust=false |
校验镜像。 |
[root@localhost ~]# docker tag rhel-httpd registry-host:5000/myadmin/rhel-httpd
[root@localhost ~]# docker push registry-host:5000/myadmin/rhel-httpd
- 如果不指定 tag,会默认把该镜像的全部镜像都推送到仓库。
- 默认情况下,Docker daemon 将一次推送五层图像。如果使用的是低带宽连接,可能会导致超时问题,能通过 --max-concurrent-uploads 选项来处理超时问题。
1.26 重命名容器(docker rename)
- 命令格式:docker rename CONTAINER NEW_NAME。
- 重命名容器,容器可以是运行的、暂停的、停止的状态。镜像重命名使用 docker tag。
[root@localhost ~]# docker rename my_container my_new_container
1.27 重启容器(docker restart)
- 命令格式:docker restart [OPTIONS] CONTAINER [CONTAINER...]。
- 是重启一个或多个容器,不是重启 docker 服务。
参数 |
说明 |
--help |
帮助信息。 |
-t, --time=10 |
kill 容器之前尝试停止的秒数(宽限期),一旦容器 kill,将重新启动,默认为 10 秒。 |
[root@localhost ~]# docker restart my_container
1.28 删除容器(docker rm)

docker rm
- 命令格式:docker rm [OPTIONS] CONTAINER [CONTAINER...]。
- 删除一个或多个容器,无 -f 参数,只能删除非运行状态容器。
参数 |
说明 |
--help |
帮助信息。 |
-f, --force=true|false |
强制删除一个正在运行的容器(使用 SIGKILL),默认为 false。 |
-l, --link=true|false |
删除容器间的关联,而不删除基础容器。默认为 false。 |
-v, --volumes=true|false |
删除与容器关联的卷(默认删除容器不会删除卷),默认为 false。 |
[root@localhost ~]# docker rm /redis
[root@localhost ~]# docker rm --link /webapp/redis
[root@localhost ~]# docker rm --force redis
[root@localhost ~]# docker rm $(docker ps -a -q)
[root@localhost ~]# docker rm -v redis
1.28 删除镜像(docker rmi)

docker rmi
- 命令格式:docker rmi [OPTIONS] IMAGE [IMAGE...]。
- 删除本地一个或多少镜像。
参数 |
说明 |
--help |
帮助信息。 |
-f, --force=true|false |
强制删除(正在运行的容器使用了该镜像),只会删除镜像标签,不会影响运行的容器,默认为 false,可以通过 commit 提交容器为镜像,使镜像恢复。 |
--no-prune=true|false |
不删除未标记的父级。默认为 false。 |
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test1 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB)
test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB)
test2 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB)
[root@localhost ~]# docker rmi -f fd484f19954f
Untagged: test1:latest
Untagged: test:latest
Untagged: test2:latest
Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
1.29 导出镜像(docker save)

docker save
- 命令格式:docker save [OPTIONS] IMAGE [IMAGE...]。
- 将指定镜像保存成归档文件。
参数 |
说明 |
--help |
帮助信息。 |
-o, --output="" |
输出文件,而不是 STDOUT。 |
[root@localhost ~]# docker save fedora > fedora-all.tar
[root@localhost ~]# docker save --output=fedora-latest.tar fedora:latest
[root@localhost ~]# ls -sh fedora-all.tar
721M fedora-all.tar
[root@localhost ~]# ls -sh fedora-latest.tar
367M fedora-latest.tar
1.30 搜索镜像(docker search)
- 命令格式:docker search [OPTIONS] TERM。
- 从 Docker Hub 查找镜像。
参数 |
说明 |
--help |
帮助信息。 |
-f, --filter=[] |
根据条件过滤事件。 |
--no-index=true|false |
不在输出中包含索引名。按注册名称对结果排序。 |
--limit=LIMIT |
返回的搜索结果的最大值。默认值为 25。 |
--no-trunc=true|false |
显示完整的镜像描述。 |
--automated |
只列出自动构建类型的镜像。 |
--stars , -s |
列出收藏数不小于指定值的镜像。 |
filter
- 收藏数(stars=<numberOfStar>)
- 是否自动构建 (is-automated=true|false)
- 是否官方的(is-official=true|false)
[root@localhost ~]# docker search --filter=starts=3 fedora
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/mattdm/fedora A basic Fedora image corresponding roughly... 50
docker.io docker.io/fedora (Semi) Official Fedora base image. 38
docker.io docker.io/mattdm/fedora-small A small Fedora image on which to build. Co... 8
docker.io docker.io/goldmann/wildfly A WildFly application server running on a ... 3 [OK]
[root@localhost ~]# docker search --filter=is-automated=true --filter=starts=1 fedora
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/goldmann/wildfly A WildFly application server running on a ... 3 [OK]
docker.io docker.io/tutum/fedora-20 Fedora 20 image with SSH access. For the r... 1 [OK]
1.31 启动容器(docker start)

docker start
- 命令格式:docker start [OPTIONS] CONTAINER [CONTAINER...]。
- 启动一个或多个已经被停止的容器。
- docker start 命令为容器文件系统创建了一个进程隔离空间,并且每一个容器只能够有一个进程隔离空间。
参数 |
说明 |
--help |
帮助信息。 |
-a, --attach=true|false |
附加容器的 STDOUT、STDERR 和转发的所有信号到进程中。默认为 false。 |
--detach-keys="" |
覆盖键序列分离容器。可以是一个单独的字符 [a-z],也可以是 Ctrl-<value>,<value> 可以是 [a-z]、@、^、[、, 或者 _。 |
-i, --interactive=false |
即使没有附加也保持 STDIN 打开。默认为 false。 |
--checkpoint |
从此检查点还原。 |
--checkpoint-dir |
使用自定义检查点存储目录。 |
[root@localhost ~]# docker start my_container
- 添加 -a 参数显示 STDOUT、STDERR 信息,添加 -i 显示 STDIN 信息。
1.32 查看容器状态(docker stats)
- 命令格式:docker stats [OPTIONS] [CONTAINER...]。
- 显示一个或多个容器的资源使用统计信息的实时流。
参数 |
说明 |
--help |
帮助信息。 |
--all , -a |
显示所有容器状态信息(默认只显示运行状态)。 |
--no-stream=true|false |
禁用流式处理状态并只拉取第一个返回,默认为 false。 |
--format="TEMPLATE" |
使用给定的模板格式化输出。 |
--no-trunc |
显示完整的描述。 |
- 使用 --no-stream 可以只查看某一时刻的状态,输出结束后自动返回可交互的 shell 界面。
format
- 使用模板打印状态信息,可以打印的信息包含有。
- Container(容器 ID 和名称)
- Name(容器名称)
- ID(容器 ID)
- CPUPerc(CPU 百分率)
- MemUsage(内存使用)
- NetIO (网络 IO)
- BlockIO (块 IO)
- MemPerc(内存百分率(在 Windows 上不可用))
- PIDs(PID(在 Windows 上不可用))
[root@localhost ~]# docker stats
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
1285939c1fd3 0.07% 796 KiB / 64 MiB 1.21% 788 B / 648 B 3.568 MB / 512 KB
9c76f7834ae2 0.07% 2.746 MiB / 64 MiB 4.29% 1.266 KB / 648 B 12.4 MB / 0 B
d1ea048f04e4 0.03% 4.583 MiB / 64 MiB 6.30% 2.854 KB / 648 B 27.7 MB / 0 B
1.33 停止容器(docker stop)

docker stop
- 命令格式:docker stop [OPTIONS] CONTAINER [CONTAINER...]。
- 停止一个或多个运行中的容器。
- 先会向容器发送正常停止信号(先发送 SIGTERM 信号,宽限期后发送 SIGKILL 信号),而 docker kill 强制终止进程(直接发送 SIGKILL 信号)。
参数 |
说明 |
--help |
帮助信息。 |
-t, --time=10 |
在 kill 容器之前等待容器停止的秒数(宽限期)。默认值为 10 秒。 |
[root@localhost ~]# docker stop my_container
1.34 设置镜像标签(docker tag)
- 命令格式:docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]。
- 标记本地镜像,将其归入某一仓库。
NAME
- 由斜线分隔的名称组件组成的镜像名称,可以选择以注册表主机名作为前缀。
- 主机名必须符合标准 DNS 规则,但不能包含下划线。
- 如果主机名存在,可以选择后面跟一个端口号,格式为 :8080。如果不存在,该命令使用 Docker 的公共注册表,默认为 registry-1.docker.io。
- 名称可以包含小写字符、数字和分隔符。分隔符可以定义为句点、一个或两个下划线,或一个或多个短划线。
- 名称不能使用分隔符开始或结束。
TAG
- 分配给镜像的标记,用作版本,区分具有相同名称的镜像。
- 标记可以包含小写和大写字符、数字,下划线、句点和短划线。标记名不能以句点或破折号,最多可包含 128 个字符。
[root@localhost ~]# docker tag 0e5574283393 fedora/httpd:version1.0
[root@localhost ~]# docker tag 0e5574283393 myregistryhost:5000/fedora/httpd:version1.0
1.35 查看容器进程(docker top)
- 命令格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
- 查看容器中运行的进程信息,支持 ps 命令参数。
[root@localhost ~]# docker top 8601afda2b -x
PID TTY STAT TIME COMMAND
16623 ? Ss 0:00 sleep 99999
1.36 更新容器(docker update)
- 命令格式:docker update [OPTIONS] CONTAINER [CONTAINER...]。
- 更新一个或多个容器的配置,大部分参数与 docker run 一致。
参数 |
说明 |
--help |
帮助信息。 |
--blkio-weight=0 |
块 IO 权重,范围 10~1000。 |
--cpu-shares=0 |
CPU 共享。 |
--cpu-period=0 |
限制 CPU CFS(完全公平调度程序)周期。限制容器的 CPU 使用。这个标志告诉内核将容器的 CPU 使用限制在指定的时间段内。 |
--cpu-quota=0 |
限制 CPU CFS 配额。 |
--cpu-rt-period=0 |
以微秒为单位限制 CPU 的实时周期,限制容器的实时CPU使用。这个标志告诉内核将容器的实时 CPU 使用限制在指定的时间段内。 |
--cpu-rt-runtime=0 |
以微秒为单位限制 CPU 实时运行时间,限制容器的实时 CPU 使用。此标志告诉内核限制给定 CPU 周期内实时任务可能消耗的时间量。跨容器的所有运行时的总和不能超过分配给父 cgroup 的额度。 |
--cpuset-cpus="" |
允许执行的 CPU(0-3、0、1)。 |
--cpuset-mems="" |
允许执行的内存节点(mems)(0-3、0、1)。仅对 NUMA 系统有效。 |
--kernel-memory="" |
内核内存限制(格式:<number>[<unit>],单位可以为 b,k,m 和 g)。 |
-m, --memory="" |
内存限制(格式:<number>[<unit>],单位可以为 b,k,m 和 g)。 |
--memory-reservation="" |
内存软限制(格式:<number>[<unit>],单位可以为 b,k,m 和 g)。 |
--memory-swap="" |
总内存限制(内存 + 交换)。 |
--restart="" |
容器退出时要应用的重新启动策略(no(不重启)、on-failure[:max-retry](失败时:最大重试数)、always(始终重启)、unless-stopped(除非停止))。 |
[root@localhost ~]# docker update --cpu-shares 512 -m 300M abebf7571666 hopeful_morse
[root@localhost ~]# docker update --kernel-memory 80M test
[root@localhost ~]# docker update --restart=on-failure:3 abebf7571666 hopeful_morse
-
--restart 添加该参数时不会立刻修改容器,而是在未来容器重启时生效。
--memory
- 内存应该小于已经设置的交换内存限制。如果要更新的内存限制大于已设置的交换内存限制,应该同时更新交换内存限制。
- 如果不设置交换内存 Docker 创建/运行的限制,只有内存限制,交换内存是双倍的内存限制。
1.37 查看 Docker 版本(docker version)
- 命令格式:docker version [OPTIONS]。
- 显示 Docker 版本信息。
参数 |
说明 |
--help |
帮助信息。 |
--format="TEMPLATE" |
使用给定的模板格式化输出。 |
[root@localhost ~]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64
Go version: go1.10.3
Git commit: b2f74b2/1.13.1
Built: Tue Mar 12 10:27:24 2019
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64
Go version: go1.10.3
Git commit: b2f74b2/1.13.1
Built: Tue Mar 12 10:27:24 2019
OS/Arch: linux/amd64
Experimental: false
[root@localhost ~]# docker version --format '{{.Server.Version}}'
1.13.1
[root@localhost ~]# docker version --format '{{json .}}'
{"Client":{"Version":"1.13.1","ApiVersion":"1.26","GitCommit":"b2f74b2/1.13.1","GoVersion":"go1.10.3","Os":"linux","Arch":"amd64","BuildTime":"Tue Mar 12 10:27:24 2019","PkgVersion":"docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64"},"Server":{"Version":"1.13.1","ApiVersion":"1.26","MinAPIVersion":"1.12","GitCommit":"b2f74b2/1.13.1","GoVersion":"go1.10.3","Os":"linux","Arch":"amd64","KernelVersion":"3.10.0-957.el7.x86_64","BuildTime":"Tue Mar 12 10:27:24 2019","PkgVersion":"docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64"}}
1.38 设置等待(docker wait)
- 命令格式:docker wait [OPTIONS] CONTAINER [CONTAINER...]。
- 阻塞运行直到容器停止,然后打印出它的退出代码。
[root@localhost ~]# docker run -d fedora sleep 99
079b83f558a2bc52ecad6b2a5de13622d584e6bb1aea058c11b36511e85e7622
[root@localhost ~]# docker wait 079b83f558a2bc
0
参考资料
http://dockone.io/article/783