Стратегии журналирования Docker Compose
Режим доставки журналов в Docker определяет, как журналы передаются из работающих контейнеров в указанный драйвер журналов. Существует два режима доставки:
- Блокирующий
В этом режиме демон Docker может заблокировать контейнер, не позволяя ему записывать данные в драйвер журнала. Это особенно полезно, если драйвер журнала не может справиться с объёмом записываемых журналов. Однако, это также может вызвать проблемы, если заблокированный контейнер является важной частью вашего приложения.
- Неблокирующий
Docker не будет блокировать контейнеры в этом режиме, даже если драйвер журнала не успевает за объёмом записываемых журналов. Вместо этого Docker будет буферизовать журналы и доставлять их, когда драйвер журнала будет готов. Однако, это может вызвать проблемы, если буфер журнала заполняется, что приводит к удалению журналов Docker.
Чтобы понять риск потери журнала в неблокирующем режиме, предположим, что у вас есть файл Docker Compose (docker-compose.yml), который определяет две службы: веб-сервер и базу данных. Веб-сервер регистрирует важную информацию на stdout или stderr внутри контейнера, и вы ожидаете, что эти журналы будут доступны для целей отладки или мониторинга.
version: '3'
services:
web:
build: .
ports:
- 8080:80
db:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=password
Если вы запускаете службы с помощью команды docker-compose up -d в неблокирующем режиме (отсоединённом режиме), контейнеры будут работать в фоновом режиме. Однако, если вы не будете активно собирать или перенаправлять журналы в файл или систему журналирования, журналы не будут немедленно видимы или сохранены. Это может привести к потенциальной потере журнала.
Продолжение следует...
Перевод с некоторыми авторскими правками.