Работая с приложениями в контейнерах, вам нередко придется выводить список контейнеров Docker, например, запущенных. Это помогает мониторить их состояние, эффективно использовать ресурсы, вовремя обнаруживать потенциальные источники проблем, балансировать нагрузку, организовывать размещение контейнеров, а также проверять, не появились ли неавторизованные или вредоносные контейнеры.
От редакции Techrocks: познакомиться с контейнерами Docker можно, почитав статью «Docker: объяснение на пальцах».
Как вывести список запущенных контейнеров
Предположим, вы создали много контейнеров. Одни запущены, другие остановлены. Если применить команду docker ps
, по умолчанию будет выведен список только запущенных контейнеров.
Объяснение вывода
Выполнив команду docker ps
, вы получите вывод, как на скриншоте выше. Это информация о каждом запущенном контейнере, разбитая на семь столбцов.
- Container ID. Этот столбец содержит идентификаторы запущенных контейнеров.
- Image. Образы, использованные для создания контейнеров.
- Command. Команды, выполненные в фоне для инициализации и запуска каждого контейнера.
- Created. Время создания контейнеров.
- Status. Текущее состояние каждого контейнера. Возможные значения — running, exited, paused, removing, restarting и т.д.
- Ports. Ко всем контейнерам привязаны порты. С их помощью вы можете обратиться к сервису внутри контейнера. Например, если порт хоста 8080 привязан к 80-му порту контейнера, вы сможете получить доступ к веб-контенту контейнера, введя http://localhost:8080 в браузере на своей локальной машине.
- Names. Уникальные имена всех запущенных контейнеров.
Как вывести список всех контейнеров Docker
Если вы хотите увидеть информацию по всем контейнерам, нужно добавить к команде docker ps
опцию -a
. Так вы получите все запущенные, перезапущенные, приостановленные и остановленные контейнеры.
Чем отличаются запущенные и остановленные контейнеры в списке
Чтобы отличить запущенный контейнер от остановленного в выводе команды docker ps -a, нужно обратить внимание на столбец Status. Если там значится что-то вроде «up 3 hours», это означает, что контейнер запущен и работает уже 3 часа. А если там написано что-то типа «Exited 4 hours go», это значит, что контейнер был остановлен 4 часа назад.
Как вывести последние созданные контейнеры
Для вывода списка последних созданных контейнеров раньше использовалась команда docker ps -l
, но теперь она устарела. Теперь для вывода последнего контейнера можно использовать команду docker ps -n 1
. Число после n
ограничивает количество выводимых контейнеров. То есть, если вам нужны пять последних контейнеров, нужно запустить команду docker ps -n 5
.
Зачем может понадобиться вывести список последних созданных контейнеров
Откат при возникновении проблем, связанных с последним обновлением
Предположим, вы регулярно устанавливаете новые обновления для своего контейнерного приложения, и после последнего обновления что-то пошло не так. В таком случае эта команда поможет вам легко определить контейнеры, созданные после последнего обновления, для немедленного отката к более старой версии.
Ограниченные ресурсы для развертывания контейнеров
Предположим, у вас ограниченные ресурсы (CPU, RAM, место на диске и т.д.) и вы хотите эффективно их распределить. Для этого вам нужно отслеживать ресурсы, используемые последними созданными контейнерами. Получив список самых новых контейнеров, вы сможете внести изменения в их конфигурацию для обеспечения эффективности.
Отключение усечения
При выполнении команды docker ps
вы обнаружите, что в выводе значения нескольких столбцов обрезаются. Это затрудняет восприятие информации, особенно когда вам нужны полные идентификаторы контейнеров или имена образов.
Чтобы отключить усечение полей, нужно использовать команду docker ps -no-trunc
.
Пример вывода после отключения усечения:
Вывод списка только идентификаторов (тихий режим)
Очень часто из всего вывода команды docker ps
вам нужны лишь идентификаторы контейнеров. Чтобы ограничить вывод, можно воспользоваться специальной командой — docker ps -q
.
Сценарии, при которых требуются только идентификаторы контейнеров
Среда оркестровки
Большинство компаний применяют инструменты оркестровки, такие как Kubernetes и docker swarm. Эти инструменты часто используют идентификаторы контейнеров для управления и планирования.
Соединение контейнеров
В распределенной архитектуре мы обычно устанавливаем соединение между контейнерами для совместного использования ресурсов, сетевого подключения и масштабирования. А для этого нужно знать идентификаторы соединяемых контейнеров.
Просмотр размера контейнера
Как мы уже говорили ранее, наши ресурсы могут быть ограничены, поэтому нужно следить за использованием ресурсов каждым контейнером. Специальная команда — docker ps --size
— позволяет вывести дисковое пространство, используемое каждым контейнером. Таким образом можно определить контейнеры, которые занимают много места на диске, и предпринять соответствующие действия.
От редакции Techrocks: предлагаем также почитать «Как удалить образы Docker и освободить пространство».
Дополнительная колонка Size в выводе
Команда docker ps --size
добавит дополнительный столбец в вывод списка контейнеров. В нем будут указаны фактический (общий) и виртуальный размер каждого контейнера.
Фактический размер. Это место, которое используется слоем контейнера, доступным для записи. Состоит из файловой системы контейнера и всех сделанных модификаций.
Виртуальный размер. Когда все слои контейнера разделены и не используются совместно, виртуальный размер — это общий объем необходимого дискового пространства. Это совокупный размер всех слоев контейнера, включающий любые общие ресурсы, базовые изображения и дополнительные слои.
Настройка вывода списка контейнеров
Предположим, вы хотите получить вывод списка контейнеров, который будет содержать только выбранный вами столбец. В этом случае вы можете использовать команду docker ps
с опцией --format
и строкой-шаблоном Go. Шаблон Go непосредственно интегрирован в docker и может использоваться просто с командой docker, поскольку его синтаксис является родным для языка программирования Go, на котором построен сам docker.
Команда будет выглядеть примерно так: docker ps -format "GOTEMPLATE"
.
Синтаксис строки шаблона Go: docker ps --format "ID: {{.ID}}, Name: {{.Names}}, Image: {{.Image}}, Status: {{.Status}}"
.
Двойные фигурные скобки {{}}
используются для обозначения заполнителей для определенных свойств контейнера, таких как ID, Names, Image и Status. Эти заполнители будут заменены фактическими значениями при выполнении команды.
Примеры настройки отображаемой информации
Давайте настроим вывод таким образом, чтобы выводились только ID, образ и имя контейнера:
А вот вывод последних созданных контейнеров с ID контейнера, его статусом и дополнительной колонкой Size:
Использование расширенных фильтров
Docker также предоставляет расширенные опции фильтрации. С их помощью можно вывести список контейнеров на основе различных атрибутов и условий по вашему выбору. Все, что вам нужно сделать, это добавить опцию --filter
с парой ключ-значение.
Ключ будет атрибутом контейнера, по которому вы хотите отфильтровать, а значение — условием, которое вы хотите применить к этому атрибуту. Обратите внимание, что filter
можно повторять несколько раз с различными условиями.
Примеры фильтрации на основе различных критериев
Фильтрация по имени. Чтобы вывести информацию только по контейнеру с именем admiring_benz, нужно ввести команду docker ps -filter "name=admiring_benz"
.
Фильтрация по статусу. Можно отфильтровать вывод по значению в столбце Status, например, exited, created или running. Для этого нужно применить следующие команды:
docker ps -filter "status=running"
docker ps -filter "status=exited"
docker ps -filter "status=created"
Фильтрация на основе меток. Пример фильтрации вывода с несколькими опциями --filter
: для атрибута status и условия с label. Команда: docker ps --filter "status=created" --filter "label=com.example.version=1.0"
.
Заключение
Вывод списка контейнеров полезен для управления контейнерами. Информация из этого списка применяется при соединении различных контейнеров для совместного использования ресурсов и мониторинга состояния и производительности конкретного контейнера.
Команды вывода списка контейнеров можно интегрировать в скрипты, сторонние системы мониторинга и инструменты оркестровки, что поможет в автоматизации рабочих процессов.
Давайте повторим рассмотренные команды:
- При помощи команды
docker ps
можно получить список всех запущенных контейнеров. - Используя команду
docker ps
с дополнительными опциями (docker ps -n 5
,docker ps -a
,docker ps -q
), можно получить список последних контейнеров, список только идентификаторов контейнеров и список контейнеров в различных состояниях (запущенных, остановленных, созданных и т.д.). - Вывод команды docker ps можно настроить, добавив в команду ключевое слово
format
, за которым следует шаблон Go (например,docker ps -format "TEMPLATE"
). - Мы также можем использовать дополнительные фильтры на основе атрибутов, чтобы получить в выводе информацию об определенных контейнерах.
- Можно добавить в вывод фактический и виртуальный размер каждого контейнера. Для этого используется команда
docker ps --size
.
Перевод статьи Muhammad Khabbab «A Complete Guide to Listing Docker Containers».
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]