如何使用 docker compose unpause 命令恢复服务

DockerDockerBeginner
立即练习

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

简介

在本实验中,你将学习如何使用 docker compose unpause 命令来恢复已暂停的服务。我们将从创建一个简单的 docker-compose.yml 文件开始,使用 Nginx 镜像定义一个基础的 web 服务。

完成设置后,你将使用 docker compose up 启动服务,然后通过 docker compose pause 暂停它们。最后,你将使用 docker compose unpause 恢复服务并验证它们是否正常运行。这个动手练习将展示暂停和恢复 Docker Compose 服务的实际应用。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555095{{"如何使用 docker compose unpause 命令恢复服务"}} docker/ps -.-> lab-555095{{"如何使用 docker compose unpause 命令恢复服务"}} docker/pull -.-> lab-555095{{"如何使用 docker compose unpause 命令恢复服务"}} end

创建一个简单的 docker-compose.yml 文件

在本步骤中,我们将创建一个基础的 docker-compose.yml 文件。该文件是 Docker Compose 的核心,用于定义应用程序的服务、网络和卷。开始之前,我们需要先安装 Docker Compose,因为当前环境中并未预装。

首先,让我们安装 Docker Compose。我们将下载最新稳定版本并赋予可执行权限。

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

现在,让我们通过检查版本来验证安装是否成功。

docker-compose --version

你应该能在控制台看到版本信息,这表示 Docker Compose 已正确安装。

接下来,切换到 ~/project 目录,这是本实验的工作目录。

cd ~/project

现在,我们将在此目录下创建名为 docker-compose.yml 的文件。该文件将使用 nginx 镜像定义一个简单服务。我们将使用 nano 编辑器来创建和编辑该文件。

nano docker-compose.yml

nano 编辑器中,粘贴以下内容:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

让我们解析这个 docker-compose.yml 文件:

  • version: '3.8' 指定了 Docker Compose 文件格式版本
  • services: 定义了组成应用程序的不同服务
  • web: 是我们的服务名称,你可以自定义服务名称
  • image: nginx:latest 指定了该服务使用的 Docker 镜像。这里我们使用官方 Nginx 镜像的最新版本。如果本地没有该镜像,Docker Compose 会在启动服务时自动从 Docker Hub 拉取
  • ports: 映射主机与容器之间的端口。"80:80" 将主机的 80 端口映射到容器的 80 端口。这意味着你可以通过访问主机的 http://localhost(或虚拟机的 IP 地址)来访问容器内运行的 Nginx 网页服务器

粘贴内容后,按 Ctrl + O 保存文件,按 Enter 确认文件名,最后按 Ctrl + X 退出 nano 编辑器。

至此,你已成功创建了第一个 docker-compose.yml 文件。下一步我们将使用该文件启动 Nginx 服务。

使用 docker compose up 启动服务

在本步骤中,我们将使用 docker-compose up 命令来启动 docker-compose.yml 文件中定义的服务。该命令会构建、(重新)创建、启动并连接到服务的容器。

请确保你位于 ~/project 目录下,这是上一步创建 docker-compose.yml 文件的位置。

cd ~/project

现在运行以下命令来启动 Nginx 服务:

docker-compose up -d

让我们解析这个命令:

  • docker-compose up 启动 docker-compose.yml 文件中定义的服务
  • -d 以分离模式运行容器,意味着它们将在后台运行且不会阻塞你的终端

首次运行此命令时,如果系统中不存在 nginx:latest 镜像,Docker Compose 会从 Docker Hub 拉取该镜像。你将看到镜像拉取、容器创建和启动的相关输出。

要验证容器是否正在运行,可以使用 docker ps 命令。

docker ps

你应该能看到 web 服务(或基于你的目录和服务名称的类似名称)的条目,状态显示为 Up。这表示 Nginx 容器正在运行。

你也可以使用 curl 访问暴露的 80 端口来验证 Nginx 网页服务器是否可访问。

curl http://localhost:80

