提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 1.任务详情
- 2.相关知识
- 使用docker stop停止一个容器
- 在什么情况下容器启动后会立即终止?
- 如何才能使容器启动后不立即终止?
- 将启动命令设置为死循环
- 将启动命令设置为“启动一直运行的子进程”
- 3.任务要求
- 4.笔者答案
- 总结
前言
Docker基础实战教程一:入门
四、 停止一个容器
提示:以下是本篇文章正文内容,下面案例可供参考
1.任务详情
在日常的Docker工作学习中,有些时候需要停止某个容器。例如有一个运行着Java程序的容器,它占用的资源过多了,那么如何停止一个容器呢?
本关的任务是学习停止一个正在运行的容器,要求学习者参照示例将正在运行的名为firstContainer的容器停止。
2.相关知识
使用docker stop停止一个容器
docker stop
可以用来终止一个正在运行的容器。
例如想要停止一个名为firstContainer 的容器,可以这么执行docker stop firstContainer
。该命令执行完之后,firstContainer将会处于终止状态。而上一节我们谈到过,终止状态的容器,可以使用docker ps –a
查看到。
在什么情况下容器启动后会立即终止?
实际情况中,除了使用docker stop
命令来强制地终止一个容器以外,当容器的启动命令终结时,容器也自动会终止。
以docker run --name testcontainer ubuntu echo 'hello docker'
为例,echo 'hello docker'
就是该容器的启动命令。实际上执行完这条命令后,执行docker ps -a
,可以发现testcontainer容器是处于终止状态的,如下图所示:
[root@localhost Desktop]# docker run --name testcontainer ubuntu echo 'hello docker'
hello docker
[root@localhost Desktop]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da14116bf641 ubuntu "echo 'hello docker'" 6 seconds ago Exited (0) 4 seconds ago testcontainer
前面我们说过,在容器启动时,会执行容器的启动命令。而执行上述命令创建并启动容器后,由于容器的启动命令echo 'hello docker'
会立刻执行完毕,所以容器也随之终止,因此使用docker ps -a
查看该容器的状态是终止状态。
如何才能使容器启动后不立即终止?
如果容器的sh主进程不停止,是不是以为这容器就不会停止?答案是肯定的。因此,如果使启动命令不能执行完毕,或者在执行完启动命令后,容器的sh主进程不停止,那么容器在启动后就不会立即终止了!
下面举两个能使容器启动后不立即停止的例子:
将启动命令设置为死循环
-
docker run ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
这条命令在创建并启动容器之后,会执行/bin/sh -c "while true; do echo hello world; sleep 1; done"
,由于该命令永远都不会执行完毕,除非强行终止,所以容器的主进程sh不会停止,因此容器也将不会停止。但是这样的做的话,无法正常的操作容器,而且它会占据资源,所以这种做法在实际的工作中意义并不大。
将启动命令设置为“启动一直运行的子进程”
2. docker run --name first_container -it ubuntu /bin/bash
执行完这条命令后,创建并启动容器之后,执行/bin/bash
,会启动一个子进程,此时父进程(也就是容器的主进程sh)会进入sleep状态,由于sleep状态不是终止状态,所以容器会继续运行。
为什么在容器中输入exit或者执行ctrl D后,容器将会终止呢,这是因为exit会退出(结束)当前进程,也就是/bin/bash,由于子进程结束,sh主进程恢复到运行态,然而由于没有命令需要继续执行,所以sh主进程结,因此容器终止。
3.任务要求
本关的编程任务是补全step4/stopcontainer.sh文件中的内容,要求停止一个正在运行的的容器。具体要求如下:
- 将一个正在运行的名为“firstContainer”的容器停止;
4.笔者答案
#!/bin/bash
#注意如果想在右侧使用命令行模拟操作,请先输入
#service docker start
#否则将不能执行docker命令
#以ubuntu镜像为基础,创建并在后台启动了一个名为firstContainer的容器(-d看不懂没关系,下一关会介绍的)
#拉取ubutun 最新镜像,实际生产中,docker pull ubutun可以省略,docker run的时候会自己去拉取。
docker pull ubuntu
docker run -itd --name firstContainer ubuntu /bin/bash
#将firstContainer容器停止!
#********** Begin *********#
docker stop firstContainer
#********** End **********#
核心代码
service docker start
docker pull ubuntu
docker run -itd --name firstContainer ubuntu /bin/bash
#将firstContainer容器停止!
docker stop firstContainer
运行截图
总结
Docker基础实战教程一:入门
四、 停止一个容器