Как использовать команду docker service ls для вывода списка служб

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

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

Введение

В этом практическом занятии (лабораторной работе) вы научитесь эффективно использовать команду docker service ls для управления и проверки служб (сервисов), запущенных в кластере Docker Swarm. Вы начнете с перечисления всех служб в своем кластере, убедившись, что у вас есть базовое понимание вывода команды и информации, которую она предоставляет.

На основе базового перечисления вы затем изучите мощные параметры фильтрации. Это включает фильтрацию служб по их имени, что позволит вам быстро найти конкретные службы. Вы также научитесь фильтровать по режиму службы (например, реплицированному или глобальному) и по меткам (labels), которые представляют собой пары ключ-значение, используемые для организации и идентификации служб. Наконец, вы узнаете, как отформатировать вывод команды docker service ls так, чтобы отобразить информацию в наиболее подходящем для вас виде, что облегчит анализ и разбор деталей о службах.


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/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") subgraph Lab Skills docker/ls -.-> lab-555227{{"Как использовать команду docker service ls для вывода списка служб"}} docker/pull -.-> lab-555227{{"Как использовать команду docker service ls для вывода списка служб"}} docker/info -.-> lab-555227{{"Как использовать команду docker service ls для вывода списка служб"}} end

Перечисление всех служб в кластере

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

Сначала инициализируем кластер Docker Swarm, если он еще не инициализирован. Вы можете проверить статус кластера с помощью команды docker info. Если в выводе содержится "Swarm: active", значит, кластер уже инициализирован. В противном случае его нужно инициализировать.

docker info

Если кластер не активен, инициализируйте его:

docker swarm init

Теперь создадим простую службу для перечисления. Мы создадим службу с именем my-web-service с использованием образа nginx. Поскольку мы используем новую среду, сначала нужно скачать образ nginx.

docker pull nginx

Теперь создаем службу:

docker service create --name my-web-service -p 80:80 nginx

Эта команда создает службу с именем my-web-service на основе образа nginx и публикует порт 80 контейнера на порт 80 хоста.

Для перечисления всех служб в кластере используйте команду docker service ls. Эта команда показывает информацию о службах, включая их идентификатор (ID), имя, режим, количество реплик и используемый образ.

docker service ls

В выводе будет показана служба my-web-service, которую вы только что создали. Вы должны увидеть ее идентификатор, имя, режим (реплицированный), количество реплик (обычно по умолчанию 1) и образ (nginx).

Фильтрация служб по имени

На этом этапе вы научитесь фильтровать список служб по их имени, используя команду docker service ls с флагом --filter. Это полезно, когда у вас запущено много служб, и вы хотите увидеть информацию только о конкретной службе или группе служб с похожими именами.

Базовый синтаксис для фильтрации по имени: docker service ls --filter name=<service_name>. Вы можете указать полное имя службы или часть имени.

На предыдущем этапе мы создали службу с именем my-web-service. Используем фильтр, чтобы отобразить только эту службу.

docker service ls --filter name=my-web-service

В выводе должна отобразиться только строка, соответствующая службе my-web-service.

Вы также можете использовать частичные имена для фильтрации. Например, если у вас были службы с именами my-web-service-1 и my-web-service-2, то фильтрация по name=my-web отобразит обе службы. В нашей текущей настройке фильтрация по name=my-web по-прежнему покажет службу my-web-service.

docker service ls --filter name=my-web

Эта команда демонстрирует, как использовать частичное имя для фильтрации. В выводе должна по-прежнему быть перечислена служба my-web-service.

Фильтрация по имени - это быстрый способ сократить список служб и найти нужную информацию о конкретной службе, не просматривая весь список.

Фильтрация служб по режиму

На этом этапе вы научитесь фильтровать список служб на основе их режима с использованием команды docker service ls с флагом --filter. Службы Docker Swarm могут работать в двух режимах: replicated (реплицированный) и global (глобальный).

  • Реплицированный (Replicated): Это режим по умолчанию. Менеджер кластера запускает указанное количество реплик задачи службы на доступных узлах.
  • Глобальный (Global): Кластер запускает одну задачу службы на каждом доступном узле.

