Каково влияние использования нескольких базовых изображений в Docker?
Я понимаю, что контейнеры docker переносимы между хостами docker, но я смущен отношениями с базовым изображением и хостом.
с документация на картинки, похоже, что у вас был бы гораздо более тяжелый след (сродни нескольким VMs) на главной машине, если бы у вас было множество базовых изображений. Правильно ли это предположение?
- хороший: много контейнеров, разделяющих одну базу изображение.
- плохо: многие контейнеры работают с отдельными / уникальными базовыми изображениями.
Я уверен, что большая часть этой путаницы происходит из-за моего незнания LXC.
3 ответов
Я смущен отношениями с базовым изображением и хостом.
единственное отношение между контейнером и хостом заключается в том, что они используют одно и то же ядро. Программы, работающие в Docker, вообще не могут видеть файловую систему хоста, только свою собственную файловую систему.
похоже, что у вас был бы гораздо более тяжелый след (сродни нескольким VMs) на главной машине, если бы у вас было множество базовых изображений. Это предположение правильно?
нет. Базовый образ Ubuntu составляет около 150 МБ. Но вам будет трудно на самом деле использовать все эти программы и библиотеки. Вам нужно только небольшое подмножество для любой конкретной цели. Фактически, если ваш контейнер работает с memcache, вы можете просто скопировать 3 или 4 библиотеки, которые ему нужны, и это будет около 1 МБ. Нет необходимости в оболочке и т. д. Неиспользуемые файлы будут просто терпеливо сидеть на диске, полностью игнорируясь. Они не загружаются в память, и они не копируются на диск.
хорошо: многие контейнеры, разделяющие одно базовое изображение. Плохо: многие контейнеры работают с отдельными / уникальными базовыми изображениями.
нет. Использование нескольких изображений будет использовать только крошечный бит ОЗУ. (Очевидно, что несколько контейнеров займет больше места на диске, но диск дешев, поэтому мы проигнорируем это). Поэтому я бы сказал, что это" хорошо "вместо"плохо".
пример: я запускаю один контейнер Ubuntu с Memcached и другим Контейнер Centos с Tomcat. Если бы они оба работали под управлением Ubuntu, они могли бы поделиться ОЗУ для таких вещей, как libc
. Но поскольку они не разделяют файлы, каждое базовое изображение должно загружать собственную копию libc
. Но, как мы видели, мы говорим только о 150 МБ файлов, и вы, вероятно, используете только несколько процентов этого. Таким образом, каждое изображение тратит только несколько МБ ОЗУ.
(подсказка: посмотрите на свой процесс в ps
. Вот сколько ОЗУ он использует, включая любые файлы из его изображения.)
на данный момент Docker использует AUFS, который является файловой системой Union, использующей копию при записи.
когда у вас есть несколько базовых образов, эти образы занимают место на диске, но при запуске N контейнеров из этих образов фактический диск не используется. Поскольку это копирование на запись, только измененные файлы будут занимать место на хосте.
Так действительно, если у вас есть 1 или N базовое изображение, оно ничего не меняет, независимо от того, сколько у вас контейнеров.
изображение больше ничего но файловая система, где вы могли бы chroot, нет абсолютно никакой связи между изображением и хостом, кроме того, что он должен быть двоичной формой linux той же архитектуры.
Я думаю, что несколько базовых изображений оказывают незначительное влияние на используемую память.
объяснение:
Я думаю, что ваше сравнение с VM немного вводит в заблуждение. Конечно, в случае f.e. 3 базовых изображения работает, вы будете иметь более высокие требования к памяти, чем в случае только 1 базового изображения, но VMs будет иметь еще более высокие требования к памяти:
грубый расчет-Докер, для M изображений, N контейнеров:
- 1 x базовое изображение + N x контейнер (файловая система + рабочая память)
- M x размер базового изображения + N x контейнер (файловая система + рабочая память)
Расчет-VMs:
- N x VM image = не менее N x размер базового образа для конкретной VM + N x размер контейнера (размер файловой системы + рабочая память)
для докера, чтобы получить преимущество, вы должны иметь M