你应该能在终端看到默认的 Nginx 欢迎页面 HTML 输出。这确认了 Nginx 服务器正在容器内运行,并且可以通过映射的端口从主机访问。

使用 docker compose pause 暂停服务

在本步骤中,我们将学习如何使用 docker-compose pause 命令暂停正在运行的服务。暂停容器会临时挂起其所有进程,这与停止容器(会终止进程)有所不同。

请确保你位于 ~/project 目录下,该目录包含你的 docker-compose.yml 文件且服务正在运行。

cd ~/project

现在执行以下命令来暂停 web 服务:

docker-compose pause web

你将看到输出显示 web 服务正在被暂停。

要验证容器是否已暂停,可以使用 docker ps 命令。

docker ps

查看 web 服务容器的 STATUS 列,现在应该显示类似 Up ... (Paused) 的状态。这确认了容器的进程已被挂起。

当容器暂停时,其中的 Nginx 网页服务器不会处理任何请求。如果你尝试使用 curl 访问,请求很可能会挂起或超时,因为服务器没有响应。

curl http://localhost:80

该命令不会像容器运行时那样立即返回 Nginx 欢迎页面。你可能需要在一段时间后按 Ctrl + C 来中断命令。

暂停功能在你需要临时停止服务而不丢失当前状态时非常有用。

使用 docker compose unpause 恢复服务

在本步骤中,我们将使用 docker-compose unpause 命令恢复被暂停的服务。该命令用于解除容器的暂停状态。

请确保你位于 ~/project 目录下,该目录包含你的 docker-compose.yml 文件。

cd ~/project

现在执行以下命令来恢复 web 服务:

docker-compose unpause web

你将看到输出显示 web 服务正在被恢复。

要验证容器是否已解除暂停状态并正常运行,可以再次使用 docker ps 命令。

docker ps

观察 web 服务容器的 STATUS 列,现在应该显示类似 Up ... 的状态,不再有 (Paused) 标记。这表示容器的进程已恢复运行。

恢复后,容器内的 Nginx 网页服务器将重新开始处理请求。你可以通过 curl 访问暴露的 80 端口来确认这一点。

curl http://localhost:80

这次你应该能立即收到默认 Nginx 欢迎页面的 HTML 输出,就像最初启动容器时一样。这确认了服务已完全恢复正常运行。

恢复操作是暂停操作的对应功能,让你能够快速从暂停状态重新启动服务。

验证服务在恢复后正常运行

在本步骤中,我们将进行最终验证,确保 Nginx 服务在恢复后完全正常运行。虽然上一步已经检查了容器状态,但确认容器内运行的应用程序是否按预期响应仍是良好实践。

请确保你位于 ~/project 目录下。

cd ~/project

我们将再次使用 curl 命令访问运行在 80 端口的 Nginx 网页服务器。

curl http://localhost:80

你应该能在终端看到默认 Nginx 欢迎页面的 HTML 内容输出。这确认了容器内的 Nginx 进程正在运行并提供内容服务。

此步骤强化了一个理解:恢复容器可以让其中的应用程序继续正常运作。

最后,要清理由 Docker Compose 创建的运行容器和网络,可以使用 docker-compose down 命令。该命令会停止并移除由 up 创建的容器、网络和卷。

docker-compose down

你将看到输出显示服务和网络正在被停止和移除。

要确认容器已停止运行,可以使用 docker ps 命令。

docker ps

输出结果应显示没有正在运行的容器,表明 Nginx 服务已成功停止并移除。

总结

在本实验中,我们学习了如何使用 Docker Compose 来管理服务的生命周期。我们首先安装了 Docker Compose 并创建了一个 docker-compose.yml 文件来定义一个简单的 Nginx 服务。

随后,我们使用 docker compose up 启动定义的服务,用 docker compose pause 临时挂起服务进程,最后用 docker compose unpause 恢复被暂停的服务。我们在每个步骤后都验证了服务状态,展示了这些 Docker Compose 命令在控制服务执行方面的实际应用。