Cómo usar el comando docker stack rm para eliminar stacks

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo utilizar de manera efectiva el comando docker stack rm para eliminar stacks de Docker desplegados en un entorno de Docker Swarm. Comenzarás preparando un Docker Swarm de un solo nodo, inicializándolo y verificando su estado.

Después de configurar el entorno, desplegarás un stack de muestra utilizando un archivo Docker Compose para entender el proceso de despliegue. El núcleo del laboratorio se centra en la eliminación de stacks: primero, practicarás la eliminación de un solo stack desplegado, y luego desplegarás múltiples stacks para aprender cómo eliminar varios stacks simultáneamente utilizando el comando docker stack rm. Esta experiencia práctica te proporcionará las habilidades necesarias para administrar y limpiar tus despliegues en 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{{"Cómo usar el comando docker stack rm para eliminar stacks"}} docker/ps -.-> lab-555237{{"Cómo usar el comando docker stack rm para eliminar stacks"}} docker/rm -.-> lab-555237{{"Cómo usar el comando docker stack rm para eliminar stacks"}} docker/pull -.-> lab-555237{{"Cómo usar el comando docker stack rm para eliminar stacks"}} docker/info -.-> lab-555237{{"Cómo usar el comando docker stack rm para eliminar stacks"}} docker/version -.-> lab-555237{{"Cómo usar el comando docker stack rm para eliminar stacks"}} end

Preparar un entorno de Docker Swarm

En este paso, prepararás tu entorno para desplegar stacks de Docker inicializando un Docker Swarm. Docker Swarm es una solución nativa de agrupación (clustering) y orquestación para Docker. Permite crear y administrar un grupo (swarm) de nodos de Docker.

Primero, vamos a comprobar si Docker está en ejecución y es accesible. Puedes hacer esto ejecutando un simple comando de Docker.

docker version

Deberías ver una salida que muestre las versiones del cliente y del servidor de Docker. Esto confirma que Docker está instalado y en ejecución.

A continuación, necesitamos inicializar el Docker Swarm. Dado que este es un entorno de un solo nodo, inicializaremos el swarm en la máquina actual.

docker swarm init

Este comando inicializa el swarm y convierte el nodo actual en un nodo administrador (manager node). La salida proporcionará información sobre cómo unir otros nodos al swarm, pero para este laboratorio, solo usaremos un solo nodo.

Para confirmar que el swarm se ha inicializado correctamente, puedes comprobar el estado del swarm.

docker info | grep Swarm

La salida debería mostrar Swarm: active, lo que indica que el swarm está activo en este nodo.

Finalmente, vamos a verificar que el nodo actual forma parte del swarm y es un administrador.

docker node ls

Deberías ver una lista de nodos en el swarm, con el nodo actual enumerado y su estado como Ready y Leader.

Desplegar un stack de muestra

En este paso, aprenderás cómo desplegar una aplicación de muestra como un stack en tu Docker Swarm. Un stack es un grupo de servicios relacionados que comparten dependencias y pueden ser administrados juntos. Utilizaremos un ejemplo sencillo que involucra un servidor web Nginx.

Antes de desplegar el stack, necesitamos crear un archivo Docker Compose que defina los servicios de nuestro stack. Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores. Aunque Docker Compose no está preinstalado, el comando docker stack deploy puede leer archivos Compose.

Primero, creemos un directorio para la definición de nuestro stack. Navega a tu directorio principal y crea un nuevo directorio llamado my-nginx-stack.

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

Ahora, crea un archivo llamado docker-compose.yml dentro del directorio my-nginx-stack utilizando el editor nano.

nano docker-compose.yml

Pega el siguiente contenido en el archivo docker-compose.yml:

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

Este archivo docker-compose.yml define un solo servicio llamado web que utiliza la imagen nginx:latest. Mapea el puerto 80 del host al puerto 80 del contenedor y especifica que debe haber una réplica de este servicio. La restart_policy asegura que el servicio se reiniciará si falla.

Guarda el archivo presionando Ctrl + X, luego Y y Enter.

Antes de desplegar, vamos a descargar la imagen nginx:latest para asegurarnos de que esté disponible localmente.

docker pull nginx:latest

Ahora, despleguemos el stack utilizando el comando docker stack deploy. Nombraremos nuestro stack nginx_stack.

docker stack deploy -c docker-compose.yml nginx_stack

Este comando lee el archivo docker-compose.yml y crea los servicios definidos en él como parte del nginx_stack.

Para verificar que el stack se ha desplegado y el servicio está en ejecución, puedes listar los servicios del stack.

docker stack services nginx_stack

Deberías ver una salida que muestre el servicio nginx_stack_web con 1/1 réplicas en ejecución.

También puedes comprobar los contenedores en ejecución para ver el contenedor Nginx.

docker ps

Deberías ver un contenedor ejecutando la imagen nginx:latest, asociado al servicio nginx_stack_web.

Finalmente, puedes acceder al servidor web Nginx abriendo un navegador web y navegando a la dirección IP de tu máquina virtual (VM) de LabEx. Deberías ver la página de bienvenida predeterminada de Nginx.

Eliminar un solo stack

En este paso, aprenderás cómo eliminar un stack desplegado de tu Docker Swarm. Eliminar un stack detendrá y eliminará todos los servicios y contenedores asociados a ese stack.

