Источник изображения


На просторах сети Интернет можно найти немало полезных утилит для Docker. Многие из них принадлежат к разряду Open Source и доступны на Github. В последние два года я достаточно активно использую Docker в большинстве своих проектов по разработке программного обеспечения. Однажды начав работать с Docker, вы осознаете, что он оказывается полезен для гораздо более широкого круга задач, нежели вы изначально предполагали. Вам захочется сделать с Docker еще больше, и он не разочарует!


Docker-сообщество живет активной жизнью, ежедневно производя новые полезные инструменты. За этой бурной деятельностью достаточно сложно уследить. Поэтому я решил выбрать несколько наиболее интересных и полезных из ежедневно используемых мной Docker-утилит. Они делают работу более продуктивной, автоматизируя операции, которые пришлось бы выполнять вручную.


Давайте посмотрим на утилиты, которые помогают мне в процессе докеризации всего и вся.


1. Watchtower — автоматическое обновление Docker-контейнеров


Watchtower мониторит выполняющиеся контейнеры и отслеживает изменения в образах, на основе которых они были созданы. Если образ изменился, Watchtower автоматически перезапускает контейнер, используя новый образ. Это удобно при локальной разработке, если есть желание работать с самыми новыми версиями используемых инструментов.


Утилита Watchtower также поставляется в виде Docker-образа и выполняется в контейнере. Для ее запуска введите следующую команду:




Мы запустили Watchtower с примонтированным файлом /var/run/docker.sock. Это нужно для того, чтобы Watchtower мог взаимодействовать с демоном Docker через соответствующий API. Мы также передали опцию interval, равную 30 секундам, которая определяет интервал опроса. У Watchtower есть и другие опции, которые описаны в документации.


Давайте запустим контейнер и помониторим его с помощью Watchtower.




Теперь Watchtower начнет мониторинг контейнера friendlyhello. Если я размещу новый образ на Docker Hub, Watchtower во время очередного запуска это обнаружит. Затем она корректно остановит контейнер и перезапустит его из нового образа. Также контейнеру будут переданы указанные нами в команде run опции, то есть он будет запущен с -p 4000:80.


По умолчанию Watchtower будет искать новые версии образов в реестре Docker Hub. При этом Watchtower может опрашивать закрытые реестры, используя для входа учетные данные из переменных окружения REPO_USER и REPO_PASS.


Более подробную информацию о Watchtower вы можете найти в документации.


2. Docker-gc — удаление ненужных контейнеров и образов


Утилита docker-gc помогает очистить Docker-хост, удалив более не нужные образы и контейнеры. Удаляются контейнеры, завершенные более часа назад, а также образы, не принадлежащие ни одному из оставшихся контейнеров.


Docker-gc может запускаться в виде скрипта или контейнера. Мы воспользуемся вторым вариантом. Запустим docker-gc, чтобы узнать, какие контейнеры и образы можно удалить.




Чтобы docker-gc мог взаимодействовать с Docker через его API, мы подмонтировали сокет-файл Docker. Для поиска контейнеров и образов, которые можно удалить, запустим docker-gc с переменной окружения DRY_RUN=1. При этом никаких изменений на диске сделано не будет. Всегда лучше сначала убедиться, что docker-gc не собирается удалить ничего лишнего. Вот вывод этой команды:




Если вы согласны с предложенным docker-gc планом очистки, запустите ту же команду, но теперь уже без DRY_RUN.



В выводе будут перечислены удаленные docker-gc контейнеры и образы.


У docker-gc есть еще несколько опций. Чтобы получить более подробную информацию об этой утилите, рекомендую почитать соответствующую документацию.


3. Docker-slim — волшебная пилюля, которая поможет вашим контейнерам похудеть


Обеспокоены размером ваших Docker-образов? Вам поможет docker-slim!


Эта утилита использует статический и динамический анализ для создания легковесных вариантов Docker-образов. Чтобы поработать с docker-slim, загрузите бинарник с Github (доступны версии для Linux и Mac), а затем добавьте путь к исполняемому файлу в переменную окружения PATH.


С помощью инструкции из официальной документации Docker я создал образ для демонстрационного приложения friendlyhello. Размер образа составил 194 МБ.




Для очень простого приложения нам пришлось загрузить 194 МБ! Посмотрим, сколько мегабайт можно скинуть с docker-slim.




Инспектируя исходный образ, docker-slim выполнит несколько шагов, а затем создаст его облегченную версию. Посмотрим, какой в итоге получился размер:




На иллюстрации видно, что размер образа уменьшился до 24.9 МБ. Если запустить контейнер, то он будет работать точно так же, как и его предыдущая версия. Docker-slim хорошо справляется с приложениями на Java, Python, Ruby и Node.js.


Попробуйте docker-slim сами, и, возможно, это позволит вам освободить немало места. Эта утилита корректно отработала практически во всех моих проектах. Получить более подробную информацию о docker-slim можно из соответствующей документации.


4. Rocker — преодолеваем ограничения Dockerfile


