О Docker или отличие от виртуальной машины и немного о Vagrant...?

Хотелось бы узнать в чем различие между Virtualbox(VMware) и Docker?
Если я правильно понимаю, я могу и там и там поднять любую ОС, к примеру ту же Ubuntu и LAMP.
Только разница в том что к Docker я буду иметь доступ сразу же из bash, а к VB через её окно или ssh, плюс если я выйду то в виртуалке все сохранится, а в Docker без коммита все умрет? Или есть другие важные отличия...?

Пишут что Docker активно применяется при программировании и переносе workstations. Тоесть имеется ввиду, я могу работать с кодом прямо в docker image, после коммитить, пушить, а затем все это запускать на сервере без установки зависимостей?
Vagrant, насколько я понимаю активно применяется при создании images и конфигурировании их же?

И последнее, могу ли я:
Запустить image в Linux, сделать правки в коде (кстати как это сделать, к примеру в том же *storm, Sublime. ... ) и закоммитить.
После войти в Windows, запустить image и там продолжить разработку?


Всем спасибо за ответы.
  • Вопрос задан
  • 20432 просмотра
Решения вопроса 1
sim3x
@sim3x
Docker ~ lxc ~ cgroups = система ограничения ресурсов для групп процесов в линуксе = запускать можно только "линукс программи"
Virtualbox(VMware) = системи виртуализации = запускается полноценная ОС

и там и там поднять любую ОС
нет

разница в том что к Docker я буду иметь доступ сразу же из bash, а к VB через её окно или ssh, плюс если я выйду то в виртуалке все сохранится, а в Docker без коммита все умрет?
в общем случае - да

Или есть другие важные отличия...?
есть. Описани више

Тоесть имеется ввиду, я могу работать с кодом прямо в docker image, после коммитить, пушить, а затем все это запускать на сервере без установки зависимостей?
да

Vagrant, насколько я понимаю активно применяется при создании images и конфигурировании их же?
вагрант -- оболочка над virtualbox или docker и создан для удобства разработчика. На стороне сервера, в общем случае не применяется

После войти в Windows, запустить image и там продолжить разработку?
если речь про докер -- нет. На винде тебе прийдется поднять виртуалку с линуксом и внутри нее работать с докер контейнером. Если речь про virtualbox, то скорее да чем нет. В худшем случае, нужно будет сделать експорт-импорт виртуалки в virtualbox

upd
А как дела обстаят с "прожорливостью", к примеру image c LAMP против нативной установки?
потери есть, но они не могут сравниться с плюшками

И можно ли поднять 2 images с LAMP, кофнликт неминуем?
можно, но не на 80 порту, а на других, и перед ними поставить роутер-прокси в виде еще одного бокса с nginx на борту
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@bamaz
Хотелось бы узнать в чем различие между Virtualbox(VMware) и Docker?


Docker - строгая изоляция ресурсов внутри операционной системы Linux.
Не более того. То есть бинарный файл запускается в той же ОС, но не имеет доступа за пределы выделенной ему клетки. Программа (одна-единственная вообще говоря в Докер предполагается программа) может иметь свои-собственные зависимости, более того, допускается использование совсем другой версии Linux внутри Докер-контейнера.

Но это не виртуализация. Точнее можно назвать это изоляцией от окружения (настроек) операционной системы. Смысл Докера именно в этом - чтобы можно было запусить программу почти где угодно, не настраивая ее под другую ОС (не устанавливая библиотек, не прописывая путей, портов, не создавая настроечных файлов по возможности и пр.).

Это делается на уровне API ОС, следовательно, довольно не накладно по производительности. Правда, при неграмотном использовании (когда в качестве предков в образе используются разные образы) накладно по расходу дискового пространства.

В частности Docker умеет запускать только Linux из под Linux, причем не какие угодно версии годятся, в контейнере Докера может быть только специально подготовленная (облегченная). В других OC - Windows, MacOSX - Докер реализован как полноценная виртуальная машина с Линуксом, следовательно, жрет ресурсов много.

VirtualBox - это настоящая виртуальная машина, то есть внутри может быть действительно совершенно другая ОС. Не только Linux. Полная изоляция вплоть до эмуляции аппаратных портов-ввода вывода. Изоляция более строгая. Но требует намного больше ресурсов.

Запуск виртуальной машины сопряжен со значительными затратами времени. Лучшие виртуальные машины откусывают не менее 15% производительности....

Запуск программы в Docker - сопоставим с запуском обычного бинарного файла внутри обычного операционного окружения (если уж быть точным - то чуть больше, но незначительно).

При грамотном использовании вы можете запускать на обычном домашнем компьютере хоть сотни Докер-контейнеров.

А вот запустить на том же железе хотя бы несколько полноценных виртуальных машин вряд ли получится.

Если я правильно понимаю, я могу и там и там поднять любую ОС, к примеру ту же Ubuntu и LAMP.


Внутри Докера - далеко не любую. Выбор ограничен считаным числом специально подготовленных дистрибутивов Линукса.

Внутри Virtual Box - действительно любую.

Только разница в том что к Docker я буду иметь доступ сразу же из bash, а к VB через её окно или ssh,


То, что вы хотите и через Virtual Box легко реализуется с помощью инструмента Vagrant. Будет иллюзия, что вы в Докере работаете.


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


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

Пишут что Docker активно применяется при программировании и переносе workstations. Тоесть имеется ввиду, я могу работать с кодом прямо в docker image, после коммитить, пушить, а затем все это запускать на сервере без установки зависимостей?


Нет.
Концепция повторяемости такова.
Вы программируете и дизайнере и верстаете как обычно.
Результат своей работы вы помещаете в контейнер - отлаживаете в контейнере.
На сервере используется тот же контейнер.
Это гарантирует какую-то повторяемость условий при которых велась отладка и при которых будет работать все в продакшне.

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

Vagrant, насколько я понимаю активно применяется при создании images и конфигурировании их же?


При разработке - да.
Так как ты можешь работать в несовместимой с docker средой (например, в Windows) и отладка возможна только через виртуальную машину.

В продакшене - нет. Так как слишком большие накладные расходы на виртуальную машину.

И последнее, могу ли я:
Запустить image в Linux, сделать правки в коде (кстати как это сделать, к примеру в том же *storm, Sublime. ... ) и закоммитить.
После войти в Windows, запустить image и там продолжить разработку?


Думаю да,
но это не то, для чего создавался Докер.

А написание кода внутри виртуальной машины - возможно. Я сам так делаю.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы