LINUX.ORG.RU

Docker vs LXD(LXC)

 , , ,


3

5

Хочу сделать ремарку, что я вообще в этом не специалист и разбирался со всем на ощупь.

Так уж случилось что пришлось столкнуться с контейнерами. Решил освоить для отделения мух от котлет разделения девелоперской машины и рабочего сервера для локальных проектов. Хотел настроить git и LSP на сервере, и выбор пал на текущие решения контейнеризации.

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

Сейчас создал контейнер в LXD и мне это очень понравилось, всё стало буквально из коробки, для непривелигилированого контейнера просто добавил юзера в группу lxd.

Я понимаю что Docker более ориентирован на контейниризацию приложений, но всё же хотелось сравнить с контейниризацией ОС.

Поскольку Docker переехал на свои рельсы, я так понимаю, ради кроссплатформенности, то в чём плюсы и минусы Docker и LXD на данный момент. В интернете все нахваливают Docker, но я не пойму за что, ведь на мой дилетантский взгляд, LXD ничем не уступает.

UPD: Если туплю, то не сильно сердитесь. Пятница же!

★★★★

Последнее исправление: Artamudo (всего исправлений: 2)

Тёплое и мягкое.

Docker, Podman, Kubernetes — 1 контейнер = 1 stateless сервис. К тому же, из-за отсутствия состояния (в идеале), оно также воспроизводимо.

LXD — полная система и stateful.

commagray ★★★★★
()
Последнее исправление: commagray (всего исправлений: 2)

Выше всё правильно сказали, но дополню. Docker (и аналог Podman) — это технология для «контейнеризации» приложений, т. е. для того, чтобы приложения носили за собой свой рантайм. Можно считать, что один Docker-контейнер == один процесс (технически их может быть больше, но обращаться с ними нужно именно так). Docker-контейнеры не являются долгоживущими и в норме вообще не хранят никакое состояние, т. е. их rootfs умирает вместе с контейнером. Предполагается, что все ценные/долгоживующие данные нужно монтировать внутрь контейнера bind’ами.

А LXD — это контейнеры-виртуалки (играют ту же роль, что виртуалки). Они по умолчанию долгоживущие, внутри них запускается свой init и т. п. Аналогом этой технологии является systemd-nspawn.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от commagray

Тёплое и мягкое.

Теперь понял.

Но всё же если не говорить про образ убунты в Docker и образ убунты в LXD, не для воспроизводимости, в чём отличия?

UPD: а, всё. Выше ответили.

Artamudo ★★★★
() автор топика
Ответ на: комментарий от intelfx

Хорошо. Наверное действительно тёплое с мягким равняю, но всё равно почему-то уникумы умудряются их сравнивать и ставить LXC не в лучшем положении, и ещё использовать Docker буквально для всего.

Artamudo ★★★★
() автор топика
Ответ на: комментарий от Artamudo

но всё равно почему-то уникумы умудряются их сравнивать и ставить LXC не в лучшем положении, и ещё использовать Docker буквально для всего

лавров.жпг

intelfx ★★★★★
()
Ответ на: комментарий от Artamudo

Даже крупные, казалось бы, компании с популярными проектами совершают совершенно невыносимые глупости. Слёту взять контейнер от GitLab Omnibus — эталон того, как делать не надо. Жирнющий монолит на пару гигабайт, внутри которого запускается и GitLab, и база данных, даже небо, даже Аллах.

Так можно сделать в LXD, но подход OCI-контейнеров подразумевает, что база данных либо будет отдельным сервисом, а не внутри сервиса GitLab, либо её в контексте контейнеров вообще не будет (хорошая практика держать базу отдельно от сервисов где-то удалённо), а сам GitLab разделён по маленьким частям, с отдельным контейнером для каждой вещи, типа nginx, Sidekiq, Registry, Runner, etc. Винтики, которые можно крутить по отдельности.

commagray ★★★★★
()

Docker vs LXD(LXC)

Если юзкейс позволяет НЕ использовать docker, то не следует использовать docker.

