Хотите знать, что приложения Docker делают за кулисами? Разберёмся с журналами - скрытым окном в работу ваших контейнеров, которое фиксирует каждое их действие. Журналы незаменимы при отладке. Но сначала кратко вспомним, что такое Docker и Docker Compose.
Docker позволяет упаковывать приложения в изолированные контейнеры и запускать их практически на любой операционной системе без установки зависимостей. По сути, каждое приложение помещается в отдельный контейнер и работает одинаково в любой среде. Понимание принципов работы контейнеров - необходимая основа перед изучением Docker Compose. Поэтому рекомендуем сначала прочитать нашу статью о преимуществах контейнеризации.
Docker Compose входит в состав Docker и упрощает разработку многоконтейнерных приложений: он объединяет их сервисы, сети и хранилища в единую конфигурацию. Логи контейнеров Docker и логирование Docker Compose дают разработчикам полную картину того, что происходит внутри каждого контейнера.
Хотите разобраться в логах Docker Compose? Вы попали по адресу. В этой статье мы разберём основы логов Docker Compose и рассмотрим более сложные сценарии использования. Узнайте, как эффективно применять Docker Compose в своих проектах.
Зачем нужны журналы Docker Compose
Представьте: разработчик запускает приложение через Docker, не настроив логирование. Сначала всё работает нормально. Но вскоре пользователи начинают сталкиваться с ошибками, и приложение тормозит. Без логов Docker невозможно понять, что происходит внутри контейнеров. Логи Docker Compose - это подробная летопись жизни этих контейнеров. Они фиксируют каждое событие, что критически важно для диагностики и устранения проблем.
Разработчик или системный администратор должен понимать, что происходит внутри многоуровневых приложений и между их компонентами. Именно здесь логи Docker Compose становятся незаменимым инструментом. Зачем они нужны?
-
Отладка и устранение неполадок
Если приложение работает некорректно или выдаёт ошибки, логи docker - первое, куда стоит смотреть. Изучив их, разработчик может точно определить источник проблемы: будь то баг в коде, ошибка конфигурации или нехватка ресурсов.
-
Мониторинг работоспособности приложений
Регулярный мониторинг логов приложения позволяет оценить общее состояние сервисов. Логи выявляют ранние признаки неполадок: повторяющиеся ошибки, замедление ответов. Своевременное обнаружение таких паттернов помогает предотвратить серьёзные проблемы в будущем.
-
Аудит и соответствие требованиям
Для приложений, которые должны соответствовать определённым стандартам, логи docker - первое доказательство того, что приложение соблюдает установленные требования. Кроме того, логи незаменимы для контроля авторизованной и несанкционированной активности.
-
Оптимизация
Логи содержат данные о производительности и являются ценным источником для оптимизации приложений. Например, разработчики могут выявить медленные запросы, неэффективные участки кода или недоиспользуемые ресурсы.
Создание Docker-рецепта: развёртывание веб-сервера
В этом разделе мы вместе создадим Docker-рецепт. Для начала работы с логами Docker Compose нам нужно что-то развернуть. Используем в качестве примера веб-сервер. Чтобы создать Dockerfile, выполните команду nano файл Dockerfile в нужной директории на вашем VPS со следующим содержимым и сохраните файл:
FROM nginx:alpine RUN rm /usr/share/nginx/html/index.html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
Что делает каждая строка этого кода?
- Начнём с лёгкого базового образа, nginx:alpine.
- Затем удалим стандартную страницу приветствия Nginx.
- После этого убедимся, что веб-сервер слушает порт 80.
- Наконец, запустим сервер Nginx с помощью CMD.
Теперь наш Dockerfile готов, и мы переходим к следующему шагу — созданию файла Docker Compose. Вот структура файла docker-compose.yml :
version: '3.8' services: web: build: . ports: - "8080:80" volumes: - ./index.html:/usr/share/nginx/html/index.html
Разберём каждую часть подробнее:
- Используем версию 3.8.
- В следующей строке назовём наш сервис "web“.
- Затем укажем Docker собрать наш веб-сервер из текущей папки.
- Связываем порт 8080 на хосте с портом 80 в контейнере, чтобы веб-сервер мог принимать соединения.
- Наконец, в разделе volumes настраивается маппинг index.html с диска хоста в контейнер. Позже вы можете создать index.html файл с любым содержимым и разместить его там, где находятся файлы Dockerfile и docker-compose.yml .
Теперь запустим наш контейнер Docker с помощью Docker Compose. Просто выполним команду docker-compose up.

После выполнения команды docker-compose up Docker загрузит нужные образы из интернета и настроит их в соответствии с нашими конфигурационными файлами.
Чтобы проверить, работает ли веб-сервер, откройте браузер, введите IP-адрес вашего VPS и обратитесь к порту 8080.

К слову, вы также можете использовать docker-compose up -d чтобы запустить контейнер в фоновом режиме.
Просмотр логов через Docker Compose
Веб-сервер готов к работе. Он уже генерирует логи и сохраняет их для последующего использования. Доступ к логам Docker Compose необходим для диагностики и мониторинга. Как же их просматривать? Для этого используется команда журналы docker-compose Убедитесь, что вы находитесь в папке с файлом конфигурации, и выполните эту команду.

