В чем разница между слоем контейнера и объемом в Docker?

В контексте докера я понимаю, что такое слои изображения и какой верхний доступный для записи слой. Если я запустил контейнер докеров без аргументов -v, будут ли созданы какие-либо тома? Если я укажу том (который не является монтированием в какое-то место на хосте), станет ли том доступным для записи слоем этого контейнера?


person The Governor    schedule 10.10.2017    source источник


Ответы (2)


Объемы и слои изображений - это отдельные понятия в Docker. На ваш первый вопрос: нет, тома не создаются без использования -v (игнорируя на данный момент тот факт, что формат Dockerfile имеет VOLUME глагол).

Если вы укажете том, который предоставляется каким-либо драйвером тома (по умолчанию это локальный каталог, который будет привязан и монтироваться к целевому местоположению в файловой системе вашего контейнера), этот том не связан со слоями изображения, включая самый верхний слой с возможностью записи предоставляется внутренним драйвером хранилища, используемым в вашем движке Docker.

В частности, используемый драйвер памяти - это то, что управляет стеком слоев и этим верхним слоем «r / w». Например, драйвер overlay, devicemapper или btrfs обрабатывает монтирование слоев изображения, а также создание и управление верхним слоем.

Тома вступают в игру за пределами этого, будучи привязанными к существующим (или созданным) путям в образе файловой системы. Когда вы выходите из контейнера, эти тома сохраняются в исходном местоположении (например, для локального драйвера тома / тома по умолчанию в /var/lib/docker/volumes/<name>), а в несмонтированном стеке уровней под управлением используемого драйвера хранилища будет измененный «верхний уровень» стека слоев, если контейнер не был удален при выходе (--rm). Это две отдельно управляемые концепции, и система томов не взаимодействует с серверным драйвером хранилища.

person Phil E    schedule 11.10.2017
comment
Спасибо. Очень помогает - person The Governor; 13.10.2017
comment
Значит, тома - это привязки. - person Melab; 12.01.2021

Том предназначен для подключения данных между контейнером и хостом

Если я запустил контейнер докеров без аргументов -v, будут ли созданы какие-либо тома?

-v не для создания тома, просто для монтирования данных из и в

-v [путь_хоста]: [путь_контейнера],

здесь host_path, путь к каталогу вашего сервера, в который вы хотите передать данные

container_path, дата монтирования пути к каталогу контейнера с

Если я укажу том (который не является монтированием в какое-либо место на хосте), станет ли том доступным для записи слоем этого контейнера?

Когда путь не существует в хосте. Но вы установили его в контейнер, здесь два случая.

СЛУЧАЙ 1: если вы хотите смонтировать некоторые файлы конфигурации со своего компьютера в контейнер, если контейнер ожидает этот файл во время работы, он выдает ошибку в журналах.

СЛУЧАЙ 2: если вы хотите смонтировать том из контейнера на хост-машину. Когда cotainer запускается, он создает папку на хост-машине и записывает данные в смонтированный каталог хост-машины.

person Jinna Balu    schedule 17.10.2017