Введение
В этом практическом занятии (лабораторной работе) вы узнаете, как эффективно использовать команду docker stack ps для перечисления и управления задачами в стеке Docker. Вы начнете с развертывания примерного стека с использованием Docker Compose, мощного инструмента для определения и запуска много-контейнерных приложений.
После развертывания стека вы изучите различные возможности команды docker stack ps. Это включает в себя перечисление всех задач в стеке, фильтрацию задач по их именам, форматирование вывода для отображения конкретных полей, которые вас интересуют, и, наконец, отображение только идентификаторов задач для краткого представления. Этот практический опыт предоставит вам навыки мониторинга и понимания состояния задач в вашем стеке Docker.
Развернуть примерный стек
На этом этапе вы узнаете, как развернуть примерный стек с использованием Docker Compose. Docker Compose - это инструмент для определения и запуска много-контейнерных приложений Docker. С помощью Compose вы используете файл YAML для настройки служб (сервисов) вашего приложения. Затем одной командой вы создаете и запускаете все службы из вашей конфигурации.
Поскольку Docker Compose не предустановлен в среде LabEx, вам сначала нужно его установить. Мы установим Docker Compose версии 1.29.2, которая совместима с установленной версией Docker.
Сначала загрузите бинарный файл Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Эта команда загружает бинарный файл Docker Compose из официального репозитория на GitHub и сохраняет его в /usr/local/bin/docker-compose. Части $(uname -s) и $(uname -m) автоматически определяют вашу операционную систему и архитектуру.
Далее, примените права на выполнение к бинарному файлу:
sudo chmod +x /usr/local/bin/docker-compose
Эта команда делает загруженный файл исполняемым.
Теперь, проверьте установку, проверив версию Docker Compose:
docker-compose --version
Вы должны увидеть вывод, похожий на docker-compose version 1.29.2, build 5becea4c.
Теперь, когда Docker Compose установлен, давайте создадим простой файл Docker Compose для определения нашего стека. Мы создадим файл с именем docker-compose.yml в директории ~/project.
Используйте редактор nano для создания и редактирования файла:
nano ~/project/docker-compose.yml
Вставьте следующее содержимое в файл docker-compose.yml:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
app:
image: alpine:latest
command: echo "Hello from Alpine"
Этот файл docker-compose.yml определяет две службы (сервиса):
web: Использует образnginx:latestи сопоставляет порт 80 на хосте с портом 80 в контейнере.app: Использует образalpine:latestи запускает простую командуecho.
Сохраните файл, нажав Ctrl + S, и выйдите из редактора, нажав Ctrl + X.
Перед развертыванием стека давайте загрузим необходимые образы. Хотя Docker Compose может автоматически загружать образы во время развертывания, явно загрузить их заранее иногда может быть полезно.
Загрузите образ nginx:latest:
docker pull nginx:latest
Загрузите образ alpine:latest:
docker pull alpine:latest
Теперь, разверните стек с помощью команды docker-compose up. Флаг -d запускает контейнеры в отсоединенном режиме (в фоновом режиме).
Перейдите в директорию ~/project, где вы создали файл docker-compose.yml:
cd ~/project
Затем, запустите команду:
docker-compose up -d
Эта команда считывает файл docker-compose.yml и создает и запускает определенные службы. Вы должны увидеть вывод, указывающий на создание и запуск служб web и app.
Чтобы убедиться, что службы работают, вы можете вывести список запущенных контейнеров:
docker ps
Вы должны увидеть два запущенных контейнера, один для службы web (на основе nginx) и один для службы app (на основе alpine).
Показать все задачи в стеке
На этом этапе вы узнаете, как вывести список всех задач (контейнеров), связанных со стеком, который вы развернули на предыдущем этапе. В Docker Swarm или Kubernetes термин "задача" (task) часто используется для обозначения запущенного экземпляра службы. Хотя здесь мы используем Docker Compose, который технически не использует концепцию "задачи" так же, как Swarm, мы все еще можем вывести список контейнеров, составляющих наш развернутый стек.
Команда docker-compose ps используется для вывода списка контейнеров, управляемых Docker Compose для текущего проекта (директории, содержащей файл docker-compose.yml).
Убедитесь, что вы все еще находитесь в директории ~/project, где расположен ваш файл docker-compose.yml:
cd ~/project
Теперь запустите команду docker-compose ps:
docker-compose ps
Эта команда отобразит список контейнеров, определенных в вашем файле docker-compose.yml, а также их текущее состояние, команду и порты.
Вы должны увидеть вывод, похожий на следующий (названия и идентификаторы контейнеров могут отличаться):
Name Command State Ports
--------------------------------------------------------------------------------
project_app_1 /bin/sh -c echo "Hello fr ... Exit 0
project_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp
В этом выводе показаны две службы, определенные в вашем файле docker-compose.yml: app и web. Столбец State указывает, запущен ли контейнер (Up) или он завершил работу (Exit 0). Столбец Ports показывает сопоставление портов для службы web.
Контейнер app завершил работу, потому что его команда echo "Hello from Alpine" завершила выполнение. Контейнер web все еще запущен, потому что сервер Nginx предназначен для непрерывной работы.
Эта команда полезна для быстрого просмотра, какие службы в вашем стеке запущены и их базовый статус.
Фильтрация задач по имени
На этом этапе вы узнаете, как фильтровать список контейнеров, управляемых Docker Compose, на основе имени их службы. Это полезно, когда у вас есть большой стек с множеством служб и вы хотите посмотреть только статус определенной службы.
Команда docker-compose ps позволяет указать имя службы в качестве аргумента для фильтрации вывода.
Убедитесь, что вы находитесь в директории ~/project:
cd ~/project
Чтобы вывести только контейнер для службы web, запустите следующую команду:
docker-compose ps web
Эта команда покажет только информацию о контейнере, связанном со службой web, определенной в вашем файле docker-compose.yml.
Вы должны увидеть вывод, похожий на следующий:
Name Command State Ports
--------------------------------------------------------------------------------
project_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp
Аналогично, чтобы вывести только контейнер для службы app, запустите:
docker-compose ps app
Это покажет информацию о контейнере app:
Name Command State Ports
--------------------------------------------------------------------------------
project_app_1 /bin/sh -c echo "Hello fr ... Exit 0
Фильтрация по имени службы - простой, но эффективный способ управлять и отслеживать отдельные компоненты в вашем стеке Docker Compose.
Форматирование вывода для отображения определенных полей
На этом этапе вы узнаете, как отформатировать вывод команды docker-compose ps так, чтобы отображались только определенные поля. Это полезно, когда вам нужно извлечь определенную информацию о ваших службах, например, их имена или статус, для скриптинга или дальнейшей обработки.
Команда docker-compose ps поддерживает флаг --format, который позволяет вам указать формат вывода с использованием шаблонов Go.
Убедитесь, что вы находитесь в директории ~/project:
cd ~/project
Чтобы отобразить только имя службы и состояние контейнера, вы можете использовать следующую команду:
docker-compose ps --format "table {{.Service}}\t{{.State}}"
Разберем флаг --format:
"table": Это указывает, что вывод должен быть в табличном формате с заголовками.{{.Service}}: Это заполнитель шаблона Go, который представляет имя службы.\t: Это символ табуляции, используемый здесь для разделения столбцов.{{.State}}: Это заполнитель шаблона Go, который представляет состояние контейнера.
Вывод будет выглядеть следующим образом:
SERVICE STATE
app Exit 0
web Up
Вы также можете включить другие поля в строку формата. Например, чтобы отобразить имя службы, образ и состояние:
docker-compose ps --format "table {{.Service}}\t{{.Image}}\t{{.State}}"
Вывод будет таким:
SERVICE IMAGE STATE
app alpine:latest Exit 0
web nginx:latest Up
Использование флага --format обеспечивает гибкость в том, как вы просматриваете и обрабатываете информацию о своих службах Docker Compose.
Отображение только идентификаторов задач
На этом этапе вы узнаете, как отображать только идентификаторы контейнеров для служб в вашем стеке Docker Compose. Это особенно полезно, когда вам нужно передать идентификаторы контейнеров другим командам для автоматизации или скриптинга.
Мы снова будем использовать флаг --format с командой docker-compose ps, но на этот раз мы укажем только поле идентификатора контейнера.
Убедитесь, что вы находитесь в директории ~/project:
cd ~/project
Чтобы отобразить только идентификаторы контейнеров, используйте следующую команду:
docker-compose ps -q
Флаг -q является сокращением для --quiet, который выводит только идентификаторы контейнеров.
В качестве альтернативы вы можете достичь того же результата, используя флаг --format:
docker-compose ps --format "{{.ID}}"
Эта команда использует шаблон Go {{.ID}} для извлечения только идентификатора контейнера для каждой службы.
Вывод любой из этих команд будет представлять собой список идентификаторов контейнеров, по одному на строку:
<container_id_for_app>
<container_id_for_web>
(Фактические идентификаторы будут различными в вашей среде).
Отображение только идентификаторов - это распространенный запрос, когда вам нужно программно взаимодействовать с вашими контейнерами, например, остановить или удалить их.
Наконец, давайте очистим развернутый стек, остановив его. Это остановит и удалит контейнеры и сети, созданные командой docker-compose up.
Убедитесь, что вы находитесь в директории ~/project:
cd ~/project
Запустите следующую команду:
docker-compose down
Эта команда остановит и удалит контейнеры для служб web и app. Вы должны увидеть вывод, указывающий на то, что контейнеры и сеть удаляются.
После выполнения команды docker-compose down вы можете убедиться, что контейнеры больше не работают, используя команду docker ps:
docker ps
Теперь эта команда не должна показывать запущенных контейнеров.
Резюме
В этом практическом занятии вы узнали, как развернуть примерный стек с использованием Docker Compose. Это включало в себя установку Docker Compose, создание файла docker-compose.yml для определения служб и последующий развертывание стека.
После развертывания вы узнаете, как использовать команду docker stack ps для вывода списка всех задач в развернутом стеке. Вы также изучите, как фильтровать эти задачи по имени, форматировать вывод для отображения определенных полей и отображать только идентификаторы задач, демонстрируя гибкость команды docker stack ps для мониторинга и управления задачами стека.



