Два самых основных соображения, которые вы должны иметь здесь:
- При удалении контейнера все в файловой системе контейнера теряется.
- Чаще всего удалять контейнеры; требуется изменить многие параметры запуска или обновить контейнер на более новый образ.
Таким образом, вы не хотите хранить что-либо «в контейнере» в качестве основного хранилища данных: оно недоступно извне контейнера и будет потеряно в следующий раз, когда появится критическое обновление безопасности, и вы должны удалить контейнер.
На простом Докере я бы посоветовал оставить
... на изображении : ваше фактическое приложение (скомпилированный двоичный файл или его интерпретированный источник в зависимости от ситуации; объем не входит в объем)
... в контейнере: /tmp
... в директории хоста, монтируемой на привязку: конфигурационные файлы, которые необходимо вставить в контейнер во время запуска; каталоги файлов журналов, создаваемых контейнером (вещи, в которых вы как оператор должны напрямую взаимодействовать с файлами)
... в именованном томе или в подключенном хост-каталоге: постоянные данные, которые контейнер записывает в файловой системе
В этом последнем пункте подумайте о том, чтобы попытаться вообще избежать этого слоя; хранение данных в базе данных, работающей «где-то еще» (может быть другой контейнер, облачный сервис, такой как RDS, ...), упрощает такие вещи, как резервное копирование, и упрощает запуск нескольких реплик одного и того же сервиса. Резервное копирование хост-каталога проще, но в некоторых средах (MacOS) это недопустимо медленно.
Мои ответы здесь не меняются на «производственный» или «непроизводственный» или «критический» против «некритический», за некоторыми исключениями, которые можно оправдать, сказав «все в порядке, если я потеряю эти данные» («потому что это не главная копия»).