Несколько полезных команд в Docker, которые вам пригодятся

Привет! Сегодня я постараюсь предоставить вам несколько вариантов команд для Docker, которые могут стать полезными в разработке и деплое вашего кода.

В первую очередь здесь представлены команды для Bash, работоспособность команд в Windows-терминале не гарантируется.

Ограничить размер файлов логов в Docker-контейнере

Для этого в YAML - блоке с конкретным сервисом укажите свойство logging и заполните его, например так:

version: '3.2'
services:
  logstash:
    image: docker.elastic.co/logstash/logstash:7.8.0
    command:  --config.reload.automatic  
    user: savio:savio
    restart: unless-stopped
    logging:
      driver: "json-file"
      options:
        max-size: "2048m"

В примере выше логи контейнера logstash будут ограничены 2 ГБ. Разумеется, можно выставить любое другое значение.

Свойство logging состоит из двух подсвойств: драйвера, обеспечивающего ведение логов (по умолчанию это json-file, но на практике это также может быть и другие, подробнее про это можно почитать в документации (https://docs.docker.com/engine/logging/plugins/))

Во втором свойстве options можно указать такие параметры, как:

Параметр Пример Описание
max-size 50m Максимальный размер файла логов
max-file 3 Максимальное количество файлов логов. По умоланию, Docker создает 1 файл с логами
labels production "Метки" для файлов лога.
labels-regex ^(production) "Метки" для файлов лога в виде регулярных выражений
env os, customer Список переменных, связанных с журналированием
env-reges os, customer Аналогично с labels-regex
compress true Сжатие журналов. По умолчанию выключено

Более подробно можно почитать здесь (https://docs.docker.com/engine/logging/configure/)

Если же вам достаточно просто ограничить размер файла логов, достаточно просто указать размер:

    logging:
      options:
        max-size: 50m

Посмотреть статистику использования ресурсов по запущенным контейнерам

Сразу перейдем к команде:

docker ps -q | xargs  docker stats --no-stream

В выводе команды вы получите статистику по использованию CPU, оперативной памяти, потребляемой скорости интернета и ID процесса в системе.

Останавливать контейнеры по паттерну в наименовании

На самом деле вся "магия" в команде xargs, позволяющая использовать полученные в нее аргументы в приведенной далее команде, но чтобы лишний раз ее не придумывать, напишем:

docker ps --filter name=start-name* --filter status=running -aq | xargs docker stop

Эта команда остановит все запущенные контейнеры, имеющие в своем наименовании в начале start-name.

Удалить все образы docker по паттерну в наименовании

Логика такая же, как в прошлом примере, только на этот раз воспользуемся командой grep для фильтрации строк и cut для "обрезки" строк, оставляя в них только ID образов для удаления:

docker images --format "{{.Repository}}:{{.Tag}}:{{.ID}}" | grep "registry.simple.tech" | cut -f 3 -d ":" | xargs docker rmi -f

Данная команда удалит все контейнеры, в названии образов которых содержится подстрока registry.simple.tech.

Также можно усложнить команду, добавив в фильтрацию исключение строк с подстрокой latest, чтобы не пытаться удалять уже запущенные контейнеры:

docker images --format "{{.Repository}}:{{.Tag}}:{{.ID}}" | grep -v latest | grep "registry.simple.tech" | cut -f 3 -d ":" | xargs docker rmi

Как можно заметить, данная команда прибавилось еще одним pipe-ом с командой grep с ключом -v, который "инвертирует" логику фильтрации (т.е. наоборот, исключает требуемые слова или паттерн из выдачи). На всякий отмечу, что данный метод также отсеит строки, у которых в наименовании образа просто существует подстрока latest, так что будьте аккуратны с наименованием образов.