【Docker学习总结】6.Docker守护式容器

上一篇总结,我们学习了如何运行一个“交互式”的容器,这些容器在命令交互之后就会停止。但是,在大多数情况下,我们需要一个能够长期运行的容器来提供服务,这就是Docker的“守护式”进程。即我们可以使用守护方式来运行容器,使得容器可以在后台一直保持运行状态。

守护式进程的特点是:
(1)能够长期运行
(2)没有交互式会话
(3)适合运行应用程序和服务

一、运行守护式容器

那么,如何使用守护的形式来运行我们的容器呢?有两种方式进行守护式进程的运行:
●以命令方式运行守护式进程
●以参数设定方式运行守护式进程

(1)命令方式
首先我们使用run命令+bash会运行容器并进入容器的交互控制台:

docker run -i -t IMAGE /bin/bash

此时我们使用Ctrl+PCtrl+Q的方式退出容器的控制台,此时容器就会在后台运行。
测试:
首先我们启动一个交互式容器,然后并不使用exit命令来退出,而是使用Ctrl+P或Ctrl+Q的方式退出容器,然后使用docker ps来查看,发现容器依然在后台运行中:

那么我们如何再次进入已经退出的容器呢?这就需要docker的attach命令,附加到容器:
docker attach 容器名(CONTAINER ID或NAME)
我们是使用attach命令进入刚刚转入到后台运行的容器:

退出时我们继续使用Ctrl+P或Ctrl+Q的方式退出容器,容器依然会运行在后台,而直接使用exit命令,此时容器就会直接停止。

(2)参数设定方式
在使用run方式运行docker容器时,添加“-d”参数,表示在启动容器时,使用后台的方式来执行命令:

docker run -d 容器名(CONTAINER ID或NAME) [COMMAND][ARG...]

PS:“[COMMAND][ARG...]”代表需要执行的命令和参数
我们下面指定一个运行循环函数的容器:

这里我们为容器定义了一个name,然后在容器启动时使用一个shell脚本,来写一个循环,不停的打印“hello world”字符,中间间隔一秒,并且永远不停止。这里使用死循环的目的,是希望这个容器在执行命令时,一直在后台存留而不退出。因为“-d”参数实际上只是以后台的形式来运行命令,而在命令结束后,容器依旧会停止。
运行容器后,可以看到返回了一串字符:

该字符串是docker守护进程分配给这个容器的唯一ID。
我们使用ps命令查看正在运行的容器:

发现我们的容器正在运行中。

二、查看容器运行日志

那么,我们如何了解容器内部运行的情况呢?我们可以使用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,则永远返回最新的一行。

三、查看容器中的进程

除了使用logs命令来查看容器的运行情况,我们也使用“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”命令,会直接停止容器。
我们使用ps查看目前正在运行的容器,发现只有“docker_test_d”容器:

然后使用“stop”命令停止目前在系统中运行的“docker_test_d”容器:

可以看到,使用“stop”命令时需要等待一段时间,因为会给运行中的容器发出停止的信号,等待容器停止后,命令会返回容器的名字。查看ps就查看不到运行的容器了。
使用kill停止容器的话,会立刻杀死容器进程。

六、总结

本篇总结学习的知识点:
(1)使用Ctrl+P或Ctrl+Q的方式将一个交互式的容器转到后台运行。
(2)docker run -d,启动一个守护式容器
(3)docker logs,查看容器日志
(4)docker top,查看运行中容器的进程
(5)docker exec,为运行中的容器启动一个新的进程
(6)docker stop/kill,停止一个运行中的容器

更多命令的介绍,可以查看docker自带的使用手册,使用“man”命令,来查看各种命令的详细介绍,例如:
man docker-run
man docker-logs
man docker-top
man docker-exec 
...
例如我们运行“man docker-run”来查看run命令的详细介绍:

下一篇我们将学习如何使用已经学习到的docker命令,来搭建一个web服务。

参考资料:
《极客学院Docker学习》教学视频

转载请注明出处:https://blog.csdn.net/acmman/article/details/83927649

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值