如何使用 docker stack rm 命令删除堆栈

DockerDockerBeginner
立即练习

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

简介

在这个实验中,你将学习如何有效使用 docker stack rm 命令来移除部署在 Docker Swarm 环境中的 Docker 堆栈。你将从准备一个单节点 Docker Swarm 开始,对其进行初始化并验证其状态。

完成环境设置后,你将使用 Docker Compose 文件部署一个示例堆栈,以了解部署过程。本实验的核心是移除堆栈:你将首先练习移除单个已部署的堆栈,然后部署多个堆栈,学习如何使用 docker stack rm 命令同时移除多个堆栈。通过这个实践经验,你将掌握管理和清理 Docker Swarm 部署的技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/ls -.-> lab-555237{{"如何使用 docker stack rm 命令删除堆栈"}} docker/ps -.-> lab-555237{{"如何使用 docker stack rm 命令删除堆栈"}} docker/rm -.-> lab-555237{{"如何使用 docker stack rm 命令删除堆栈"}} docker/pull -.-> lab-555237{{"如何使用 docker stack rm 命令删除堆栈"}} docker/info -.-> lab-555237{{"如何使用 docker stack rm 命令删除堆栈"}} docker/version -.-> lab-555237{{"如何使用 docker stack rm 命令删除堆栈"}} end

准备 Docker Swarm 环境

在这一步中,你将通过初始化 Docker Swarm 来为部署 Docker 堆栈准备环境。Docker Swarm 是 Docker 原生的集群和编排解决方案,它允许你创建和管理 Docker 节点集群。

首先,让我们检查 Docker 是否正在运行且可访问。你可以通过运行一个简单的 Docker 命令来完成此操作。

docker version

你应该会看到显示 Docker 客户端和服务器版本的输出。这确认了 Docker 已安装并正在运行。

接下来,我们需要初始化 Docker Swarm。由于这是一个单节点环境,我们将在当前机器上初始化集群。

docker swarm init

此命令将初始化集群,并使当前节点成为管理节点。输出将提供有关将其他节点加入集群的信息,但在本实验中,我们仅使用单个节点。

为了确认集群已成功初始化,你可以检查集群状态。

docker info | grep Swarm

输出应显示 Swarm: active,表明该节点上的集群处于活动状态。

最后,让我们验证当前节点是否是集群的一部分,并且是管理节点。

docker node ls

你应该会看到集群中的节点列表,当前节点会被列出,其状态为 ReadyLeader

部署示例堆栈

在这一步中,你将学习如何在 Docker Swarm 上以堆栈形式部署一个示例应用程序。堆栈是一组相关的服务,它们共享依赖项,并且可以一起进行管理。我们将使用一个涉及 Nginx Web 服务器的简单示例。

在部署堆栈之前,我们需要创建一个 Docker Compose 文件,该文件定义了堆栈中的服务。Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。尽管 Docker Compose 没有预先安装,但 docker stack deploy 命令可以读取 Compose 文件。

首先,让我们为堆栈定义创建一个目录。导航到你的主目录并创建一个名为 my-nginx-stack 的新目录。

cd ~/project
mkdir my-nginx-stack
cd my-nginx-stack

现在,使用 nano 编辑器在 my-nginx-stack 目录中创建一个名为 docker-compose.yml 的文件。

nano docker-compose.yml

将以下内容粘贴到 docker-compose.yml 文件中:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure

这个 docker-compose.yml 文件定义了一个名为 web 的单一服务,它使用 nginx:latest 镜像。它将主机上的 80 端口映射到容器内的 80 端口,并指定该服务应该有一个副本。restart_policy 确保服务在失败时会重新启动。

Ctrl + X,然后按 Y,再按 Enter 保存文件。

在部署之前,让我们拉取 nginx:latest 镜像,以确保它在本地可用。

docker pull nginx:latest

现在,使用 docker stack deploy 命令部署堆栈。我们将堆栈命名为 nginx_stack

docker stack deploy -c docker-compose.yml nginx_stack

这个命令读取 docker-compose.yml 文件,并将其中定义的服务作为 nginx_stack 的一部分创建。

为了验证堆栈已部署且服务正在运行,你可以列出堆栈中的服务。

docker stack services nginx_stack

你应该会看到显示 nginx_stack_web 服务的输出,其中 1/1 个副本正在运行。

你还可以检查正在运行的容器,以查看 Nginx 容器。

docker ps

你应该会看到一个运行 nginx:latest 镜像的容器,它与 nginx_stack_web 服务相关联。

最后,你可以通过打开 Web 浏览器并导航到你的 LabEx 虚拟机的 IP 地址来访问 Nginx Web 服务器。你应该会看到默认的 Nginx 欢迎页面。

删除单个堆栈

在这一步中,你将学习如何从 Docker Swarm 中删除已部署的堆栈。删除堆栈将停止并移除与该堆栈关联的所有服务和容器。

在上一步中,我们部署了一个名为 nginx_stack 的堆栈。要删除这个堆栈,我们使用 docker stack rm 命令,后面跟上堆栈名称。

