Как хранятся не объемные данные для контейнера Docker?

#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.