当前位置: > Linux服务器 > Docker >

Docker 容器初体验(4)

时间:2014-12-24 17:54来源:linux.cn 作者:IT





11 停止守护式容器

要停止守护式容器,只需要执行docker stop命令,如代码清单3-25所示。

代码清单3-25 停止正在运行的Docker容器


  1. $ sudo docker stop daemon_dave

当然,也可以用容器ID来指代容器名称,如代码清单3-26所示。

代码清单3-26 通过容器ID停止正在运行的容器


  1. $ sudo docker stop c2c4e57c12c4

{注意} docker stop命令会向Docker容器进程发送SIGTERM信号。如果你想快速停止某个容器,也可以使用docker kill命令来向容器进程发送SIGKILL信号。

要想查看已经停止的容器的状态,则可以使用docker ps命令。还有一个很实用的命令docker ps -n x,该命令会显示最后x个容器,不论这些容器正在运行还是已经停止。

12 自动重启容器

如果由于某种错误而导致容器停止运行,我们还可以通过--restart标志,让Docker自动重新启动该容器。--restart标志会检查容器的退出代码,并据此来决定是否要重启容器。默认的行为是Docker不会重启容器。

代码清单3-27是一个在docker run命令中使用—restart标志的例子。

代码清单3-27 自动重启容器


  1. $ sudo docker run --restart=always --name daemon_dave -d ubuntu /
  2. bin/sh -c "while true; do echo hello world; sleep 1; done"

在本例中,--restart标志被设置为always。无论容器的退出代码是什么,Docker都会自动重启该容器。除了always,我们还可以将这个标志设为on-failure,这样,只有当容器的退出代码为非0值的时候,才会自动重启。另外,on-failure``还接受``一个可选的重启次数参数,如代码清单3-28所示。

代码清单3-28 为on-failure指定count参数


  1. --restart=on-failure:5

这样,当容器退出代码为非0时,Docker会尝试自动重启该容器,最多重启5次。

{注意} --restart标志是Docker1.2.0引入的选项。

13 深入容器

除了通过docker ps命令获取容器的信息,我们还可以使用docker inspect``来获得更多的容器信息,如代码清单3-29所示。

代码清单3-29 查看容器


  1. $ sudo docker inspect daemon_dave
  2. [{
  3. "ID": "c2c4e57c12c4c142271c031333823af95d64b20b5d607970c334784430bcbd0f",
  4. "Created": "2014-05-10T11:49:01.902029966Z",
  5. "Path": "/bin/sh",
  6. "Args": [
  7. "-c",
  8. "while true; do echo hello world; sleep 1; done"
  9. ],
  10. "Config": {
  11. "Hostname": "c2c4e57c12c4",
  12. . . .

docker inspect命令会对容器进行详细的检查,然后返回其配置信息,包括名称、命令、网络配置以及很多有用的数据。

我们也可以用-f或者--format标志来选定查看结果,如代码清单3-30所示。

代码清单3-30 有选择地获取容器信息


  1. $ sudo docker inspect --format='{{ .State.Running }}' daemon_dave
  2. false

上面这条命令会返回容器的运行状态,示例中该状态为false。我们还能获取其他有用的信息,如容器IP地址,如代码清单3-31所示。

代码清单3-31 查看容器的IP地址


  1. $ sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' daemon_dave
  2. 172.17.0.2

{提示} --format或者-f标志远非表面看上去那么简单。该标志实际上支持完整的Go语言模板。用它进行查询时,可以充分利用Go语言模板的优势。

我们也可以同时指定多个容器,并显示每个容器的输出结果,如代码清单3-32所示。

代码清单3-32 查看多个容器


  1. $ sudo docker inspect --format '{{.Name}} {{.State.Running}}' daemon_dave bob_the_container
  2. /daemon_dave false
  3. /bob_the_container false

我们可以为该参数指定要查询和返回的查看散列(inspect hash)中的任意部分。

{注意} 除了查看容器,你还可以通过浏览/var/lib/docker目录来深入了解Docker的工作原理。该目录存放着Docker镜像、容器以及容器的配置。所有的容器都保存在/var/lib/docker/containers目录下。

14 删除容器

如果容器已经不再使用,可以使用docker rm命令来删除它们,如代码清单3-33所示。

代码清单3-33 删除容器


  1. $ sudo docker rm 80430f8d0921
  2. 80430f8d0921

{注意} 需要注意的是,运行中的Docker容器是无法删除的!你必须先通过docker stop或docker kill命令停止容器,才能将其删除。

目前,还没有办法一次删除所有容器,不过可以通过代码清单3-34所示的小技巧来删除全部容器。

代码清单3-34 删除所有容器


  1. docker rm `docker ps -a -q`

上面的docker ps命令会列出现有的全部容器,-a标志代表列出所有(all)容器,而-q标志则表示只需要返回容器的ID而不会返回容器的其他信息。这样我们就得到了容器ID的列表,并传给了docker rm命令,从而达到删除所有容器的目的。

小结

在本章中我们介绍了Docker容器的基本工作原理。这里学到的内容也是本书剩余章节中学习如何使用Docker的基础。

本文摘自《第一本Docker书


(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容