我们学习了如何运行一个“交互式”的容器,这些容器在命令交互之后就会停止。但是,在大多数情况下,我们需要一个能够长期运行的容器来提供服务,这就是Docker的“守护式”进程。即我们可以使用守护方式来运行容器,使得容器可以在后台一直保持运行状态。
守护式进程的特点是:
(1)能够长期运行
(2)没有交互式会话
(3)适合运行应用程序和服务
一、运行守护式容器
那么,如何使用守护的形式来运行我们的容器呢?有两种方式进行守护式进程的运行:
●以命令方式运行守护式进程
●以参数设定方式运行守护式进程
(1)命令方式
首先我们使用run命令+bash会运行容器并进入容器的交互控制台:
docker run -i -t IMAGE /bin/bash
此时我们使用Ctrl+P或Ctrl+Q的方式退出容器的控制台,此时容器就会在后台运行。
那么我们如何再次进入已经退出的容器呢?这就需要docker的attach命令,附加到容器:
docker attach 容器名(CONTAINER ID或NAME)
退出时我们继续使用Ctrl+P或Ctrl+Q的方式退出容器,容器依然会运行在后台,而直接使用exit命令,此时容器就会直接停止。
(2)参数设定方式
在使用run方式运行docker容器时,添加“-d”参数,表示在启动容器时,使用后台的方式来执行命令:
docker run -d 容器名(CONTAINER ID或NAME) [COMMAND][ARG...]
-d”参数实际上只是以后台的形式来运行命令,而在命令结束后,容器依旧会停止。
二、查看容器运行日志
我们可以使用docker的“logs”命令来查看:
docker logs -f -t --tail 容器名(CONTAINER ID或NAME)
-f 为--follows,值为true或false,默认为false。该参数告诉logs命令。要一直跟踪日志的变化,并返回结果。
-t 为--timestamps,值为true或false,默认为false。该参数告诉logs命令,在返回的结果上加上时间戳。
--tail 为“all”。该参数指定返回结尾处多少行的日志,和Linux的tail一样。不指定的话,logs会返回所有的日志。
我们使用logs命令来查看刚刚守护式进程中命令执行的情况:
这里我们使用-f -t指定动态跟踪日志,并加上时间戳,使用--tail 10打印最新的10行。如果tail参数后面设置为0,则永远返回最新的一行。
三、查看容器中的进程
使用“top”命令,来查看一个运行中的容器的进程:
docker top 容器名(CONTAINER ID或NAME)
这里我们通过ps查看哪些容器正在运行,使用top来查看运行中容器的进程:
四、在运行的容器中启动新进程
虽然docker的理念是一个容器运行一种服务,我们仍旧需要在docker中运行多个进程。例如,我们需要对运行中的容器进行维护、监控,或者执行一些管理任务。
docker的exec命令(即execute),就是用来在已经运行的docker容器中启动新的进程:
docker exec -d -i -t 容器名(CONTAINER ID或NAME) [COMMAND][ARG...]
PS:“[COMMAND][ARG...]”代表需要执行的命令和参数
在这里,我们运行docker的exec命令,在正在运行中的“docker_test_d”容器中,启动一个新的bash会话:
然后我们使用Ctrl+P或Ctrl+Q的方式退出容器,使用top命令查看“docker_test_d”容器的进程:
可以发现新的bash进程在“docker_test_d”容器中启动成功。
五、如何停止守护式容器
docker提供两种命令来停止docker守护式容器,分别是“stop”和“kill”:
docker stop 容器名
docker kill 容器名
这两个命令稍微有点不一样。“stop”命令,是发送一个指定到容器,等待容器的停止。而“kill”命令,会直接停止容器。
六、总结
(1)使用Ctrl+P或Ctrl+Q的方式将一个交互式的容器转到后台运行。
(2)docker run -d,启动一个守护式容器
(3)docker logs,查看容器日志
(4)docker top,查看运行中容器的进程
(5)docker exec,为运行中的容器启动一个新的进程
(6)docker stop/kill,停止一个运行中的容器
---------------------
作者:光仔December
来源:优快云
原文:https://blog.youkuaiyun.com/acmman/article/details/83927649
版权声明:本文为博主原创文章,转载请附上博文链接!