docker stack rm nginx_stack

此命令将启动删除过程。Docker Swarm 将停止并移除该服务及其关联的容器。

你应该会看到表明堆栈及其服务正在被移除的输出。

要验证堆栈是否已被删除,你可以再次列出已部署的堆栈。

docker stack ls

nginx_stack 应该不再出现在已部署堆栈的列表中。

你还可以检查正在运行的服务,以确认 nginx_stack_web 服务已停止运行。

docker stack services nginx_stack

此命令应该返回错误或没有输出,表明堆栈及其服务已被移除。

最后,你可以检查正在运行的容器,以确保与该堆栈关联的 Nginx 容器已被移除。

docker ps

运行 nginx:latest 镜像的 nginx_stack_web 服务容器应该不再列出。

部署多个示例堆栈

在这一步中,你将学习如何在 Docker Swarm 上部署多个堆栈。这展示了你如何在同一个 Swarm 中独立管理不同的应用程序或服务。

我们将部署两个简单的堆栈:一个使用 Nginx,另一个使用 Apache HTTP Server。

首先,让我们为 Apache 堆栈定义创建一个目录。回到 ~/project 目录,并创建一个名为 my-apache-stack 的新目录。

cd ~/project
mkdir my-apache-stack
cd my-apache-stack

现在,使用 nano 编辑器在 my-apache-stack 目录中创建一个名为 docker-compose.yml 的文件。

nano docker-compose.yml

将以下内容粘贴到 docker-compose.yml 文件中:

version: "3.8"
services:
  web:
    image: httpd:latest
    ports:
      - "81:80"
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure

这个 docker-compose.yml 文件定义了一个名为 web 的服务,它使用 httpd:latest 镜像。它将主机上的 81 端口映射到容器内的 80 端口,以避免与我们稍后将部署的 Nginx 堆栈发生端口冲突。它还指定了一个副本和一个重启策略。

Ctrl + X,然后按 Y,再按 Enter 保存文件。

在部署之前,让我们拉取 httpd:latest 镜像。

docker pull httpd:latest

现在,使用 docker stack deploy 命令部署 Apache 堆栈。我们将这个堆栈命名为 apache_stack

docker stack deploy -c docker-compose.yml apache_stack

这个命令将部署 Apache 堆栈。

接下来,让我们回到 my-nginx-stack 目录,再次部署 Nginx 堆栈。

cd ~/project/my-nginx-stack

使用 docker stack deploy 命令部署 Nginx 堆栈。我们将这个堆栈命名为 nginx_stack

docker stack deploy -c docker-compose.yml nginx_stack

现在,让我们验证两个堆栈是否都已部署。列出已部署的堆栈。

docker stack ls

你应该会看到 apache_stacknginx_stack 都被列出。

你还可以分别检查每个堆栈的服务。

docker stack services apache_stack
docker stack services nginx_stack

你应该会看到 apache_stack_web 服务和 nginx_stack_web 服务,两者都以 1/1 个副本运行。

你可以通过打开 Web 浏览器并访问你的 LabEx 虚拟机 IP 地址的 81 端口来访问 Apache Web 服务器。你应该会看到默认的 Apache 欢迎页面。Nginx Web 服务器仍然可以通过 80 端口访问。

删除多个堆栈

在这最后一步中,你将学习如何从 Docker Swarm 中删除多个已部署的堆栈。这与删除单个堆栈类似,但你需要为每个要删除的堆栈重复该过程。

在上一步中,我们部署了两个堆栈:apache_stacknginx_stack。现在我们将把它们都删除。

首先,让我们删除 apache_stack。使用 docker stack rm 命令,后面跟上堆栈名称。

docker stack rm apache_stack

你应该会看到表明 apache_stack 及其服务正在被移除的输出。

接下来,让我们删除 nginx_stack。同样使用 docker stack rm 命令,后面跟上堆栈名称。

docker stack rm nginx_stack

你应该会看到表明 nginx_stack 及其服务正在被移除的输出。

要验证这两个堆栈是否都已被删除,再次列出已部署的堆栈。

docker stack ls

apache_stacknginx_stack 都不应出现在已部署堆栈的列表中。

你还可以检查正在运行的容器,以确保与这两个堆栈关联的容器都已被移除。

docker ps

应该没有运行 httpd:latestnginx:latest 镜像的容器,这些镜像曾是这些堆栈的一部分。

至此,关于部署和删除 Docker 堆栈的实验就结束了。你已经成功初始化了一个 Docker Swarm,部署并删除了单个和多个堆栈。

总结

在这个实验中,你学习了如何通过初始化单节点 Swarm 并验证其状态来准备 Docker Swarm 环境。然后,你练习了使用 Docker Compose 文件将示例应用程序作为堆栈进行部署。最后,你掌握了使用 docker stack rm 命令从 Docker Swarm 中删除单个和多个已部署堆栈的方法,展示了部署后清理资源的过程。