1. Обзор
Docker предоставляет различные параметры для отображения и фильтрации контейнеров в разных состояниях или даже параметры для настройки вывода списка.
В этом руководстве мы увидим, как мы можем фильтровать контейнеры Docker различными способами.
2. Список контейнеров
Чтобы вывести список контейнеров Docker, мы можем использовать команду «docker ps»
или «docker container ls»
. Эта команда предоставляет различные способы вывода списка и фильтрации всех контейнеров в конкретном движке Docker.
Начнем с перечисления всех запущенных контейнеров.
2.1. Псевдонимы
Начиная с Docker 1.13 , команда Docker перегруппировала каждую команду, чтобы она располагалась под логическим объектом, с которым она взаимодействует . Например, чтобы получить список контейнеров Docker , в дополнение к «
docker ps»
мы можем использовать команду «
docker container list»
или даже «
docker container ls»
.
Все эти три псевдонима поддерживают одну и ту же группу опций. Однако рекомендуется принять новый синтаксис.
2.2. Запуск контейнеров
Если мы используем команду «
docker container ls»
без параметров, она выведет список всех запущенных контейнеров :
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1addfea727b3 mysql:5.6 "docker-en.." 2 seconds ago Up 1 second 0.0.0.0:32801->3306/tcp dazzling_hellman
09c4105cb356 nats:2.1.0-scratch "/nats-…" 17 minutes ago Up 17 minutes 4222/tcp, 6222/tcp, 8222/tcp nats-1
443fc0c41710 rabbitmq:3.7 "docker-…" 17 minutes ago Up 17 minutes 4369/tcp, 5671-5672/tcp, 25672/tcp rabbit-1
b06cfe3053e5 postgres:11 "docker-…" 29 minutes ago Up 29 minutes 0.0.0.0:32789->5432/tcp pg-2
4cf774b9e4a4 redis:5 "docker-…" 30 minutes ago Up 30 minutes 0.0.0.0:32787->6379/tcp redis-2
Как показано выше, на данный момент у нас есть пять запущенных контейнеров — Nats, RabbitMQ, PostgreSQL, MySQL и Redis.
По умолчанию выходные данные показывают несколько сведений о каждом работающем контейнере:
- CONTAINER ID — уникальный идентификатор контейнера. Этот идентификатор представляет собой усеченную версию довольно длинного хэша SHA-256.
- «IMAGE» — это имя образа контейнера и его тег, разделенные двоеточием, например,
postgres:11.
- «КОМАНДА» — это команда, отвечающая за запуск контейнера.
- «СОЗДАН» показывает, когда был создан контейнер
- «СТАТУС» показывает статус контейнера. Как упоминалось выше, все эти контейнеры работают
- «ПОРТЫ» показывает сопоставление портов между хост-компьютером и внутри контейнера. Например,
«0.0.0.0:32789->5432/tcp»
означает, что порт32789
на хосте сопоставляется с портом5432
внутри контейнера. Также мы видим, что мы не сопоставили ни одного порта для контейнера Nats —«4222/tcp, 6222/tcp, 8222/tcp».
- «NAMES» представляет удобочитаемое имя контейнера Docker, например
pg-2 .
К настоящему времени мы должны знать о значении каждого столбца. Итак, с этого момента мы будем показывать только часть этих столбцов для краткости.
2.3. Все контейнеры
По умолчанию команда «
docker container ls»
показывает только запущенные контейнеры. Однако, если мы передадим параметр -a
или –all
, будут перечислены все (остановленные и работающие) контейнеры :
$ docker container ls -a
CONTAINER ID IMAGE STATUS
1addfea727b3 mysql:5.6 Up 4 hours
32928d81a65f mysql:5.6 Exited (1) 4 hours ago
09c4105cb356 nats:2.1.0-scratch Up 4 hours
443fc0c41710 rabbitmq:3.7 Up 4 hours
b06cfe3053e5 postgres:11 Up 4 hours
16d3c67ebd40 postgres:11 Exited (0) 4 hours ago
4cf774b9e4a4 redis:5 Up 4 hours
99c537a3dd86 redis:5 Exited (0) 4 hours ago
Как показано выше, теперь у нас есть три контейнера, которые были остановлены несколько часов назад — Redis, MySQL и PostgreSQL.
2.4. Последние контейнеры
Чтобы увидеть последние n
контейнеров Docker (как запущенных, так и остановленных), мы можем использовать параметр -n <number>
или –last <number>
:
$ docker container ls -n 2
CONTAINER ID IMAGE STATUS
1addfea727b3 mysql:5.6 Up 4 hours
32928d81a65f mysql:5.6 Exited (1) 4 hours ago
Также можно увидеть последний контейнер с помощью опции -l
или –latest
:
$ docker container ls --latest
CONTAINER ID IMAGE STATUS
1addfea727b3 mysql:5.6 Up 4 hours
Конечно, мы можем добиться того же с опцией -n 1 .
2.5. Отключение усечения
По умолчанию Docker обрезает выходные столбцы, если их значение превышает некоторый порог. На самом деле мы уже видели усеченные значения идентификатора контейнера.
Несмотря на то, что в большинстве случаев это хорошая функция, мы можем отключить ее с помощью параметра –no-trunc
:
$ docker container ls --latest --no-trunc
CONTAINER ID COMMAND
1addfea727b38f484a2e0023ed7f47dcb9bbfc6e053f094c349391bb38cb3af7 "docker-entrypoint.sh mysqld"
Как показано выше, выходные столбцы теперь намного более подробные.
2.6. Тихий режим
Также можно просто увидеть идентификатор контейнера из контейнеров . Для этого мы можем использовать опцию -q
или –quiet
:
$ docker container ls -q
1addfea727b3
09c4105cb356
443fc0c41710
b06cfe3053e5
4cf774b9e4a4
Мы можем смешивать и сопоставлять параметры и видеть полные идентификаторы контейнеров:
$ docker container ls --quiet --no-trunc
1addfea727b38f484a2e0023ed7f47dcb9bbfc6e053f094c349391bb38cb3af7
09c4105cb3567ba0070dacf7381b9946165908c819c0841cffaa1855766537c7
443fc0c41710ee3811e72fe5079bf4696b9318e0754c38eeab1c960f5c5a7007
b06cfe3053e521704c67a1902a7302665ae05f66ef592419f32b8c73b2a066fd
4cf774b9e4a487a2ba658de37273994161378cffe7e69fe5c928ad29e6946372
Тихий режим может быть особенно полезен, когда мы собираемся передать набор идентификаторов другой команде . Например, вот способ принудительного удаления всех контейнеров:
$ docker container rm -f $(docker container ls -aq)
Конечно, такие комбинации следует использовать с особой осторожностью.
2.7. Размер контейнера
Мы можем увидеть размер контейнера и его образ на диске с помощью опций -s
или --size
:
$ docker container ls --latest -s
CONTAINER ID IMAGE SIZE
1addfea727b3 mysql:5.6 2B (virtual 256MB)
Первое значение (2B) представляет количество байтов, которые используются для доступного для записи уровня каждого контейнера. Второе значение — это размер образа на диске, который в данном случае составляет 256 МБ.
2.8. Индивидуальный вывод
Если нас не устраивает формат вывода по умолчанию, мы можем настроить вывод с помощью шаблонов Go . Все, что нам нужно сделать, это передать желаемый формат опции –format
. Давайте посмотрим на быстрый пример этого в действии:
$ docker container ls --format "{{.ID}} -> Based on {{.Image}}, named {{.Names}}, ({{.Status}})"
1addfea727b3 -> Based on mysql:5.6, named dazzling_hellman, (Up 3 hours)
09c4105cb356 -> Based on nats:2.1.0-scratch, named nats-1, (Up 4 hours)
443fc0c41710 -> Based on rabbitmq:3.7, named rabbit-1, (Up 4 hours)
b06cfe3053e5 -> Based on postgres:11, named pg-2, (Up 4 hours)
4cf774b9e4a4 -> Based on redis:5, named redis-2, (Up 4 hours)
Здесь мы использовали шаблонную строку в формате шаблона Go. ID
, Image
, Names
и Status
являются заполнителями, а остальной текст отображается как есть.
Более того, можно отобразить столбцы в табличном формате . Нам просто нужно использовать префикс таблицы :
$ docker container ls --format "table {{.ID}}\t{{.Image}}\t{{.Names}}"
CONTAINER ID IMAGE NAMES
1addfea727b3 mysql:5.6 dazzling_hellman
09c4105cb356 nats:2.1.0-scratch nats-1
443fc0c41710 rabbitmq:3.7 rabbit-1
b06cfe3053e5 postgres:11 pg-2
4cf774b9e4a4 redis:5 redis-2
Давайте подробнее рассмотрим поля, которые мы можем использовать в строке шаблона:
.ID
— идентификатор контейнера.Image
— имя изображения и тег.Command
— команда, отвечающая за запуск этого контейнера.CreatedAt
— время создания контейнера.Running
— время, прошедшее с момента запуска контейнера..Ports
— сопоставление портов.Status
— статус выполнения контейнера.Size
— размер контейнера и его образа на диске ..Names
— имя контейнера.Labels
— все метки, присвоенные контейнеру..Mounts
— тома для контейнера.Networks
— все сетевые имена, прикрепленные к контейнеру.
2.9. Расширенная фильтрация
До сих пор мы фильтровали контейнеры только по статусу работы или остановки. Как оказалось, «
docker container ls»
предлагает гораздо больше, чем эта элементарная фильтрация.
Чтобы отфильтровать контейнеры, мы можем использовать опцию -f
или –filter
. Например, здесь мы собираемся фильтровать контейнеры со статусом Exited
:
$ docker container ls --filter "status=exited"
CONTAINER ID IMAGE STATUS
32928d81a65f mysql:5.6 Exited (1) 8 hours ago
16d3c67ebd40 postgres:11 Exited (0) 9 hours ago
99c537a3dd86 redis:5 Exited (0) 9 hours ago
Как показано выше, мы должны передать критерии фильтра в формате ключ=значение .
Если мы хотим применить несколько фильтров одновременно, мы должны передать несколько опций –filter
. Например, мы можем пойти еще дальше и оставить закрытые
контейнеры только со статусом выхода, равным 1:
$ docker container ls --filter "status=exited" --filter "exited=1"
CONTAINER ID IMAGE STATUS
32928d81a65f mysql:5.6 Exited (1) 8 hours ago
Как и следовало ожидать, только MySQL теперь соответствует критериям фильтра. Работает или останавливается — это не единственные состояния контейнера Docker. На самом деле, если мы, скажем, приостановим контейнер Docker:
$ docker container pause redis-2
Затем мы можем отфильтровать все приостановленные контейнеры:
$ docker container ls --filter "status=paused"
CONTAINER ID IMAGE STATUS
4cf774b9e4a4 redis:5 Up 45 minutes (Paused)
Более того, мы можем фильтровать контейнеры по любому из возможных статусов — создано
, перезапущено
, запущено
, удалено
, приостановлено
, завершено
или мертво
.
Если мы знаем какую-то часть имени контейнера, мы можем найти ее:
$ docker container ls -a --filter "name=pg"
CONTAINER ID IMAGE STATUS
b06cfe3053e5 postgres:11 Up 18 minutes
16d3c67ebd40 postgres:11 Exited (0) 9 hours ago
Мы также можем фильтровать контейнеры на основе их базового изображения:
$ docker container ls -a --filter "ancestor=postgres"
CONTAINER ID IMAGE STATUS
b06cfe3053e5 postgres:11 Up 28 minutes
16d3c67ebd40 postgres:11 Exited (0) 9 hours ago
Здесь мы перечисляем только контейнеры, основанные на образе postgres .
Можно даже фильтровать контейнеры по времени их создания. Например, здесь мы собираемся сохранить только те контейнеры, которые созданы до контейнера Nats:
$ docker container ls --filter "before=nats-1"
CONTAINER ID IMAGE STATUS
443fc0c41710 rabbitmq:3.7 Up 52 minutes
b06cfe3053e5 postgres:11 Up 52 minutes
4cf774b9e4a4 redis:5 Up 52 minutes (Paused)
С другой стороны, мы можем перечислить все контейнеры Docker, созданные после контейнера Nats, используя фильтр с тех пор:
$ docker container ls --filter "since=nats-1"
CONTAINER ID IMAGE STATUS
2fdc65a6effb mysql:5.6 Exited (137) 4 days ago
1addfea727b3 postgres:11 Exited (0) 3 days ago
3. Заключение
В этом руководстве мы увидели, как отображать и фильтровать контейнеры Docker с помощью команды «docker container ls»
и ее полезных параметров.
Для более подробного обсуждения всегда полезно ознакомиться с официальной документацией .