Что добавляет Docker в lxc-tools (инструменты LXC для пользовательского пространства)?

Если вы посмотрите на функции Docker, большинство из них уже предоставлено LXC.

Итак, что добавляет Докер? Почему я должен использовать Docker над обычным LXC?

Ответ 1

Из FAQ Docker:

Докер не является заменой для lxc. "lxc" относится к возможностям ядра linux (в частности, пространств имен и групп управления), которые позволяют изолировать изолированные процессы и контролировать распределение ресурсов.

В дополнение к этой низкоуровневой базе функций ядра Docker предлагает инструмент высокого уровня с несколькими мощными функциями:

  • Портативное развертывание на разных машинах. Docker определяет формат для объединения приложения и всех его зависимостей в один объект, который может быть передан на любую машину с поддержкой докеров и выполнен там с гарантией того, что среда выполнения, подверженная действию приложения, будет одинаковой. Lxc реализует технологию обработки песочницы, которая является важным предварительным условием для переносного развертывания, но этого недостаточно для переносного развертывания. Если вы отправили мне копию вашего приложения, установленного в пользовательской конфигурации lxc, она почти наверняка не будет работать на моей машине так, как она есть на вашем, потому что она привязана к вашей конкретной конфигурации вашего компьютера: сети, хранилища, регистрации, дистрибутива, и т.д. Docker определяет абстракцию для этих параметров для конкретного компьютера, так что один и тот же контейнер докеров может работать без изменений - на многих разных машинах со множеством различных конфигураций.

  • Применение ориентированных. Docker оптимизирован для развертывания приложений, в отличие от машин. Это отражено в его API, пользовательском интерфейсе, философии дизайна и документации. Напротив, вспомогательные скрипты lxc сосредотачиваются на контейнерах как на легких машинах - в основном на серверах, которые быстрее загружаются и нуждаются в меньшем объеме работы. Мы считаем, что больше контейнеров, чем просто.

  • Автоматическая сборка. Docker включает в себя инструмент для разработчиков для автоматической сборки контейнера из исходного кода с полным контролем над зависимостями приложений, инструментами сборки, упаковкой и т.д. Они могут свободно использовать make, maven, chef, puppet, salt, debian packages, rpms, source tarballs или любую комбинацию из вышеперечисленного, независимо от конфигурации машин.

  • Versioning. Docker включает в себя git -подобные возможности для отслеживания последовательных версий контейнера, проверки различий между версиями, совершения новых версий, откат и т.д. История также включает в себя, как был собран контейнер и кем, поэтому вы получаете полную прослеживаемость от производственного сервера, вплоть до разработчика. Docker также реализует инкрементные загрузки и загрузки, похожие на "git pull", поэтому новые версии контейнера могут быть переданы путем отправки diff.

  • Повторное использование компонентов. Любой контейнер может использоваться как "базовое изображение" для создания более специализированных компонентов. Это можно сделать вручную или как часть автоматической сборки. Например, вы можете подготовить идеальную среду python и использовать ее в качестве базы для 10 различных приложений. Ваша идеальная настройка postgresql может быть повторно использована для всех ваших будущих проектов. И так далее.

  • Sharing

    . Docker имеет доступ к публичному реестру (https://registry.hub.docker.com/), где тысячи людей загрузили полезные контейнеры: все, что угодно, от redis, couchdb, postgres до irc bouncers до серверов приложений rails hasoop для создания изображений для различных дистрибутивов. Реестр также включает официальную "стандартную библиотеку" полезных контейнеров, поддерживаемых командой докеров. Сам реестр является открытым исходным кодом, поэтому каждый может развернуть свой собственный реестр для хранения и передачи личных контейнеров, например, для внутренних развертываний серверов.

  • Инструментальная экосистема. Docker определяет API для автоматизации и настройки создания и развертывания контейнеров. Существует огромное количество инструментов, интегрирующих с докером, чтобы расширить свои возможности. PaaS-подобное развертывание (Dokku, Deis, Flynn), мульти- node оркестровка (маэстро, соль, мезос, openstack nova), панели управления (докер-ui, горизонт открытой стопы, верфь), управление конфигурацией (шеф-повар, марионетка) непрерывная интеграция (jenkins, strider, travis) и т.д. Docker быстро зарекомендовал себя как стандарт для инструментов на контейнерах.

Надеюсь, это поможет!

Ответ 2

Посмотрите на список технических характеристик Docker и проверьте, какие из них предоставляются LXC, а какие нет.

Особенности:

1) Изоляция файловой системы: каждый контейнер процесса работает в полностью отдельной корневой файловой системе.

