Локальная файловая система контейнера никогда не хранит постоянные данные, поэтому у вас нет выбора, кроме как монтировать что-либо в контейнер, если вы хотите, чтобы данные жили после выхода из контейнера. «Драйверы хранилища на уровне блоков», которые вы цитируете, обсуждают конкретные параметры времени установки для хранения образов и контейнеров и не связаны с каким-либо конкретным томом или реализацией привязки.
Что касается производительности мое общее ожидание состоит в том, что задержка дискового ввода-вывода намного перевесит любые издержки любой конкретной реализации. Без бенчмаркинга какой-либо конкретной реализации на собственном хосте Linux я бы ожидал, что именованный том, монтирование с привязкой и записи в файловую систему контейнера будут более или менее похожи.
С точки зрения программирования Представьте, что вы, вероятно, получите лучшее долговременное улучшение производительности, если выясните, как уменьшить количество обращений к диску (например, сгруппировать связанные запросы к базе данных в одну транзакцию), чем пытаясь оптимизировать Docker -уровневое хранилище.
Единственное заметное исключение - это то, что монтирование на MacOS, как известно, очень медленное , и вам следует избегать их, если ваша рабочая нагрузка требует значительного доступа к диску. (Это включает в себя как чтение, так и запись, и включает в себя некоторые интерпретируемые языки, которые хотят читать во всех возможных исходных файлах во время запуска.) Если вы управляете чем-то вроде хранилища базы данных, где вы в любом случае не можете получить прямой доступ к файлам, используйте названный объем Для кода вашего приложения COPY
он превращается в изображение в Dockerfile
и не перезаписывает его во время выполнения.