Чем "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/
С уважением.