Несколько полезных команд в 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
, так что будьте аккуратны с наименованием образов.