Какая разница в логах между контейном и сервисом?

Логи в контейнере и сервисе в Docker имеют некоторые отличия. Рассмотрим их подробнее:

Контейнер:

  • Каждый запущенный контейнер в Docker обладает собственным пространством имен для логов.
  • По умолчанию, Docker отправляет логи контейнера на стандартный вывод (stdout) и стандартный вывод ошибок (stderr) контейнера.
  • Как правило, логи контейнера запускаются в режиме потокового вывода, то есть каждая новая строка в логах будет отображаться сразу как новый вывод.
  • Вы также можете настроить систему журналирования Docker, чтобы перенаправить логи контейнера во внешние системы хранения логов, такие как Docker Logging Drivers (syslog, json-file, fluentd и др.).
  • Все логи контейнера доступны только в контексте этого контейнера. Их можно просмотреть с помощью команды docker logs [CONTAINER_ID].

Сервис:

  • Сервис в Docker — это абстракция, которая позволяет запускать множество контейнеров с одним и тем же образом и настроениями.
  • Логи сервиса представляют собой совокупность логов всех контейнеров, которые относятся к данному сервису.
  • При использовании docker-compose для запуска сервиса, логи доступны через команду docker-compose logs [SERVICE_NAME]. Они могут быть просмотрены как в режиме потокового вывода, так и в одиночном режиме.
  • Команда docker service logs [SERVICE_NAME] позволяет просматривать логи сервиса в режиме потокового вывода в Swarm-кластере.

Таким образом, основные различия между логами контейнера и сервиса в Docker заключаются в том, что логи контейнера относятся только к этому контейнеру и могут быть просмотрены только в контексте этого контейнера, в то время как логи сервиса являются суммарными логами всех контейнеров, принадлежащих к данному сервису. Логи сервиса также могут быть удобно просмотрены с помощью команды docker-compose logs или docker service logs в зависимости от среды выполнения.