Базовый синтаксис для фильтрации по режиму: docker service ls --filter mode=<mode>. В качестве режима можно использовать либо replicated, либо global.

На предыдущих этапах мы создали службу с именем my-web-service, которая по умолчанию работает в режиме replicated. Отфильтруем службы так, чтобы показать только те, которые работают в режиме replicated.

docker service ls --filter mode=replicated

В выводе должна быть показана служба my-web-service, так как это реплицированная служба.

Теперь попробуем отфильтровать службы в режиме global. Поскольку мы не создали ни одной глобальной службы, эта команда не должна показать никаких служб.

docker service ls --filter mode=global

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

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

Фильтрация служб по меткам

На этом этапе вы научитесь фильтровать список служб на основе меток (labels) с использованием команды docker service ls с флагом --filter. Метки - это пары "ключ-значение", которые вы можете прикрепить к объектам Docker, включая службы, чтобы упростить их организацию и идентификацию.

Базовый синтаксис для фильтрации по метке: docker service ls --filter label=<key>=<value>. Вы можете фильтровать по определенному ключу и значению метки или только по наличию ключа метки.

Сначала обновим существующую службу my-web-service, добавив ей метку. Добавим метку environment=development к службе.

docker service update --label-add environment=development my-web-service

Эта команда обновляет службу my-web-service и добавляет указанную метку.

Теперь отфильтруем службы так, чтобы показать только те, которые имеют метку environment=development.

docker service ls --filter label=environment=development

В выводе должна быть показана служба my-web-service, так как мы только что добавили эту метку к ней.

Вы также можете фильтровать по наличию ключа метки, независимо от его значения. Например, чтобы вывести список всех служб, которые имеют метку environment:

docker service ls --filter label=environment

Эта команда выведет список всех служб, которые имеют метку environment, независимо от ее значения. В нашем случае она по-прежнему покажет службу my-web-service.

Фильтрация по меткам - это мощный способ управления и запроса служб, особенно в больших кластерах Swarm, где вы можете использовать метки для классификации служб по окружению, команде или приложению.

Форматирование вывода списка служб

На этом этапе вы научитесь форматировать вывод команды docker service ls с использованием флага --format. Это позволяет вам настроить отображаемую информацию и формат ее представления, что особенно полезно для скриптинга или создания отчетов.

Флаг --format использует пакет text/template языка Go. Вы можете указать поля, которые хотите отобразить, и как они должны быть отформатированы. Общие поля для служб включают .ID, .Name, .Mode, .Replicas и .Image.

Начнем с отображения только идентификатора и имени службы, разделенных табуляцией.

docker service ls --format "{{.ID}}\t{{.Name}}"

В выводе будут показаны идентификатор и имя службы my-web-service, разделенные символом табуляции.

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

docker service ls --format "table {{.Name}}\t{{.Image}}\t{{.Mode}}"

Использование table в начале строки форматирования сообщает Docker, что вывод нужно отформатировать в виде таблицы. Поля разделены табуляцией (\t).

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

docker service ls --format json

Эта команда выведет информацию о службах в формате JSON.

Форматирование вывода дает вам гибкость в том, как вы просматриваете и используете информацию о службах. Вы можете выбирать конкретные поля, изменять разделители и выводить данные в различных форматах, таких как таблица или JSON.

Резюме

В этом практическом занятии (lab) вы научились использовать команду docker service ls для вывода списка служб, запущенных в кластере Docker Swarm. Сначала вы убедились, что кластер Docker Swarm был инициализирован, и создали примерную службу. Затем вы использовали команду docker service ls для просмотра всех запущенных служб, изучив базовый вывод, включая идентификатор службы, имя, режим, количество реплик и образ.

Кроме того, вы изучили, как фильтровать список служб с использованием флага --filter. Вы научились фильтровать службы по их имени, что является важной навыком при управлении большим количеством служб и фокусировке на соответствующей информации.