En el paso anterior, desplegamos un stack llamado nginx_stack. Para eliminar este stack, usamos el comando docker stack rm seguido del nombre del stack.

docker stack rm nginx_stack

Este comando iniciará el proceso de eliminación. Docker Swarm detendrá y eliminará el servicio y su contenedor asociado.

Deberías ver una salida que indique que el stack y sus servicios se están eliminando.

Para verificar que el stack se ha eliminado, puedes listar los stacks desplegados nuevamente.

docker stack ls

El nginx_stack ya no debería aparecer en la lista de stacks desplegados.

También puedes comprobar los servicios en ejecución para confirmar que el servicio nginx_stack_web ya no está en ejecución.

docker stack services nginx_stack

Este comando debería devolver un error o no mostrar salida, lo que indica que el stack y sus servicios se han eliminado.

Finalmente, puedes comprobar los contenedores en ejecución para asegurarte de que el contenedor Nginx asociado al stack se ha eliminado.

docker ps

El contenedor que ejecuta la imagen nginx:latest para el servicio nginx_stack_web ya no debería aparecer en la lista.

Desplegar múltiples stacks de muestra

En este paso, aprenderás cómo desplegar múltiples stacks en tu Docker Swarm. Esto demuestra cómo puedes administrar diferentes aplicaciones o servicios de forma independiente dentro del mismo swarm.

Desplegaremos dos stacks simples: uno que utiliza Nginx y otro que utiliza el servidor HTTP Apache.

Primero, creemos un directorio para la definición del stack de Apache. Regresa al directorio ~/project y crea un nuevo directorio llamado my-apache-stack.

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

Ahora, crea un archivo llamado docker-compose.yml dentro del directorio my-apache-stack utilizando el editor nano.

nano docker-compose.yml

Pega el siguiente contenido en el archivo docker-compose.yml:

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

Este archivo docker-compose.yml define un servicio llamado web que utiliza la imagen httpd:latest. Mapea el puerto 81 del host al puerto 80 del contenedor para evitar conflictos de puertos con el stack de Nginx que desplegaremos más tarde. También especifica una réplica y una política de reinicio.

Guarda el archivo presionando Ctrl + X, luego Y y Enter.

Antes de desplegar, descarguemos la imagen httpd:latest.

docker pull httpd:latest

Ahora, despleguemos el stack de Apache utilizando el comando docker stack deploy. Nombraremos este stack apache_stack.

docker stack deploy -c docker-compose.yml apache_stack

Este comando desplega el stack de Apache.

A continuación, regresemos al directorio my-nginx-stack para desplegar nuevamente el stack de Nginx.

cd ~/project/my-nginx-stack

Despleguemos el stack de Nginx utilizando el comando docker stack deploy. Nombraremos este stack nginx_stack.

docker stack deploy -c docker-compose.yml nginx_stack

Ahora, verifiquemos que ambos stacks se hayan desplegado. Lista los stacks desplegados.

docker stack ls

Deberías ver tanto apache_stack como nginx_stack en la lista.

También puedes comprobar los servicios de cada stack individualmente.

docker stack services apache_stack
docker stack services nginx_stack

Deberías ver el servicio apache_stack_web y el servicio nginx_stack_web, ambos en ejecución con 1/1 réplicas.

Puedes acceder al servidor web Apache abriendo un navegador web y navegando a la dirección IP de tu máquina virtual (VM) de LabEx en el puerto 81. Deberías ver la página de bienvenida predeterminada de Apache. El servidor web Nginx debería seguir siendo accesible en el puerto 80.

Eliminar múltiples stacks

En este último paso, aprenderás cómo eliminar múltiples stacks desplegados de tu Docker Swarm. Esto es similar a eliminar un solo stack, pero repetirás el proceso para cada stack que desees eliminar.

En el paso anterior, desplegamos dos stacks: apache_stack y nginx_stack. Ahora los eliminaremos a ambos.

Primero, eliminemos el apache_stack. Utiliza el comando docker stack rm seguido del nombre del stack.

docker stack rm apache_stack

Deberías ver una salida que indique que el apache_stack y sus servicios se están eliminando.

A continuación, eliminemos el nginx_stack. Utiliza el comando docker stack rm seguido del nombre del stack.

docker stack rm nginx_stack

Deberías ver una salida que indique que el nginx_stack y sus servicios se están eliminando.

Para verificar que ambos stacks se han eliminado, lista los stacks desplegados nuevamente.

docker stack ls

Ni apache_stack ni nginx_stack deberían aparecer en la lista de stacks desplegados.

También puedes comprobar los contenedores en ejecución para asegurarte de que los contenedores asociados a ambos stacks se han eliminado.

docker ps

No debería haber contenedores ejecutando las imágenes httpd:latest o nginx:latest que formaban parte de estos stacks.

Con esto se concluye el laboratorio sobre desplegar y eliminar stacks de Docker. Has inicializado con éxito un Docker Swarm, desplegado y eliminado stacks individuales y múltiples.

Resumen

En este laboratorio, aprendiste cómo preparar un entorno de Docker Swarm inicializando un swarm de un solo nodo y verificando su estado. Luego, practicaste desplegar una aplicación de muestra como un stack utilizando un archivo Docker Compose. Finalmente, dominaste el uso del comando docker stack rm para eliminar tanto un solo stack como múltiples stacks desplegados de tu Docker Swarm, demostrando el proceso de limpieza de recursos después del despliegue.