King_Carlo ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Иди лечись, друг мой. Всего хорошего, до свидания.

King_Carlo ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Докер раздувает системные требования (к оперативной памяти и кэшам, за счёт дублирования библиотек) и сильно усложняет flow обновления.

  • Оригинальный подход Unix/Linux с динамической компоновкой: обновить дистрибутив штатным пакетным менеджером, иногда пересобрать прикладной софт.
  • Подход со статической компоновкой, языкоспецифичными библиотеками и прочим новомодным пиннингом: обновить дистрибутив штатным пакетным менеджером, бампнуть зависимости прикладного софта, пересобрать прикладной софт.
  • Подход с Docker: обновить базовый образ, инвалидировать кэш сборщика, обновить дистрибутив штатным пакетным менеджером, бампнуть зависимости прикладного софта, пересобрать прикладной софт.

Но более важная проблема в том, что никто из докеролюбов не заморачивается даже тем, что я написал. Берётся первый попавшийся базовый образ, на коленке методом «херак-херак» пишется докерфайл, после чего про базовую систему в принципе забывается, и когда следующий раз она получит обновления — большой вопрос.

Тот же вопрос возникает, когда софт уже написан и новые ревизии софта выкатываются в общем-то весьма редко. Вот ты отдаёшь себе отчёт в том, что даже если твой софт не обновляется, докер-образ всё равно нужно регулярно пересобирать, чтобы подтянулись обновления базовой системы? Уверен, что нет. Да и процессы CI/CD в 95% случаев построены так, что это сделать затруднительно, т. к. образы кэшируются на всех уровнях по ID коммита.

С другой стороны, в принципе, если квалификация команды такова, что процессы построены на от5.1сь, то нет никакой разницы, построены они на докере или на чём-то другом. Просто подход докера очень сильно упрощает, облегчает и порой даже рекомендует делать неправильно.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от intelfx

Допустим, у тебя десять команд, два десятка проектов с кучкой сервисов в каждом и никаких проблем с бюджетом на железо. Каким нужно быть идиотом, чтобы не использовать универсальный способ деплоя для всего этого?

никто из докеролюбов не заморачивается даже тем, что я написал

Этим занимается служба эксплуатации (исключая прибитые зависимости, конечно). Далее всё в молоко.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 2)
Ответ на: комментарий от WitcherGeralt

Этим занимается служба эксплуатации (исключая прибитые зависимости, конечно).

«Для этого есть отряд специально обученных людей.» ©

Artamudo ★★★★
() автор топика
Ответ на: комментарий от intelfx

Посмотрел одним глазком на Kubernetes, Ansible etc.

Я так понимаю что в современном IT искоренилось понятие программы как скомпилированого кода, а стало как набор декларативно развёрнутых контейнеров, которые «вещь в себе». При всём этом легче оперативы докупить чем ликвидировать весь этот зоопарк.

Artamudo ★★★★
() автор топика

Сейчас создал контейнер в LXD и мне это очень понравилось, всё стало буквально из коробки, для непривелигилированого контейнера просто добавил юзера в группу lxd.

Ну да, для Докера группа ldx не играет роли. Там группа docker. Может дело в этом? Хи-хи.

kostyarin_ ★★
()
Ответ на: комментарий от Artamudo

Стероидный Flatpak который носит ВСЁ с собой.

Да, никто не запрещает запускать несколько копий докеризованного приложения. В докере необходимо держать все данные вне контейнера.

einhander ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Допустим, у тебя десять команд, два десятка проектов с кучкой сервисов в каждом и никаких проблем с бюджетом на железо. Каким нужно быть идиотом, чтобы не использовать универсальный способ деплоя для всего этого?

Докер — это не способ деплоя. Это способ поставки.

Этим занимается служба эксплуатации

«После нас — хоть потоп»

Далее всё в молоко.

Потому что ты скозал?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Докер — это не способ деплоя. Это способ поставки

Спасибо, Капитан Выпендрёж.

Потому что ты скозал?

