如何使用 docker container kill 命令管理容器

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用 docker container kill 命令管理 Docker 容器。我们将从创建并运行一个简单容器开始。接着,你将探索如何使用默认信号停止正在运行的容器。最后,你将学习如何通过名称和编号使用自定义信号终止容器,从而掌握控制 Docker 容器生命周期的核心技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555111{{"如何使用 docker container kill 命令管理容器"}} docker/ps -.-> lab-555111{{"如何使用 docker container kill 命令管理容器"}} docker/stop -.-> lab-555111{{"如何使用 docker container kill 命令管理容器"}} docker/create -.-> lab-555111{{"如何使用 docker container kill 命令管理容器"}} docker/pull -.-> lab-555111{{"如何使用 docker container kill 命令管理容器"}} end

创建并运行简单容器

在这一步骤中,我们将学习如何创建并运行一个简单的 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 IDNAMES,我们稍后需要用它来停止容器。

现在,让我们使用 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 IDNAMES,我们将在后续步骤中使用这个 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 容器生命周期的实用技巧。