В контексте докера я понимаю, что такое слои изображения и какой верхний доступный для записи слой. Если я запустил контейнер докеров без аргументов -v, будут ли созданы какие-либо тома? Если я укажу том (который не является монтированием в какое-то место на хосте), станет ли том доступным для записи слоем этого контейнера?
В чем разница между слоем контейнера и объемом в Docker?
Ответы (2)
Объемы и слои изображений - это отдельные понятия в Docker. На ваш первый вопрос: нет, тома не создаются без использования -v
(игнорируя на данный момент тот факт, что формат Dockerfile
имеет VOLUME
глагол).
Если вы укажете том, который предоставляется каким-либо драйвером тома (по умолчанию это локальный каталог, который будет привязан и монтироваться к целевому местоположению в файловой системе вашего контейнера), этот том не связан со слоями изображения, включая самый верхний слой с возможностью записи предоставляется внутренним драйвером хранилища, используемым в вашем движке Docker.
В частности, используемый драйвер памяти - это то, что управляет стеком слоев и этим верхним слоем «r / w». Например, драйвер overlay, devicemapper или btrfs обрабатывает монтирование слоев изображения, а также создание и управление верхним слоем.
Тома вступают в игру за пределами этого, будучи привязанными к существующим (или созданным) путям в образе файловой системы. Когда вы выходите из контейнера, эти тома сохраняются в исходном местоположении (например, для локального драйвера тома / тома по умолчанию в /var/lib/docker/volumes/<name>
), а в несмонтированном стеке уровней под управлением используемого драйвера хранилища будет измененный «верхний уровень» стека слоев, если контейнер не был удален при выходе (--rm
). Это две отдельно управляемые концепции, и система томов не взаимодействует с серверным драйвером хранилища.
Том предназначен для подключения данных между контейнером и хостом
Если я запустил контейнер докеров без аргументов -v, будут ли созданы какие-либо тома?
-v не для создания тома, просто для монтирования данных из и в
-v [путь_хоста]: [путь_контейнера],
здесь host_path, путь к каталогу вашего сервера, в который вы хотите передать данные
container_path, дата монтирования пути к каталогу контейнера с
Если я укажу том (который не является монтированием в какое-либо место на хосте), станет ли том доступным для записи слоем этого контейнера?
Когда путь не существует в хосте. Но вы установили его в контейнер, здесь два случая.
СЛУЧАЙ 1: если вы хотите смонтировать некоторые файлы конфигурации со своего компьютера в контейнер, если контейнер ожидает этот файл во время работы, он выдает ошибку в журналах.
СЛУЧАЙ 2: если вы хотите смонтировать том из контейнера на хост-машину. Когда cotainer запускается, он создает папку на хост-машине и записывает данные в смонтированный каталог хост-машины.