容器内部进程
除了容器的日志,我们也可以查看容器内部运行的进程,为了做到这一点,我们使用docker top
命令
执行命令后,我们看到容器内的所有进程,运行进程的用户,时间,执行指令
容器内部运行进程
在 Docker 1.3 之后,我们可以通过 docker exec
命令在容器内部额外启动新进程。可以在容器内部运行的进程有两种类型:后台任务和交互式任务。后台任务在容器内部运行并且没有交互需求,而交互式任务保持在前台运行。对于需要在容器内部打开的 shell 任务,交互式任务还是很实用的,下面是一个后台任务的例子
这里的标志 -d
表示是一个后台进程。-d 标志之后,跟的是要在内部创建进程的名字以及要执行的命令,上面的例子会在daemon_dave 之后创建了一个新文件,文件名为/etc/new_configP_file ,通过 docker exec 后台命令,我们可以在正在运行的容器中进行维护、监控以及任务管理。
我们也可以在容器内部打开一个交互式任务,如下
因此你也可以很直观的看出交互式任务
和 后台任务
之间的区别:交互式任务可以进行运行环境的切换,而后台任务一旦运行无法切换,只能进行停止或者开始
上面的-t
和 -i
标志为我们的执行创建了 TTY 并捕捉 STDIN。接着我们指定了要在容器内部运行的名称以及要执行的命令,在上面的例子中,这条命令会在 daemon_dave 容器中创建一个新的 bash 会话,有了这个会话,我们就可以在该容器中运行其他命令了。
tty(终端设备的统称):在UNIX系统中,计算机显示器通常被称为控制台终端(Console)。它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等。这些文件赋予了linux同时处理多任务,多窗口切换的能力。
STDIN是标准输入,一般指键盘输入到缓冲区里的东西。
其他还有
stdout(Standardoutput)标准输出
stderr(Standarderror)标准错误
停止守护式进程
要停止守护式进程,需要执行 docker stop
命令,例如
也可以停止指定的 containerId,例如
Docker stop 命令会像 Docker 容器进程发送 SIGTERM 信号,如果你想快速停止某个容器,也可以使用 docker kill 命令来向进程发送 SIGKILL 信号。
可以使用 docker ps
来查看正在运行中的 docker 容器,还有一个很实用的命令 docker ps -n x
,该命令会显示最后 x 个容器,不论这些容器是正在运行还是已经停止。
自动重启容器
由于某种错误而导致容器停止运行,可以使用 --restart
命令来重启容器。--restart 会检查容器的退出代码,并据此来决定是否要重启容器。默认的行为是 Docker 不会重启容器。
docker run --restart=always --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1;done"
--restart 标志被设置为 always。无论容器的退出代码是什么,Docker 都会自动重启该容器。除了 always,我们可以将这个标志设置为 on-failure,这样,只有当容器的退出代码为非0 的时候,才会自动重启。另外,on-failure
还接受一个可选的重启次数,如 : --restart=on-failure:5
深入容器
除了使用 docker ps 命令获取正在运行的容器信息,还可以使用 docker inspect
来获取更多的容器信息
下面还有很多信息
我们还可以使用 -f
或者 --format
标志选定查看结果。
删除容器
如果容器已经不在使用,可以使用 docker rm
来删除,如下
目前,还没有办法删除所有的容器,不过可以通过下面的小技巧来删除所有的容器
注意:正在运行的docker 容器是无法删除的,你必须先停止容器的运行,使用 docker stop 或者 docker kill 停止容器,然后才可以删除。
总结
本能文章作为Docker 的入门,主要包括Docker对容器的一些基本用法:
- 查看Docker 基本信息
- 如何运行一个容器
- 给容器命名
- 重启启动容器
- 附着容器
- 创建守护式容器
- 容器日志
- 容器内部运行容器
- 容器停止
- 自动重启容器
- 容器删除
下一篇文章我们会介绍使用 Docker 镜像和仓库