company_banner

docker-pretty-ps — наконец-то удобный для чтения «docker ps»

    Вы не одиноки в этом мире, если вот уже долгое время не рады тому, как выглядит стандартный вывод docker ps. Хотя и существуют различные workarounds на эту тему (см. в конце материала), однажды какой-нибудь энтузиаст должен был сделать «что-то ещё»… и это произошло в наступившем 2019 году. Имя ему — docker-pretty-ps.

    Задумка автора банальна донельзя: горизонтальный вывод и цвета для наглядности.



    А в качестве аудитории утилиты называются «скорее разработчики, чем хардкорные DevOps'ы или SRE-инженеры».

    Возможности


    С внешним видом всё должно быть понятно из картинки. Что позволяет утилита в смысле функций? По умолчанию выводятся все запущенные контейнеры, но этим, конечно, возможности не ограничиваются — в docker-pretty-ps поддерживается:

    • вывод всех контейнеров (включая остановленные);
    • поиск контейнеров по шаблону: docker-pretty-ps my,try выведет контейнеры, в названии которых найдены *my* и *try* (например, docker-registry и mysql-redmine);
    • несколько опций сортировки;
    • настраиваемые поля вывода для каждого контейнера (доступны: container_id, created, ports, image_id, status, command);
    • компактный режим вывода slim (убирает все перечисленные выше поля, оставляя только названия контейнеров):

    • вывод данных в формате JSON.

    Установка


    Код проекта написан на Python и авторы отдельно отмечают, что сторонние Python-пакеты не используются, поэтому для запуска достаточно иметь в системе Docker и Python, что справедливо для многих.

    Установка осуществляется через pip:

    pip install docker-pretty-ps

    … или же простой сборкой:

    git clone https://github.com/politeauthority/docker-pretty-ps.git
    cd docker-pretty-ps
    python3 setup.py build
    python3 setup.py install

    Всё — можно пользоваться:

    $ docker-pretty-ps -h
    usage: docker-pretty-ps [-h] [-a] [-s] [-i INCLUDE] [-o [ORDER]] [-r] [-j]
                            [-v]
                            [search]
    
    positional arguments:
      search                Phrase to search containers, comma separate multiples.
    
    optional arguments:
    …

    Другие workarounds


    Несмотря на широкую поддержку на Reddit, эта утилита подойдёт, безусловно, не всем. В частности, если у вас много контейнеров (десятки и более), то даже использование режима slim не всегда будет удобным. И тогда более полезным может оказаться один из известных уже давно workaround'ов.

    docker ps --format


    Опция форматирования для docker ps — это не просто workaround, но и в некотором смысле лучшее решение, т.к. не требует ничего дополнительного в смысле установки в системе.

    Аргумент --format принимают многие команды Docker, позволяя (через go-template) настроить их вывод под себя. Для команды docker ps его поддержка появилась уже давно (в релизе Docker 1.8 от августа 2015 г.). Вот пример её использования:

    [flant] d.shurupov@kube-node-test ~ $ sudo docker ps --format 'table {{.Names}}\t{{.Image}}'
    NAMES                                    IMAGE
    k8s_fluentd_fluentd-jmzjd_loghouse…      flant/loghouse-fluentd…
    k8s_cert-manager_cert-manager-…          quay.io/jetstack/cert-manager-controller…
    k8s_prometheus-config-reloader_…         597141b113d9
    k8s_prometheus_prometheus-main-…         cc866859f8df
    k8s_POD_prometheus-main-0_kube-…         k8s.gcr.io/pause-amd64:3.1
    …

    (NB: В приведённом выше примере вручную были обрезаны полные названия контейнеров и образов ­— для лучшей наглядности.)

    Подробности о работе с --format можно найти, например, в этой статье, а примеры доступных функций — в документации Docker.

    ctop


    Пожалуй, даже более популярный путь — использование утилиты ctop, которая предлагает интерфейс, похожий на классический top, но для Docker-контейнеров:



    Её удобный запуск в консоли можно свести к такому алиасу:

    alias ctop='docker run --rm -ti -v /var/run/docker.sock:/var/run/docker.sock quay.io/vektorlab/ctop:latest'

    Помимо этого, конечно, существуют и другие — более продвинутые в своих возможностях — интерфейсы, но их описание выходит за рамки статьи. А чем пользуетесь вы?

    P.S.


    Читайте также в нашем блоге:

    • +33
    • 8,4k
    • 4
    Флант
    285,00
    Специалисты по DevOps и высоким нагрузкам в вебе
    Поделиться публикацией

    Комментарии 4

      +2
      А чем ctop принципиально отличается от docker stats? Даже на скрине тяжело заметить разницу
        +1
        может будет полезно, кусочек моего ~/.bashrc.d/aliases
        alias dockps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}"'                                                            
        alias dockports='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"'
        
          +1
          А чем пользуетесь вы?

          portainer, хотя это немного другое

            0

            До сих пор не понимаю почему docker ps и docker-compose ps в особенности не показывают ip адрес контейнера. Приходится прибегать к таким извращениям docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое