Как "lxd" отличается от lxc/docker?

Вопросы

  • Как lxd обеспечивает полную функциональность операционной системы внутри контейнеров, а не только отдельных процессов?
  • Как он отличается от обложек lxc/docker +?
  • Он похож на контейнер, который запущен с docker + supervisor/wrapper script, чтобы содержать несколько процессов в одном контейнере?

Другими словами:

  • Что я могу сделать с lxd, который я не могу сделать с некоторыми обертками над lxc и docker?
  • Почему он доступен только в ubuntu, если они используют основные функции ядра (пространства имен и cgroup)?

Ответ 1

LXD работает совместно с LXC и не предназначен для замены или замены LXC. Вместо этого его целью стало упрощение использования на LXC-контейнерах благодаря добавлению внутреннего демона, поддерживающего REST API, и простого клиента CLI, который работает с локальным демоном и удаленными демонами через REST API.

LXD больше похож на хост докера.

Ответ 2

LXD основан на liblxc, его целью является управление некоторым lxc с добавленными возможностями, такими как моментальные снимки или живая миграция. LXD связан с lxc, и они ориентированы по ОС.

Docker гораздо больше ориентирован на приложения, основанный в начале на lxc, но теперь не зависящий от lxc, он может использовать openvz или что-то еще. Docker фокусируется только на приложении с lib и зависимостью, а не на ОС.

посмотрите на это больше: https://www.flockport.com/lxc-vs-lxd-vs-docker-making-sense-of-the-rapidly-evolving-container-ecosystem/

С уважением.

Ответ 3

Как lxd предоставляет полную функциональность операционной системы в контейнерах, а не только отдельные процессы?

Контейнеры - изолированные системы Linux, использующие возможности групп для ограничения cpu/memory/network/etc в ядре Linux без необходимости запуска полной виртуальной машины.

LXD использует возможности, предоставляемые liblxc (основанные на LXC), и из этого вытекают возможности для полной функциональности ОС.

Как он отличается от обложек lxc/docker +?

LXD использует liblxc из LXC. Docker больше ориентирован на приложения, только основной процесс для вашего приложения внутри контейнера (используя libcontainer теперь по умолчанию, Docker сначала использовал liblxc)

Совместим ли он с контейнером, который запускается с помощью docker + supervisor/wrapper      script содержать несколько процессов в одном контейнере?

Нечто похожее. Разница между LXD и Docker заключается в том, что Docker является контейнером приложений, LXD является системным контейнером. LXD использует upstart/systemd как основной процесс внутри контейнера и по умолчанию готов к полной среде VM с очень легким использованием памяти/процессора. Да, вы можете построить свой докер с помощью supervisorctl/runit, но вам нужно выполнить вручную этот процесс. Вы можете проверить, как это делается в http://phusion.github.io/baseimage-docker/, которые делают что-то подобное внутри контейнера.

Что я могу сделать с lxd, который я не могу сделать с некоторыми обертками над lxc и docker?

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

LXD и Docker - это разные вещи. LXD предоставляет вам "полную ОС" в контейнере, и вы можете использовать любое средство развертывания, которое работает в виртуальной машине для развертывания приложений в LXD. С Docker ваше приложение находится внутри контейнера, и вам нужны различные инструменты для развертывания приложений в Docker и показатели производительности.

Почему он доступен только в ubuntu, если они используют основные функции ядра (пространства имен и cgroup)?

LXD имеет коммерческую поддержку от Canonical, если это необходимо, но вы можете создать LXD в Centos 7, ArchLinux (с исправленным ядром) проверить https://github.com/lxc/lxd. Gentoo теперь поддерживает LXD https://wiki.gentoo.org/wiki/LXD.