Иногда нужно следить за логами в режиме реального времени по мере их поступления. Добавьте флаг -f в конец предыдущей команды и выполните docker-compose logs -f.

Некоторые приложения на базе Docker могут не включать временны́е метки в логи. В таком случае используйте docker-compose logs -t чтобы добавить время записи для каждой строки лога.

Логи Docker также позволяют выводить только последние записи. Для этого используйте docker-compose logs –tail 10 чтобы просмотреть последние 10 записей лога. Команда tail в Docker Compose, как и docker logs tail, особенно удобна, когда нужно быстро проверить последние события, не листая весь журнал целиком.

Основная задача Docker Compose — создание многоконтейнерных приложений. Поэтому может потребоваться просмотр логов конкретного сервиса. Для этого используйте docker-compose logs -f SERVICE, заменив SERVICE на реальное имя вашего сервиса.

Логирование в Docker
Экосистема Docker может усложняться по мере роста приложений, особенно в крупных окружениях. Каждый контейнер генерирует собственные логи. За их получение, доставку и хранение отвечает механизм, известный как Logging Driver. По умолчанию Docker использует файлы JSON в качестве Logging Driver, однако поддерживает и другие драйверы — у каждого есть свои преимущества и ограничения.
Логи играют ключевую роль в разных задачах: от диагностики проблем до оптимизации производительности системы. Ниже рассмотрим два основных сценария использования логов контейнеров:
- Мониторинг: Основная задача логов — мониторинг. Они отражают общее состояние наших контейнеризованных приложений.
- Устранение неполадок: При возникновении проблем логи помогают обнаружить сбои в работе приложения.
Поскольку docker logs и docker compose logs генерируются непрерывно, они могут заполнить всё доступное хранилище VPS. Поэтому нам нужна стратегия управления дисковым пространством — политика ротации логов. Чтобы создать и применить её, вернитесь к файлу docker-compose.yml и откройте его. Затем добавьте секцию logging со следующей конфигурацией:
version: '3.8' services: web: build: . ports: - "8080:80" volumes: - ./index.htm:/usr/share/nginx/html/index.htm logging: driver: json-file options: max-size: "200k" max-file: "10"
Вы можете в любой момент настроить max-size и max-file под свои нужды.
Модели доставки логов Docker
В более сложных окружениях инженеры могут выбрать другую модель логирования вместо стандартных драйверов JSON — например, Syslog, fluentd и другие. Тем не менее важно помнить: драйвер JSON-file подходит для большинства сценариев логирования, и отклоняться от режима по умолчанию, как правило, нет необходимости.
В зависимости от архитектуры вашего приложения или требований организации вам может потребоваться использовать централизованные решения для сбора логов — агрегаторы логов. Такие сервисы, как Elasticsearch, Logstash, Kibana и другие, собирают логи из различных источников, объединяют, хранят и анализируют их в одном месте.
Кроме того, стоит хранить логи в более экономичных хранилищах. Представьте ситуацию: ваше хранилище VPS работает на быстрых и дорогих дисках. Держать там логи, которые могут понадобиться лишь в будущем, попросту нерентабельно.
Существует множество моделей логирования, у каждой из которых есть свои плюсы и минусы. Важно тщательно оценить каждую из них и выбрать ту, которая соответствует вашим конкретным задачам.
Выберите экономный или премиальный Linux VPS для хостинга сайта или удалённого рабочего стола по минимальной цене. VPS работает на базе Linux KVM для повышения эффективности и использует производительное железо с хранилищем NVMe SSD для максимальной скорости.
Читать далееЗаключение
Понимание логов Docker Compose — ключ к эффективному управлению и отладке приложений Docker. Умение работать с этими логами улучшает диагностику и повышает производительность и безопасность вашего приложения. Независимо от того, занимаетесь ли вы разработкой или администрированием систем, логи Docker Compose — незаменимый инструмент для контроля над контейнерами.
Часто задаваемые вопросы
Как фильтровать логи Docker Compose по времени?
Docker Compose не предоставляет встроенного способа фильтровать логи по времени. Однако вы можете фильтровать их, передавая вывод через grep для поиска по шаблону. Например: docker-compose logs | grep "2023-04-06" — замените "2023-04-06" на нужную вам дату или временной шаблон.
Как остановить контейнеры, запущенные через Docker Compose?
Перейдите в директорию с файлом docker-compose.yml и выполните команду docker-compose down.
Как удалить файлы логов вручную?
Вместо настройки ротации логов в файле docker-compose.yml можно вручную удалить файлы логов Docker JSON из /var/lib/docker/containers/<container_id>/. Перед этим определите ID нужного контейнера Docker с помощью команды docker ps -a.
Можно ли просматривать логи Docker в режиме реального времени?
Да. Для этого используйте команду docker logs с флагом -f или --follow. Она выведет логи Docker в режиме реального времени.