Как использовать команду docker stack rm для удаления стэков

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии вы научитесь эффективно использовать команду docker stack rm для удаления Docker-стэков, развернутых в среде Docker Swarm. Вы начнете с подготовки одноузлового 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-стэков, инициализировав Docker Swarm. Docker Swarm - это встроенное решение для кластеризации и оркестрации Docker. Оно позволяет создавать и управлять группой (сваرمом) узлов Docker.

Сначала проверим, запущен ли Docker и доступен ли он. Это можно сделать, выполнив простую команду Docker.

docker version

Вы должны увидеть вывод, показывающий версии клиента и сервера Docker. Это подтверждает, что Docker установлен и запущен.

Далее нам нужно инициализировать Docker Swarm. Поскольку это одноузловая среда, мы инициализируем сварм на текущем компьютере.

docker swarm init

Эта команда инициализирует сварм и делает текущий узел управляющим (manager node). В выводе будут указаны инструкции по присоединению других узлов к сварму, но в рамках этого лабораторного занятия мы будем использовать только один узел.

Чтобы убедиться, что сварм успешно инициализирован, можно проверить его статус.

docker info | grep Swarm

В выводе должно быть указано Swarm: active, что означает, что сварм активен на этом узле.

Наконец, убедимся, что текущий узел является частью сварма и является управляющим.

docker node ls

Вы должны увидеть список узлов в сварме, где текущий узел будет перечислен со статусом Ready и Leader.

Развертывание примерного стэка

На этом этапе вы научитесь развертывать примерное приложение в виде стэка в вашем Docker Swarm. Стэк - это группа связанных служб, которые используют общие зависимости и могут быть управляемы вместе. Мы будем использовать простой пример с веб-сервером Nginx.

Перед развертыванием стэка нам нужно создать файл Docker Compose, который определяет службы в нашем стэке. Docker Compose - это инструмент для определения и запуска много-контейнерных Docker-приложений. Хотя Docker Compose не предустановлен, команда docker stack deploy может считывать файлы Compose.

Сначала создадим каталог для определения нашего стэка. Перейдите в домашний каталог и создайте новый каталог с именем my-nginx-stack.

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

Теперь создайте файл с именем docker-compose.yml внутри каталога my-nginx-stack с помощью редактора nano.

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.

Наконец, вы можете получить доступ к веб-серверу Nginx, открыв веб-браузер и перейдя по IP-адресу виртуальной машины LabEx. Вы должны увидеть стандартную приветственную страницу 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

Теперь создайте файл с именем docker-compose.yml внутри каталога my-apache-stack с помощью редактора nano.

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

Теперь развернем стэк Apache с помощью команды docker stack deploy. Мы назовем этот стэк apache_stack.

docker stack deploy -c docker-compose.yml apache_stack

Эта команда развертывает стэк Apache.

Далее вернемся в каталог my-nginx-stack, чтобы снова развернуть стэк Nginx.

cd ~/project/my-nginx-stack

Развернем стэк Nginx с помощью команды docker stack deploy. Мы назовем этот стэк nginx_stack.

docker stack deploy -c docker-compose.yml nginx_stack

Теперь убедимся, что оба стэка были успешно развернуты. Выведем список развернутых стэков.

docker stack ls

Вы должны увидеть в списке как apache_stack, так и nginx_stack.

Вы также можете проверить службы каждого стэка отдельно.

docker stack services apache_stack
docker stack services nginx_stack

Вы должны увидеть службу apache_stack_web и службу nginx_stack_web, обе запущенные с 1 из 1 реплик.

Вы можете получить доступ к веб-серверу Apache, открыв веб-браузер и перейдя по IP-адресу виртуальной машины LabEx на порту 81. Вы должны увидеть стандартную приветственную страницу Apache. Веб-сервер Nginx по-прежнему должен быть доступен на порту 80.

Удаление нескольких стэков

На этом последнем этапе вы научитесь удалять несколько развернутых стэков из вашего Docker Swarm. Это похоже на удаление одного стэка, но вы будете повторять процесс для каждого стэка, который вы хотите удалить.

На предыдущем этапе мы развернули два стэка: apache_stack и nginx_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_stack, ни nginx_stack не должны появляться в списке развернутых стэков.

Вы также можете проверить запущенные контейнеры, чтобы убедиться, что контейнеры, связанные с обоими стэками, удалены.

docker ps

Не должно быть запущенных контейнеров с образами httpd:latest или nginx:latest, которые были частью этих стэков.

Это завершает лабораторную работу по развертыванию и удалению Docker-стэков. Вы успешно инициализировали Docker Swarm, развернули и удалили один и несколько стэков.

Резюме

В этой лабораторной работе вы научились готовить среду Docker Swarm, инициализируя одноузловую кластерную систему (swarm) и проверяя ее состояние. Затем вы практиковали развертывание примерного приложения в виде стэка с использованием файла Docker Compose. Наконец, вы овладели использованием команды docker stack rm для удаления как одного, так и нескольких развернутых стэков из вашего Docker Swarm, продемонстрировав процесс очистки ресурсов после развертывания.