Когда на машине работает больше десятка контейнеров, команды docker ps, docker logs и docker exec начинают выполняться почти рефлекторно. Переключение между терминалом, файлом compose и веб-панелью отнимает время, а ошибка в имени контейнера всплывает в самый неподходящий момент. lazydocker решает эту бытовую проблему: собирает контейнеры, образы, тома и сети в одном терминальном окне и позволяет управлять ими с клавиатуры, не набирая длинные команды. Ниже — установка, реальные сценарии, настройка и честная оценка ограничений.
Что такое lazydocker
Это открытая утилита с текстовым интерфейсом, написанная на Go. Она не заменяет Docker и не работает с ним в обход API: lazydocker обращается к тому же демону, что и привычный CLI, поэтому видит ровно те контейнеры, которые доступны вашему пользователю. Отдельного агента, базы данных или веб-сервера нет — один бинарник, который запускается и завершается по нажатию клавиши.
По духу инструмент близок к lazygit: несколько панелей, контекстные горячие клавиши, быстрый переход к логам и оболочке. Проекты Docker Compose он группирует по сервисам, что удобно, когда в одном каталоге поднимается сайт, база и кэш. Инструмент не предназначен для Kubernetes, Swarm или удалённых кластеров без локального демона — это важно понимать до установки.
Установка и права доступа
Проще всего взять готовый бинарник из релизов проекта. Пакетные менеджеры тоже поддерживают утилиту, но версии в репозиториях отстают, поэтому для свежих исправлений лучше ручная установка в домашний каталог.
mkdir -p ~/.local/bin
curl -L https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_Linux_x86_64.tar.gz \
| tar xz -C ~/.local/bin lazydocker
chmod +x ~/.local/bin/lazydocker
lazydocker --version
Убедитесь, что ~/.local/bin присутствует в PATH. Если Docker требует sudo, добавьте пользователя в группу docker и перезайдите в сессию — иначе утилита запустится, но список контейнеров будет пустым:
sudo usermod -aG docker "$USER"
newgrp docker
docker ps
Проверка через docker ps важна: lazydocker показывает только то, что доступно демону. Пустая панель почти всегда означает не отсутствие контейнеров, а проблему с правами или сокетом.
Интерфейс и навигация
Окно разделено на панели: контейнеры, образы, тома, сети, а также область логов и служебная строка. Переключение — Tab, перемещение — стрелки, выход — q, полная справка по клавишам — ?. Внутри панели контейнеров Enter открывает меню действий, d удаляет, r перезапускает, s останавливает, p ставит на паузу, l показывает логи, e открывает оболочку.
- Containers — состояние, порты, образ, время работы; отсюда же просмотр логов и вход внутрь.
- Images — удаление неиспользуемых образов и очистка места без похода в
docker image prune. - Volumes — тома и их размеры; полезно перед удалением «пустого» тома, в котором лежит база.
- Networks — сети проекта и подключённые контейнеры.
Клавиша b открывает массовые операции, x — дополнительное меню. Мышечная память вырабатывается за пару дней, после чего набирать docker ps --format уже не хочется.
Повседневные сценарии
Типичный запуск выполняется из каталога проекта, где лежит compose.yaml. Утилита сама подхватит проект и сгруппирует сервисы:
cd ~/projects/site
lazydocker
# тот же список, но без интерфейса — для сравнения
docker compose ps
docker stats --no-stream
Через интерфейс удобно смотреть логи после деплоя, перезапускать один сервис, не трогая остальные, и заходить в контейнер, чтобы проверить конфиг или доступность соседнего сервиса по имени. Для отладки сети полезно открыть оболочку и выполнить getent hosts db или curl -I http://web:80 — это быстрее, чем поднимать отдельный контейнер.
Логи и диагностика
Панель логов вызывает docker logs и умеет следовать за потоком. Если в интерфейсе не хватает фильтра, те же данные можно получить вручную:
docker logs -f --timestamps --tail 200 site-web-1
docker inspect site-web-1 --format '{{.State.Status}} {{.State.ExitCode}}'
docker exec -it site-web-1 sh
docker events --filter type=container --since 10m
Обратите внимание: lazydocker не хранит историю. Всё, что вы видите, — текущее состояние демона и последние строки журнала. Для разбора инцидента, случившегося ночью, нужен внешний сбор логов, а не терминальный интерфейс. Это ограничение стоит учитывать в продакшене.
Настройка под себя
При первом запуске создаётся файл ~/.config/lazydocker/config.yml. В нём меняются тема, язык, поведение логов и шаблоны команд. Например, чтобы не забывать про метки времени и не тянуть гигабайты истории:
gui:
language: ru
border: rounded
theme:
activeBorderColor:
- green
- bold
logs:
timestamps: true
since: 30m
commandTemplates:
dockerCompose: docker compose
Свои команды добавляются в раздел customCommands. Удобно повесить быструю проверку здоровья сервиса или запуск миграций:
customCommands:
containers:
- name: shell
command: docker exec -it {{ .Container.ID }} sh
serviceNames: []
Флаг --config позволяет держать отдельные профили, например для домашней лаборатории и рабочего проекта. Это полезно, если на одной машине соседствуют разные наборы сервисов.
Ограничения и честная оценка
lazydocker — не замена Portainer или Grafana. В нём нет графиков потребления за сутки, ролей, аудита действий и работы с кластером. Утилита не подходит для командной работы: действия не логируются, а доступ определяется правами на сокет Docker, то есть фактически полными. На сервере с чужими контейнерами запускать её стоит только осознанно.
К минусам отнесём и привыкание к горячим клавишам: первое время меню приходится открывать чаще, чем хотелось бы. Зато ресурсов интерфейс почти не потребляет, по SSH работает предсказуемо, а установка сводится к копированию одного файла. Для домашней лаборатории и небольшой разработки это удачный компромисс между удобством и прозрачностью.
Итог
lazydocker закрывает узкую, но частую задачу: быстро посмотреть состояние контейнеров, прочитать лог, зайти внутрь и перезапустить сервис, не покидая терминал. Он не притворяется платформой мониторинга и не требует инфраструктуры. Если вы администрируете Docker на одной-двух машинах и цените клавиатуру, утилита окупает установку за вечер; если нужны графики, алерты и командный доступ — смотрите в сторону специализированных систем.