Предоставляется простой LXC.

2) Изоляция ресурсов: системные ресурсы, такие как процессор и память, могут быть распределены по-разному для каждого контейнера процесса, используя группы.

Предоставляется простой LXC.

3) Сетевая изоляция: каждый контейнер процесса работает в своем собственном пространстве имен в сети, с виртуальным интерфейсом и собственным IP-адресом.

Предоставляется простой LXC.

4) Copy-on-write: корневые файловые системы создаются с использованием copy-on-write, что делает развертывание чрезвычайно быстрым, дешевым и дешевым.

Это обеспечивается AUFS, файловой системой union, от которой зависит Docker. Вы можете самостоятельно настроить AUFS вручную с помощью LXC, но Docker использует его как стандарт.

5) Ведение журнала: стандартные потоки (stdout/stderr/stdin) каждого контейнера процесса собираются и регистрируются для поиска в режиме реального времени или партии.

Docker предоставляет это.

6) Управление изменениями: изменения в файловой системе контейнера можно перенести в новое изображение и повторно использовать для создания большего количества контейнеров. Не требуется шаблонирование или ручная настройка.

"Шаблоны или ручная настройка" - это ссылка на LXC, где вам нужно будет узнать обо всех этих вещах. Docker позволяет обрабатывать контейнеры таким образом, чтобы вы использовали для обработки виртуальных машин, не узнавая о конфигурации LXC.

7) Интерактивная оболочка: docker может выделять псевдо-tty и присоединяться к стандартным вводам любого контейнера, например, для запуска интерактивной оболочки.

LXC уже предоставляет это.


Я только начал изучать LXC и Docker, поэтому буду приветствовать любые исправления или лучшие ответы.

Ответ 3

Вышеупомянутые сообщения и ответы быстро становятся датированными как развитие LXD продолжает улучшать LXC. Да, я знаю, что Докер тоже не остановился.

LXD теперь реализует репозиторий для изображений контейнеров LXC, которые пользователь может нажимать/извлекать, чтобы способствовать или повторно использовать.

LXD REST api to LXC теперь включает локальное и удаленное создание/развертывание/управление контейнерами LXC с использованием очень простого командного синтаксиса.

Ключевые особенности LXD:

  • Безопасность по дизайну (непривилегированные контейнеры, ограничения ресурсов и гораздо больше)
  • Масштабируемость (от контейнеров на вашем ноутбуке до тысяч вычислительных узлы)
  • Интуитивно понятный (простой, понятный интерфейс API и четкая командная строка)
  • На основе изображения (нет шаблонов распространения, только хорошие, надежные изображения) Живая миграция

Существует плагин 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 года, будут добавлены дополнительные интересные функции, такие как поддержка блочных устройств, поддержка живой миграции.

Ответ 4

Докеры используют изображения, которые строятся в слоях. Это значительно расширяет возможности переносимости, совместного использования, управления версиями и других функций. Эти изображения очень легко переносить или переносить, и поскольку они находятся в слоях, изменения в последующих версиях добавляются в виде слоев поверх предыдущих слоев. Таким образом, при портировании много раз вам не нужно связывать базовые слои. Докеры имеют контейнеры, которые запускают эти изображения с включенной средой исполнения, они добавляют изменения в качестве новых слоев, обеспечивающих легкий контроль версий.

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