The main process inside the container will receive
SIGTERM
, and after a grace period,SIGKILL
. The first signal can be changed with theSTOPSIGNAL
instruction in the container’s Dockerfile, or the--stop-signal
option todocker run
.
The
docker kill
subcommand kills one or more containers. The main process inside the container is sentSIGKILL
signal (default), or the signal that is specified with the--signal
option. You can reference a container by its ID, ID-prefix, or name.
以上是官方分别对 stop 和 kill 的解释,可以发现 stop 在发送 SIGKILL 信号杀死容器进程之前会发送一个 SIGTERM 信号提醒容器进程即将被结束,以供容器有时间进行退出准备工作(优雅退出)
而 kill(不加 --signal)会直接向容器进程发送 SIGKILL 信号,直接终止进程
不管是 stop 还是 kill 都能通过 docker start 重新启动(不会重新分配容器ID)
但 docker rm 会直接删除容器,需要使用 docker run 才能重新启动容器,而且会重新分配容器ID
按我的理解就是:镜像就像安装包,容器就像安装包安装的一个个应用程序(而且同一种安装包能安装多个相同应用程序,只是容器ID不相同),kill 就像在winodws中直接通过任务管理器结束进程,而 stop 就像直接点击应用程序的 “×” 按钮进行退出,rm 就相当于直接卸载该应用程序(需要指定容器ID),run 就像安装该应用程序并运行,start 就像直接运行已经安装过的应用程序。
而通过 kill 和 stop 最后只是终止了该应用程序(容器),并没有将其删除,还可以通过 start 重新运行启动;而 rm 就会将该应用程序直接卸载删除,只能通过 run 从安装包(镜像)重新加载运行。