2016-09-02 5 views
0

У меня возникли проблемы с пониманием того, как использование томов для хранения повлияет на использование моего дискового пространства.Многоуровневые файловые системы и тома

У меня есть изображение A, которое является базовым изображением и поставляется с множеством утилит, которые нужны моим приложениям. У меня есть приложения B и C, которые являются изображениями, созданными из базового образа A. Они устанавливают разные языки для запуска моих двух разных приложений. Изображение A составляет 300 МБ, а B и C - 300 МБ.

Если я создам 10 экземпляров приложений A и B, сколько дискового пространства будет использовано?

Кроме того, предположим, что я монтирую общий ресурс NFS во всех контейнерах, любые приложения/процессы в контейнерах только когда-либо записывают данные приложения, журналы и т. Д. На установленный ресурс nfs, поэтому казалось бы, что записи не происходят в пределах контейнер. Точка монтирования - это/var/www/html, как будет выглядеть мой диск?

Как я понимаю, в первом случае использование моего диска будет (300 МБ для базового изображения + 600 мб для двух изображений приложений, которые построены на нем, следовательно, 900 мб). Я предполагаю, что базовое изображение будет общим. Если какие-либо контейнеры создаются из изображений приложения B и C, и каждый из них записывает данные 100mb перед очисткой. Тогда мое общее использование диска будет 900 МБ + 100 МБ (нетто-данные, записанные на диск) * количество контейнеров?

я понимаю это?

ответ

2

Слойная файловая система будет повторно использовать слои из родительских изображений, поэтому, если изображение А составляет 300 МБ, а приложения В и С - каждый 300 МБ, то на самом деле эти контейнеры приложений добавляют почти 0 дисковое пространство, reusi все содержимое родительского изображения. Когда все данные хранятся снаружи и не записываются в локальную файловую систему RW-контейнера, вы можете развернуть столько, сколько хотите, и использовать только 300 МБ диска.

Если каждый из этих приложений фактически добавления 300MB, и те, 300 отличаются от родителей и других приложения контейнеров (докер использует кэширование, что может позволить каждому приложение контейнера для повторного использования с другой, если они побежали одни и ту же команду) , то вы получите каждое изображение с 600 МБ, в то время как фактический используемый диск будет 900 МБ, 300 МБ для родителя и 300 МБ для каждого изображения приложения.

Скручивание каждого контейнера не добавляет к используемому дисковым пространствам, пока этот контейнер не будет записывать файлы на локальный том или слой RW контейнера.

Понимание этого вникает в многоуровневую архитектуру файловой системы. Изображение может состоять из нескольких слоев, каждый из которых создается один раз и может быть повторно использован другими изображениями, все хранится как ссылки на хэш, и только когда больше нет ссылок на хэш, докеры удаляют этот слой на docker rmi ,

При обращении изображения в контейнер (с docker run или даже docker create) содержимое изображения монтируется в виде слоев только для чтения, с RW-слоем для контейнера, установленного сверху, и любых томов, установленных поверх многослойных файловая система. Чтение за пределами тома проходит через слои до тех пор, пока оно не достигнет одного с файлом (или какая-либо другая модификация в файле, например, удаление). Поэтому, если файл не был изменен, он читается с одного из слоев изображения, но если вы создадите его на RW-слое, ваше чтение вернет его. Это приводит к тому, что концепция изображений неизменна, в то время как контейнеры могут хранить собственные изменения в течение всего срока службы контейнера. Вы можете запустить docker diff на контейнере, какие изменения были внесены в его слой RW. Этот diff - это то, что вы храните в слое изображения на каждом этапе сборки, или на docker commit.

+0

Спасибо. Итак, с сетевым файловым сервером для записи я могу запускать неограниченное количество контейнеров на моей машине? – Jonathan

+0

Неограниченное время, пока у вас неограниченная память для каждого процесса. Там будут некоторые теоретические ограничения на файловые дескрипторы и сетевое адресное пространство, но до того, как вы их достигнете, у вас не хватит памяти или мощности процессора. – BMitch

+0

Кажется слишком хорошим, чтобы быть правдой :-). Благодарю. Приложения A и B являются отдельными разнородными изображениями, поэтому общая сумма составит 900 МБ. – Jonathan

 Смежные вопросы

  • Нет связанных вопросов^_^