简介
在本实验中,你将学习如何使用 docker container kill
命令管理 Docker 容器。我们将从创建并运行一个简单容器开始。接着,你将探索如何使用默认信号停止正在运行的容器。最后,你将学习如何通过名称和编号使用自定义信号终止容器,从而掌握控制 Docker 容器生命周期的核心技能。
在本实验中,你将学习如何使用 docker container kill
命令管理 Docker 容器。我们将从创建并运行一个简单容器开始。接着,你将探索如何使用默认信号停止正在运行的容器。最后,你将学习如何通过名称和编号使用自定义信号终止容器,从而掌握控制 Docker 容器生命周期的核心技能。
在这一步骤中,我们将学习如何创建并运行一个简单的 Docker 容器。容器是一种标准的软件单元,它将代码及其所有依赖项打包,使得应用程序能够在不同的计算环境中快速可靠地运行。
首先,我们需要拉取将要使用的 Docker 镜像。我们将使用 ubuntu
镜像,这是一个最小化的 Ubuntu 操作系统。
docker pull ubuntu
该命令会从 Docker Hub 下载 ubuntu
镜像到你的本地机器。你将看到显示下载进度的输出信息。
获取镜像后,我们就可以基于它运行容器。我们将在容器内执行一个简单的命令。
docker run ubuntu echo "Hello from Docker!"
让我们分解这个命令:
docker run
:这是运行新容器的命令ubuntu
:这是我们要使用的镜像名称echo "Hello from Docker!"
:这是在容器内执行的命令当你运行这个命令时,Docker 会从 ubuntu
镜像创建一个新容器,在其中执行 echo
命令,然后容器将停止运行。你应该会在终端看到输出 Hello from Docker!
。
要查看已运行的容器(包括已退出的容器),可以使用 docker ps -a
命令。
docker ps -a
该命令会列出所有容器(包括运行中和已停止的)。你应该能看到刚刚运行的容器条目,其状态为 "Exited"(已退出)。
在上一步骤中,我们运行了一个执行命令后立即退出的容器。本步骤中,我们将运行一个持续运行的容器,并学习如何使用默认信号停止它。
首先,让我们运行一个持续运行的容器。我们将再次使用 ubuntu
镜像,但这次会运行一个无限等待的命令。
docker run -d ubuntu sleep infinity
让我们解析这个命令:
docker run
:运行新容器的命令-d
:该标志使容器在后台运行(detached 模式),不会阻塞你的终端ubuntu
:使用的镜像名称sleep infinity
:在容器内运行的命令,该命令会使容器无限期运行运行此命令后,Docker 会打印容器 ID。该容器现在已在后台运行。
要查看运行中的容器,使用 docker ps
命令:
docker ps
你应该能看到刚启动的容器条目,状态为 "Up" 并附带运行时长。请记下该容器的 CONTAINER ID
或 NAMES
,我们稍后需要用它来停止容器。
现在,让我们使用 docker kill
命令停止运行中的容器。默认情况下,docker kill
会向容器的主进程发送 SIGKILL
信号。SIGKILL
是一个会立即终止进程且无法被捕获或忽略的信号。
将 <container_id_or_name>
替换为你从 docker ps
输出中获取的实际容器 ID 或名称:
docker kill <container_id_or_name>
运行此命令后,容器应该会停止。你可以再次运行 docker ps
来验证,该容器不应再出现在运行中容器的列表里。
要查看已停止的容器,可以使用 docker ps -a
,其状态现在应为 "Exited"(已退出)。
在上一步骤中,我们使用默认信号终止了一个运行中的容器。本步骤中,我们将创建并运行另一个容器,用于后续演示如何使用自定义信号终止容器。
和之前一样,我们将使用 ubuntu
镜像和 sleep infinity
命令在后台运行另一个容器:
docker run -d ubuntu sleep infinity
该命令会在后台启动一个无限运行的新容器。Docker 会输出新容器的 ID。
使用 docker ps
命令确认容器正在运行:
docker ps
你应该能看到新容器被列出,状态为 "Up"。请记下该容器的 CONTAINER ID
或 NAMES
,我们将在后续步骤中使用这个 ID 或名称来通过不同信号终止容器。
现在这个容器已准备就绪,可供我们练习发送不同的信号。
在上一步骤中,我们启动了一个当前正在运行的容器。本步骤将学习如何通过指定信号名称来终止该容器。
docker kill
命令允许你向容器内的主进程发送特定信号。默认情况下会发送 SIGKILL
,但你可以指定其他信号。SIGTERM
是常用于优雅关闭应用程序的信号,它会请求进程终止。与 SIGKILL
不同,进程可以捕获 SIGTERM
信号并在退出前执行清理操作。
首先,使用 docker ps
确认上一步骤中运行容器的 ID 或名称:
docker ps
现在使用带 -s
标志的 docker kill
命令指定信号名称。我们将使用 SIGTERM
。请将 <container_id_or_name>
替换为你实际运行的容器 ID 或名称:
docker kill -s SIGTERM <container_id_or_name>
该命令会向指定容器的主进程发送 SIGTERM
信号。如果容器内的应用程序设计为能处理 SIGTERM
,它将尝试优雅关闭。若未处理该信号或未在超时时间内退出,Docker 最终会发送 SIGKILL
强制终止。
运行以下命令验证容器是否已停止:
docker ps
该容器不应再出现在运行列表中。你也可以使用 docker ps -a
查看其状态,此时应显示为 "Exited"(已退出)。
在上一步骤中,我们通过信号名称(SIGTERM
)终止了容器。本步骤将学习如何使用信号编号来终止容器。
每个信号都有对应的编号。例如,SIGKILL
对应编号 9,SIGTERM
对应编号 15。在 Linux 系统中,可以通过 kill -l
命令查看信号列表及其编号:
kill -l
该命令会输出信号名称及其对应编号。
现在,让我们像之前步骤一样运行一个持续运行的容器:
docker run -d ubuntu sleep infinity
使用 docker ps
获取这个新运行容器的 ID 或名称:
docker ps
接下来我们将使用带 -s
标志的 docker kill
命令,但这次我们将提供信号编号而非名称。我们使用编号 9,即 SIGKILL
。请将 <container_id_or_name>
替换为你实际运行的容器 ID 或名称:
docker kill -s 9 <container_id_or_name>
该命令会向指定容器的主进程发送 SIGKILL
信号(编号 9)。如前所述,SIGKILL
会立即终止进程。
运行以下命令验证容器是否已停止:
docker ps
该容器不应再出现在运行列表中。你也可以使用 docker ps -a
查看其状态,此时应显示为 "Exited"(已退出)。
在编写脚本或需要精确指定信号时,使用信号编号会非常有用。
在本实验中,我们学习了使用 docker container kill
命令管理 Docker 容器的基础操作。首先基于 ubuntu
镜像创建并运行了一个简单容器,执行基础命令后通过 docker ps -a
观察其退出状态。
随后我们探索了如何终止运行中的容器。先演示了使用默认信号终止容器,接着通过自定义信号名称及其对应数值,深入体验了 docker container kill
命令的灵活性。这些实践操作帮助我们掌握了控制 Docker 容器生命周期的实用技巧。