Ответы:
Из Docker FAQ :
Докер не является заменой для lxc. «lxc» относится к возможностям ядра Linux (в частности, к пространствам имен и контрольным группам), которые разрешают процессы песочницы друг от друга и управляют их распределением ресурсов.
В дополнение к этому низкоуровневому фундаменту функций ядра, Docker предлагает инструмент высокого уровня с несколькими мощными функциями:
Переносимое размещение на разных машинах.Docker определяет формат для объединения приложения и всех его зависимостей в один объект, который можно перенести на любой компьютер с поддержкой Docker и выполнить там с гарантией того, что среда выполнения, представленная приложению, будет одинаковой. Lxc реализует изолированную программную среду процессов, которая является важной предпосылкой для переносимого развертывания, но одного этого недостаточно для переносимого развертывания. Если вы отправите мне копию вашего приложения, установленного в пользовательской конфигурации lxc, оно почти наверняка не будет работать на моем компьютере так же, как на вашем, потому что оно привязано к конкретной конфигурации вашего компьютера: сети, хранилищу, журналам, дистрибутиву, и т.д. Docker определяет абстракцию для этих машинно-специфических настроек, чтобы один и тот же Docker-контейнер мог работать - без изменений - на многих разных машинах,
Применение ориентированное. Docker оптимизирован для развертывания приложений , в отличие от машин. Это отражено в его API, пользовательском интерфейсе, философии дизайна и документации. Напротив, вспомогательные сценарии lxc ориентированы на контейнеры как на легковесные машины - в основном серверы, которые загружаются быстрее и требуют меньше оперативной памяти. Мы думаем, что контейнеры - это больше, чем просто.
Автоматическая сборка . Docker включает в себя инструмент для разработчиков, позволяющий автоматически собирать контейнер из их исходного кода с полным контролем над зависимостями приложений, инструментами сборки, упаковкой и т. Д. Они могут свободно использовать пакеты make, maven, chef, puppet, salt, debian, rpms, source тарболы или любую комбинацию вышеперечисленного, независимо от конфигурации машин .
Versioning. Docker включает в себя git-подобные возможности для отслеживания последовательных версий контейнера, проверки различий между версиями, фиксации новых версий, отката и т. Д. История также включает в себя то, как и кем был собран контейнер, так что вы получаете полную отслеживаемость с рабочего сервера. вплоть до разработчика. Docker также реализует инкрементную загрузку и загрузку, аналогично «git pull», поэтому новые версии контейнера могут передаваться только путем отправки различий.
Компонент повторного использования. Любой контейнер можно использовать в качестве «базового изображения» для создания более специализированных компонентов. Это можно сделать вручную или как часть автоматизированной сборки. Например, вы можете подготовить идеальную среду Python и использовать ее в качестве основы для 10 различных приложений. Ваша идеальная настройка postgresql может быть повторно использована для всех ваших будущих проектов. И так далее.
Совместное использование. Docker имеет доступ к общедоступному реестру ( https://registry.hub.docker.com/ ), куда тысячи людей загрузили полезные контейнеры: от redis, couchdb, postgres до irc-bouncers, на серверы приложений rails, от hadoop для создания базовых образов для различные дистрибутивы. Реестр также включает официальную «стандартную библиотеку» полезных контейнеров, поддерживаемую командой докеров. Сам реестр имеет открытый исходный код, поэтому любой может развернуть свой собственный реестр для хранения и передачи частных контейнеров, например, для внутренних развертываний серверов.
Инструментальная экосистема. Docker определяет API для автоматизации и настройки создания и развертывания контейнеров. Существует огромное количество инструментов, интегрируемых с докером для расширения его возможностей. PaaS-подобное развертывание (Dokku, Deis, Flynn), многоузловая оркестровка (maestro, salt, mesos, openstack nova), панели управления (docker-ui, openstack horizon, верфь), управление конфигурациями (chef, puppet), непрерывная интеграция (Дженкинс, Страйдер, Трэвис) и т. д. Docker быстро утвердился в качестве стандарта для инструментов на основе контейнеров.
Надеюсь, это поможет!
Давайте посмотрим на список технических возможностей Docker и проверим, какие из них предоставляются LXC, а какие нет.
1) Изоляция файловой системы : каждый контейнер процессов работает в совершенно отдельной корневой файловой системе.
Предоставляется простой LXC.
2) Изоляция ресурсов : системные ресурсы, такие как процессор и память, могут быть распределены по-разному для каждого контейнера процесса, используя cgroups.
Предоставляется простой LXC.
3) Изоляция сети : каждый контейнер процессов работает в своем собственном пространстве имен сети, с виртуальным интерфейсом и собственным IP-адресом.
Предоставляется простой LXC.
4) Копирование при записи : корневые файловые системы создаются с использованием копирования при записи, что делает развертывание чрезвычайно быстрым, дешевым в памяти и дешевым диском.
Это обеспечивается AUFS, объединенной файловой системой, от которой зависит Docker. Вы можете вручную настроить AUFS с помощью LXC, но Docker использует его в качестве стандарта.
5) Ведение журнала : стандартные потоки (stdout / stderr / stdin) каждого контейнера процессов собираются и регистрируются для поиска в режиме реального времени или в пакетном режиме.
Докер обеспечивает это.
6) Управление изменениями: изменения в файловой системе контейнера могут быть зафиксированы в новом образе и использованы повторно для создания большего количества контейнеров. Нет шаблонов или ручная настройка не требуется.
«Шаблонная или ручная настройка» - это ссылка на LXC, где вам необходимо узнать обо всех этих вещах. Docker позволяет вам обращаться с контейнерами так, как вы привыкли обращаться с виртуальными машинами, не изучая конфигурацию LXC.
7) Интерактивная оболочка : docker может выделить псевдо-tty и прикрепить к стандартному вводу любого контейнера, например, для запуска одноразовой интерактивной оболочки.
LXC уже обеспечивает это.
Я только начал узнавать о LXC и Docker, так что я буду рад любым исправлениям или лучшим ответам.
unshare
инструмента (или непосредственно clone()
системного вызова). Аналогичным образом, Docker делает эти вещи более простыми в использовании (и предоставляет гораздо больше функций на столе, например, возможность выдвигать / извлекать изображения). Мой 2с.
update-index
и read-tree
без привычных инструментов , таких как add
, commit
и merge
. Docker предоставляет этот слой «фарфора» поверх «сантехники» LXC, что позволяет вам работать с концепциями более высокого уровня и меньше беспокоиться о деталях низкого уровня.
Приведенные выше посты и ответы быстро устаревают, поскольку развитие LXD продолжает улучшать LXC . Да, я знаю, что Докер тоже не стоял на месте.
LXD теперь реализует репозиторий для изображений контейнеров LXC, из которых пользователь может выдвигать / извлекать, чтобы внести свой вклад или использовать повторно.
REST api от LXD для LXC теперь позволяет как локально, так и удаленно создавать / развертывать / управлять контейнерами LXC, используя очень простой командный синтаксис.
Ключевые особенности LXD:
Существует NCLXD плагин теперь OpenStack позволяя OpenStack использовать LXD для развертывания / управления LXC контейнеров как виртуальные машины в OpenStack вместо использования KVM, VMware и т.д.
Тем не менее, NCLXD также позволяет использовать гибридное облако из комбинации традиционных виртуальных машин HW и виртуальных машин LXC.
Плагин OpenStack nclxd содержит список поддерживаемых функций:
stop/start/reboot/terminate container
Attach/detach network interface
Create container snapshot
Rescue/unrescue instance container
Pause/unpause/suspend/resume container
OVS/bridge networking
instance migration
firewall support
Ко времени выхода Ubuntu 16.04 в апреле 2016 года появятся дополнительные интересные функции, такие как поддержка блочных устройств, поддержка динамической миграции .
Докеры используют изображения, которые встроены в слои. Это добавляет много с точки зрения переносимости, обмена, управления версиями и других функций. Эти изображения очень легко переносить или передавать, и, поскольку они находятся в слоях, изменения в последующих версиях добавляются в виде слоев поверх предыдущих слоев. Таким образом, при переносе много раз вам не нужно переносить базовые слои. У докеров есть контейнеры, которые запускают эти образы со встроенной средой исполнения, они добавляют изменения в виде новых слоев, обеспечивая легкий контроль версий.
Кроме того, Docker Hub - это хороший реестр с тысячами общедоступных образов, где вы можете найти образы с установленной ОС и другим программным обеспечением. Таким образом, вы можете получить довольно хороший старт для вашего приложения.
Собираюсь держать эту кучку, об этом уже спрашивали и отвечали выше .
Я бы сделал шаг назад и ответил бы немного по-другому, механизм докера сам добавляет оркестровку в качестве одной из своих дополнительных функций, и это разрушительная часть. Как только вы запускаете приложение как комбинацию контейнеров, работающих «где-то» в нескольких движках контейнеров, это становится действительно захватывающим. Надежность, горизонтальное масштабирование, полная абстракция от базового оборудования, я мог бы продолжать и продолжать ...
Это дает не только Docker, на самом деле стандартом де-факто оркестровки контейнеров является Kubernetes, который представлен во множестве разновидностей Docker, но также OpenShift, SuSe, Azure, AWS ...
Тогда под K8S есть альтернативные контейнерные двигатели; наиболее интересными являются Docker и CRIO - недавно построенные, без демонов, предназначенные как контейнерный движок специально для Kubernetes, но незрелые. Это соревнование между ними, которое, я думаю, станет настоящим долгосрочным выбором для контейнерного двигателя.