«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.
По умолчанию выходные данные показывают несколько сведений о каждом запущенном контейнере:
-
«ИДЕНТИФИКАТОР КОНТЕЙНЕРА» — это уникальный идентификатор контейнера. Этот идентификатор представляет собой усеченную версию довольно длинного хэша SHA-256. «IMAGE» — это имя образа контейнера и его тег, разделенные двоеточием, например postgres:11. «COMMAND» — это команда, отвечающая за запуск контейнера «CREATED». € показывает, когда контейнер был создан. «STATUS» показывает статус контейнера. Как упоминалось выше, все эти контейнеры работают. «ПОРТЫ» показывают сопоставление портов между хост-компьютером и внутри контейнера. Например, «0.0.0.0:32789-\u003e5432/tcp» означает, что порт 32789 на хосте сопоставляется с портом 5432 внутри контейнера. Кроме того, мы можем видеть, что мы не сопоставили ни одного порта для контейнера Nats — «4222/tcp, 6222/tcp, 8222/tcp» «NAMES» представляет удобочитаемое имя контейнера Docker, например as 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 \u003cчисло\u003e или –last \u003cчисло\u003e:
$ 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. Настраиваемый вывод
$ 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. Все, что нам нужно сделать, это передать желаемый формат опции -format. Давайте посмотрим на быстрый пример этого в действии:
Здесь мы использовали то, что в основном представляет собой шаблонную строку в формате шаблона Go. Идентификатор, изображение, имена и статус являются заполнителями, а остальной текст отображается как есть.
$ 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 — имя изображения и tag .Command — команда, отвечающая за запуск этого контейнера .CreatedAt — время создания контейнера .Running — время, прошедшее с момента запуска контейнера .Ports — сопоставление портов .Status — контейнер статус выполнения .Size — размер контейнера и его образа на диске . Names — имя контейнера . Labels — все метки, присвоенные контейнеру . Mounts — тома для контейнера . Networks — все сетевые имена, прикрепленные к контейнеру
2.9. Расширенная фильтрация
До сих пор мы только фильтровали контейнеры на основе состояния работы или остановки. Как оказалось, «docker container ls» предлагает гораздо больше, чем эта рудиментарная фильтрация.
$ 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
Чтобы отфильтровать контейнеры, мы можем использовать опцию -f или —filter. Например, здесь мы собираемся фильтровать контейнеры со статусом exited:
Как показано выше, мы должны передать критерии фильтрации в формате ключ=значение.
$ docker container ls --filter "status=exited" --filter "exited=1"
CONTAINER ID IMAGE STATUS
32928d81a65f mysql:5.6 Exited (1) 8 hours ago
Если мы хотим применить несколько фильтров одновременно, мы должны передать несколько опций фильтра. Например, мы можем пойти еще дальше и оставить только завершенные контейнеры со статусом выхода, равным 1:
$ docker container pause redis-2
Как и следовало ожидать, только MySQL теперь соответствует критериям фильтра. Работает или останавливается — это не единственные состояния контейнера Docker. На самом деле, если мы, скажем, приостановим Docker-контейнер:
$ 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.
$ 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)
Можно даже фильтровать контейнеры по времени их создания. Например, здесь мы собираемся сохранить только те контейнеры, которые были созданы до контейнера 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
С другой стороны, мы можем перечислить все контейнеры Docker, созданные после контейнера Nats, используя фильтр с тех пор: ~ ~~
3. Заключение
В этом руководстве мы увидели, как отображать и фильтровать контейнеры Docker с помощью команды «docker container ls» и ее полезных параметров.