上一节学习过如何运行一个交互式容器,这些容器在命令结束后就停止,但是大多数时候我们需要一个长期运行的容器来提供服务。这就是Docker的守护式容器,它能够长期运行,没有交互式会话,适合运行应用程序和服务。

以守护式形式运行容器

  最简单的方式是以ctrl+pctrl+p的方式退出容器,这样容器就会在后台运行:

$ docker run -i -t IMAGE /bin/bash
Ctrl+P Ctrl+Q

docker 配置守护进程 docker守护进程启动_docker 配置守护进程

  想要再次进入到这个运行中的容器,可以采用docker attach命令附加到运行中的容器:

docker attach 容器名

docker 配置守护进程 docker守护进程启动_docker 配置守护进程_02

启动守护式容器

  那如何使用run命令来启动守护式容器呢?

$ docker run -d 镜像名 [COMMAND] [ARG...]

  参数-d会告诉系统,启动容器时,使用后台运行的方式。但是后台如果运行结束的话,容器依然会停止,因此这里采用一个循环来使得后台始终在运行:

docker 配置守护进程 docker守护进程启动_bash_03

查看容器日志

  如果想要看容器内部的运行情况,可以查看其日志。

$ docker logs [-f] [-t] [--tail] 容器名
  1. -f表示一直跟踪日志的变化,并返回结果。–follows=True|False 默认为false;
  2. -t表示在返回的结果上加上时间戳。–timestamps=true|false 默认为false。
  3. --tail表示返回结尾处多少数量的日志。–tail=“all”。如果不指定,logs会返回所有的日志。

查看容器内进程

  通过dockertop命令来查看一个运行中容器的进程

$ docker top 容器名

在运行中的容器内启动新进程

  虽然docker的理念是一个容器运行一种服务,但我们仍旧需要在一个容器里面运行多个进程,比如对运行的容器进行维护、监控或者执行一些管理任务。

  而dockerexec命令就是用来在已经运行的docker容器中启动新的进程,其命令格式如下:

$ docker exec [-d][-i][-t] 容器名 [COMMAND] [ARG...]

  它与run命令非常相似。

docker 配置守护进程 docker守护进程启动_bash_04

  可以看到bash命令已经在启动的容器中运行了。

停止守护式容器

  docker提供两种停止守护式容器的方式:

$ docker stop 容器名
$ docker kill 容器名

  使用man命令可以查看docker命令的详细介绍:

man docker-run
man docker-logs
man docker-top
man docker-exec