Контейнер устроен вокруг одного главного процесса, и у него особая роль: он получает первый номер в своём пространстве. Это накладывает обязанности, о которых обычно узнают, когда контейнер перестаёт нормально останавливаться.
Процесс с первым номером должен уметь принимать сигнал завершения и корректно закрываться. Если приложение запущено через оболочку, сигнал часто до него не доходит, и платформа через положенное время убивает контейнер жёстко. Результат — оборванные соединения и незаписанные данные при каждом обновлении.
Вторая особенность — логи. В контейнере не принято писать в файлы: писать нужно в стандартный вывод, а сбор и хранение оставить платформе. Файл внутри контейнера всё равно исчезнет, а с ротацией придётся возиться отдельно.
Третье — накопление завершённых дочерних процессов. Если приложение порождает их и не собирает, они копятся в таблице процессов. Для таких случаев существует минимальный процесс-инициализатор, который берёт эту работу на себя.
Docker на Практике
@docker_practice_ru_n1k
Контейнер устроен вокруг одного главного процесса, и у него особая роль: он получает первый номер в своём прос
Этот пост опубликован в Telegram-канале Docker на Практике. Подписаться можно по ссылке: @docker_practice_ru_n1k.