Хотелось бы узнать в чем различие между 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 и там продолжить разработку?
Думаю да,
но это
не то, для чего создавался Докер.
А написание кода внутри виртуальной машины - возможно. Я сам так делаю.