Перейти к основному содержимому

Список контейнеров Docker

· 8 мин. чтения

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» и ее полезных параметров.

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