Большинство разработчиков для сборки образов предпочитают использовать Dockerfile. Dockerfile — это декларативный способ определения команд по созданию образа, которые пользователь мог бы выполнить в командной строке.


Rocker добавляет в Dockerfile набор новых инструкций. Rocker был создан в Grammarly для решения проблем, с которыми эта компания столкнулась при использовании Dockerfile. В Grammarly написали содержательную статью, объясняющую причины создания Rocker. Если у вас есть желание лучше разобраться с Rocker, рекомендую эту статью к прочтению. В ней отмечены две проблемы:


  1. Размер образов.
  2. Скорость сборки.

Там также упоминается несколько добавленных Rocker инструкций. Для получения информации о всех поддерживаемых Rocker инструкциях см. документацию.


  1. MOUNT — позволяет настроить совместное использование томов различными сборками, что удобно, например, для инструментов управления зависимостями.
  2. FROM — эта инструкция существует и в стандартном Dockerfile. При этом Rocker позволяет добавить несколько FROM в один файл. Это значит, что с помощью одного Rockerfile можно сделать несколько образов, например, один для сборки, а другой для выполнения приложения. Первый набор инструкций соберет артефакт, используя все необходимые зависимости. Второй набор инструкций может использовать артефакт, созданный на первом шаге. С помощью этого приема достигается значительное уменьшение размера образа.
  3. TAG позволяет на разных этапах сборки создавать метки образа, то есть вручную это делать больше не нужно.
  4. PUSH используется для загрузки образов в реестр.
  5. ATTACH позволяет интерактивно подключаться к контейнеру на промежуточных этапах сборки, что очень удобно для отладки.

Rocker требует установки. Для пользователей Mac команды следующие:




Rockerfile выглядит вот так:




Для сборки образа и загрузки его на Docker Hub выполните:




У Rocker очень интересная функциональность. Чтобы узнать больше, обратитесь к его документации.


5. Ctop — top-подобная утилита для вывода информации о контейнерах


Я начал пользоваться ctop сравнительно недавно. Эта утилита в реальном времени отображает метрики сразу нескольких контейнеров. Если вы используете Mac, то для установки ctop можете воспользоваться следующей командой:




Для работы ctop требуется установка переменной окружения DOCKER_HOST.


Выполните ctop, чтобы отобразить состояние всех контейнеров.




Для вывода информации только о запущенных контейнерах выполните ctop -a.


Ctop проста в использовании и при этом весьма полезна. Более подробную информацию вы можете найти в документации.


Ссылки:


  1. Оригинал: 5 Docker Utilities You Should Know.
Поделиться с друзьями
-->

Комментарии (16)


  1. SicYar
    25.07.2017 09:22
    +1

    Интересно, спасибо за перевод!


  1. S_A
    25.07.2017 09:29

    Не наблюдаю docker-compose :)


    1. G1uK
      26.07.2017 16:21

      Так про него все и так подробно расписано в доке докера.


  1. Caravus
    25.07.2017 11:10
    +1

    В дополнение к Rocker:
    Box
    dapp
    Сам ничего из этого не пробовал пока, закинул в закладки на будущее.


  1. alfss
    25.07.2017 13:03
    +1

    Может стоит вставлять листинг не картинками?

    docker-slim — запустил на один из своих образов, выкорчевал всё из образа и получился не рабочий образ (python)


  1. Aytuar
    25.07.2017 14:16
    +3

    Блин! Картинки!? Почему не текст?!


    1. Sys_Admin
      25.07.2017 20:36

      Может просто не в курсе как копировать из терминала? :)


  1. Amet13
    25.07.2017 14:31

    2. Docker-gc — удаление ненужных контейнеров и образов

    А зачем оно нужно если из коробки есть docker prune?


    1. Desprit
      25.07.2017 15:45

      Раньше не было… Может, для этого…


    1. SlavniyTeo
      25.07.2017 20:36

      5. Ctop — top-подобная утилита для вывода информации о контейнерах


      А зачем оно нужно, если из коробки есть docker stats?


      1. Haos616
        01.08.2017 11:57

        Он как минимум не показывает название контейнера а это не удобно.


        1. RidgeA
          01.08.2017 12:19

          Из коробки — нет.
          А вообще такая возможность есть https://docs.docker.com/engine/reference/commandline/stats/#formatting


  1. KirEv
    25.07.2017 23:07

    прикольно, спасибо.

    относительно недавно начал активно использовать докер, на в начале пути очень сильно не хватало некой UI-утилитки для создания Dockerfile, простые вещи — просто, сложные — голову можно сломать пока его опишешь…


    1. antrew
      27.07.2017 11:52
      +2

      А что такого сложного именно в Dockerfile, и чем там может помочь GUI?
      Документация Dockerfile очень хорошо описывает все доступные возможности. Сложность скорее в первичном понимании концепций Docker, а не в сложности самого Dockerfile.


    1. baltazorbest
      28.07.2017 23:04

      Наоборот UI будет лишним и мешать людям в понимании докера, ИМХО. Лучше потратить больше времени на изучение документации для Dockerfile.