Чем "lxd" отличается от lxc/docker?

Вопросы

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

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

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

3 ответа

Решение

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

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

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

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

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

Чем он отличается от lxc / docker + wrappers?

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

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

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

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

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

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.

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/

С уважением.

Другие вопросы по тегам