Введение
Приложения внутри контейнеров обычно записывают сообщения о состоянии и ошибках в стандартный вывод и стандартный поток ошибок. Это важный принцип контейнерных систем: вместо того чтобы каждый контейнер самостоятельно управлял сложными файлами журналов, среда выполнения контейнеров перехватывает эти потоки и предоставляет к ним централизованный доступ.
По этой причине образы контейнеров часто создаются иначе, чем традиционное серверное программное обеспечение. На контейнерных платформах обычно предпочтительно записывать полезный вывод в stdout/stderr, а не скрывать журналы только в локальных файлах.
Разработчику или системному администратору важно иметь доступ к этим журналам, чтобы понимать, что происходит внутри фоновых контейнеров. В реальных платформах, таких как Kubernetes, эта модель stdout/stderr также служит основой централизованных конвейеров журналирования.
В этой лабораторной работе вы научитесь:
- запускать контейнер, который непрерывно генерирует вывод;
- получать журналы, созданные к текущему моменту;
- отслеживать журналы в реальном времени во время работы приложения;
- безопасно прекращать мониторинг, не останавливая приложение.
Запустите фоновый процесс
На этом шаге вы запустите контейнер Docker в отсоединённом режиме. Чтобы имитировать работу реального приложения, мы запустим простой скрипт, который каждую секунду выводит сообщение.
При запуске контейнера в отсоединённом режиме с флагом -d контейнер работает в фоне, поэтому его вывод сразу не отображается в текущем терминале.
Вывод при этом не исчезает: Docker перехватывает его вместо прямой передачи в текущий сеанс оболочки.
Выполните следующую команду, чтобы запустить контейнер:
docker run -d --name web-log-app alpine sh -c "while true; do echo 'Application is running...'; sleep 1; done"
Разбор команды:
docker run -d— запускает контейнер в фоне;--name web-log-app— задаёт контейнеру имя «web-log-app»;alpine— использует облегчённый образ «Alpine Linux»;sh -c "..."— команда, выполняемая внутри контейнера. Она запускает скрипт оболочки с бесконечным циклом (while true), который на каждой итерации выводит сообщение (echo) и приостанавливается на 1 секунду (sleep 1).
Проверьте, что контейнер работает:
docker ps
В списке активных контейнеров должен отображаться web-log-app.
Просмотрите существующие журналы
Поскольку контейнер работает в фоне, его вывод не отображается в текущем терминале. Docker сохраняет этот вывод и позволяет просматривать его с помощью команды docker logs.
На этом шаге вы получите журналы, созданные с момента запуска контейнера.
Выполните следующую команду:
docker logs web-log-app
Вы увидите список сообщений «Application is running...».
Как это работает:
Команда docker logs получает все журналы, сохранённые к текущему моменту, и выводит их на экран. Затем команда сразу завершается, и вы снова получаете приглашение командной строки. Это удобно для просмотра истории приложения или проверки состояния его запуска.
Таким образом, docker logs показывает накопленный к этому моменту вывод, а не открывает интерактивную оболочку внутри контейнера. Это доступное только для чтения представление данных, которые записывает главный процесс контейнера.
Если через несколько секунд выполнить команду снова, список будет длиннее, потому что контейнер продолжает создавать журналы в фоне.
docker logs web-log-app
Отслеживайте журналы в реальном времени
Иногда просмотра прошлых журналов недостаточно. Чтобы отладить проблему или отслеживать текущую активность, может потребоваться наблюдать за журналами по мере их появления. Это похоже на использование команды tail -f в Linux.
На этом шаге вы воспользуетесь флагом -f (follow), который передаёт журналы в реальном времени.
Выполните следующую команду:
docker logs -f web-log-app
Что происходит:
Приглашение командной строки не возвращается. Вместо этого терминал подключается к потоку журналов контейнера. Каждую секунду вы будете видеть новое сообщение «Application is running...».
По смыслу это похоже на tail -f, но источником данных служит перехваченный Docker поток журналов, а не обычный файл, который вы читаете напрямую.
Такой режим особенно полезен для наблюдения за поведением приложения во время взаимодействия с ним.
Отключитесь от просмотра и выполните очистку
Сейчас терминал продолжает отслеживать журналы. Контейнер всё ещё работает, а команда docker logs ожидает появления нового вывода.
Чтобы прекратить просмотр журналов и вернуться к приглашению командной строки, отправьте сигнал прерывания.
Нажмите на клавиатуре Ctrl+C.
Важное понятие:
В данном случае нажатие Ctrl+C останавливает команду docker logs — средство просмотра журналов, — но не останавливает сам контейнер. Контейнер web-log-app продолжает работать в фоне и создавать журналы.
Это различие важно на практике. Наблюдение за контейнером и управление контейнером — разные действия, и их смешение является распространённой ошибкой начинающих.
Проверить это можно с помощью списка процессов:
docker ps
В списке по-прежнему должен отображаться web-log-app.
Очистка:
Теперь, когда лабораторная работа завершена, остановите и удалите контейнер, чтобы освободить ресурсы. Мы используем docker rm -f: эта команда принудительно удаляет работающий контейнер, одновременно выполняя остановку и удаление.
docker rm -f web-log-app
Итоги
В этой лабораторной работе вы изучили основы доступа к журналам контейнеров Docker. Вы попрактиковались в следующем:
- Запуск фонового процесса — использование
docker run -d, чтобы освободить текущий терминал. - Просмотр существующих журналов — использование
docker logs <container_name>для просмотра ранее созданного вывода. - Мониторинг журналов в реальном времени — использование
docker logs -f <container_name>для потоковой передачи вывода по мере его появления. - Отключение от просмотра — использование
Ctrl+C, чтобы прекратить просмотр журналов, сохранив приложение работающим.
Эти навыки необходимы для отладки и мониторинга контейнерных приложений в любой среде.



