Каково влияние использования нескольких базовых изображений в Docker?

Я понимаю, что контейнеры docker переносимы между хостами docker, но я смущен отношениями с базовым изображением и хостом.

с документация на картинки, похоже, что у вас был бы гораздо более тяжелый след (сродни нескольким VMs) на главной машине, если бы у вас было множество базовых изображений. Правильно ли это предположение?

  • хороший: много контейнеров, разделяющих одну базу изображение.
  • плохо: многие контейнеры работают с отдельными / уникальными базовыми изображениями.

Я уверен, что большая часть этой путаницы происходит из-за моего незнания LXC.

enter image description here

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