#docker
#docker
Вопрос:
Я понимаю тома Docker и то, как они ссылаются на каталоги на хосте. Как насчет остальной файловой системы внутри контейнера?
Подумайте об этом по-другому: предположим, у вас есть сервер с большей частью хранилища на удаленном диске, что означает, что чтение и запись занимают больше времени, чем обычно. Если вы не смонтируете ни одного тома, сохранит ли это какую-либо / некоторую / большую часть / всю файловую систему контейнера в оперативной памяти? Или он записывает некоторое их количество на диск, что означает, что в этом случае это будет так же медленно, как и объем?
Комментарии:
1. Рекомендуемое чтение: Раздел «Понимание изображений, контейнеров и драйверов хранилища» из документации.
Ответ №1:
Не Объемные данные хранятся в многоуровневой файловой системе overlay (в большинстве дистрибутивов это будет либо файловая система AUFS, либо файловая система DeviceMapper). Принцип одинаков в обоих случаях (источник изображения):
Как уже упоминалось в комментариях, я могу порекомендовать прочитать раздел «Понимание изображений, контейнеров и драйверов хранилища» из официальной документации. Этот ответ — всего лишь краткое резюме.
Каждый образ Docker состоит из нескольких слоев образов файловой системы. Например, образ Apache PHP может состоять из (1) общего базового уровня Ubuntu, (2) дополнительного уровня с установленным HTTP-сервером Apache и (3) другого верхнего уровня с PHP-FPM и файлами конфигурации (просто пример).
Когда вы запускаете новый контейнер из изображения, к существующим слоям изображения добавляется новый слой для каждого контейнера. Этот уровень будет содержать все изменения, которые записаны внутри самого контейнера (в каталоги, не относящиеся к объему).
Что касается ваших конкретных вопросов:
Если вы не смонтируете ни одного тома, сохранит ли это какую-либо / некоторую / большую часть / всю файловую систему контейнера в оперативной памяти?
Нет, в оперативной памяти ничего нет (кроме обычных кэшей файловой системы). Все это находится в файловой системе overlay, которая монтируется с помощью AUFS, DeviceMapper или другого драйвера хранилища.
Или он записывает некоторое их количество на диск, что означает, что в этом случае это будет так же медленно, как и объем?
В общем, доступ к файловой системе в томах более производителен, чем в файловой системе overlay. В конце концов, том (по крайней мере, обычный том на базе хоста, не считая драйверов томов, добавляющих тома сетевого хранилища) — это просто привязка к обычному каталогу в файловой системе хоста, полностью минуя файловую систему уровня. В этой статье (среди прочих тем) исследуется производительность томов по сравнению с файловой системой layer:
AUFS приводит к значительным накладным расходам, что неудивительно, поскольку ввод-вывод выполняется на нескольких уровнях, […]. Приложениям, которые интенсивно работают с файловой системой или диском, следует обходить AUFS, используя тома. […] Хотя у самих контейнеров почти нет накладных расходов, у Docker есть проблемы с производительностью. Тома Docker имеют заметно лучшую производительность, чем файлы, хранящиеся в AUFS.