Наоборот, потому, что ты лепишь херню.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Спасибо, Капитан Выпендрёж.

Ну если ты неспособен без внешней помощи связать три факта в логическую цепочку, то я не виноват. Можешь считать, что «выпендрёж».

Наоборот, потому, что ты лепишь херню.

Аргументация уровня «бог».

intelfx ★★★★★
()
Ответ на: комментарий от King_Carlo

Ты по делу так ничего и не сказал, лишь «кококо». Не можешь свои арменты привести против, так попробуй хотя бы мои опровергнуть.

Докер — суперудобная штука. Легко тетсировать, легко деплоить, легко конфигурировать, легко масштабировать. А локально чот запустить и подебажить — вообще красота. На этом фоне, вышеназванные недостатки — просто мнимая херня на постном масле.

Сдаётся сне, ты просто поехавший ретроград, который докер даже и не пробовал.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

На самом деле люди ответили на ваши вопросы.

С другой стороны, в принципе, если квалификация команды такова, что процессы построены на от5.1сь, то нет никакой разницы, построены они на докере или на чём-то другом. Просто подход докера очень сильно упрощает, облегчает и порой даже рекомендует делать неправильно.

Вот это как раз ваш случай. О чем вы и радостно сообщаете:

Докер — суперудобная штука. Легко тетсировать, легко деплоить, легко конфигурировать, легко масштабировать. А локально чот запустить и подебажить — вообще красота. На этом фоне, вышеназванные недостатки — просто мнимая херня на постном масле.

«Мнимая херня на постном масле» это грамотно выстроенный процесс эксплуатации, в котором учтены многие важные детали.

anonymous
()
Ответ на: комментарий от anonymous

Выводы из воздуха, типичная лоровская аналитика.

Но, ок, допустим, у меня команда — эталонная толпа наиконченейших раздолбаев, каким образом это камень в огороде докера? Демагогия донного уровня.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Демагог это вы. Вам же сказали, что использование докера имеет смысл в определенных условиях. Когда условия более строгие докер уже не подходит. Это просто инструмент со своими достоинствами и недостатками.

anonymous
()
Ответ на: комментарий от anonymous

Нет. Тред начался с клоунского высера:

Если юзкейс позволяет НЕ использовать docker, то не следует использовать docker

Я призвал автора к ответу, он ответить оказался не способен.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Я призвал автора к ответу, он ответить оказался не способен.

Я попытаюсь. У автора есть какая-то боль, в которой кто-то обязательно должен быть виноват. Почему бы и не докер, на самом-то деле.

Nervous ★★★★★
()
Ответ на: комментарий от Artamudo

Стероидный Flatpak который носит ВСЁ с собой.

А еще работает под рутом, ковыряется в iptables, и делает прочие непотребства

annulen ★★★★★
()
Ответ на: комментарий от intelfx

Надо бы этот пост сохранить и показывать заказчику, который вдруг начинает топить за докер.

Кроме шуток, ты хорошо все описал.

Кстати, ты уже не в КрасноШляпе?

Twissel ★★★★★
()
15 октября 2020 г.

Мнение новичка:

Для новенького DOCKER показался сильно замудрен в реализации. Гораздо проще было быстро все поставить в контейнере при помощи LXC.

Понимаю, что, возможно, я заблуждаюсь, и для проектной команды лучше докер. Но для меня ближе LXC - это же А-ля CHROOT. Запустил то что тебе нужно в изолированной среде, и все на месте, хотя бы взять тот же SYSTEMCTL.

А в реализации идей бизнеса отталкиваюсь от того, что главное чтоб было удобно самому администратору, быстро и без потери качества все реализовывать :-)

olex1984
()
Ответ на: Мнение новичка: от olex1984

Опять же зависит от задач. У меня ныне в докере питоньи комбайны, которые тянут за собой кучу зависимостей, в который гарантировано что-то не заработает при установке на хост. LXC для Ubuntu Server, чтобы не тянуть софт и конфиги сервера на хост. Так что прекрасно распределено для своих функций.

Artamudo ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.