© 2021 WebHive

Docker, Vagrant - что это такое и с чем его едят

В последнее время очень много шума вокруг виртуализации. Использованием виртуальны машин для разработки никого не удивишь — наличие изолированных сред позволяет существенно облегчить жизнь разработчику. Ну и как следствие появились соедства для автоматизации создания и управления виртуальными машинами. Давайте разберёмся в этом зоопарке технологий.

Лично я уже использовал для этих целей как VmWare так и VirtualBox. В последнее время перешёл на VirtualBox ввиду его бесплатности. Виртуальные машины использую для особо хитрых проектов с нестандартным или устаревшим набором софта, чтобы не засорять систему всяким вручную собранным мусором.

И в общем-то могу сказать, что да — это чертовски удобно. Если возникают какие-то задачи по проекту, не надо заботиться о том, что какая-то библиотечка в системе обновилась и проект уже не запускается. В виртуальной машине уже установлены нужные версии и ини никуда не денутся.

Но есть и некоторые минусы — хранить на каждый проект по образу довольно накладно, даже с учётом того, что дисковое пространство стоит недорого. В случае если давно не занимался каким-то проектом и допустим переместил его в другое место приходится заново настраивать папки права и т. п.

Так же есть определённые неудобства при создании нового образа. Тут либо ставить систему заново, либо клонировать существующий образ и настраивать дополнительно.

В общем я собственно веду к тому, что все это было бы неплохо автоматизировать. К нашему счастью такие средства есть.

Vagrant

Пожалуй наиболее известным проектом для управления изолированными средами для запуска приложений является Vagrant. Суть его в том, что на основе некоторого заранее подготовленного сценария можно легко собрать виртуальную машину и подключить к ней проект. При этом в принципе даже необязательно хранить образ, он при необходимости собирается заново.

В качестве систем виртуализации поддерживаются:

Готовые для загрузки образы можно посмотреть тут — [https://vagrantcloud.com/discover/featured]

Конфигурация задаётся в файле Vagrantfile. В нём указывает базовый образ для загрузки, набор скриптов которые нужно выполнить после установки (установка дополнительного софта и т. п.), настройки сети. Собственно этого достаточно, чтобы собрать собственный клон системы для разработки с минимум усилий.

Docker

Сравнительно молодой продукт, обеспечивает примерно такие-же возможности как Vagrant, но реализовано это несколько иным путем. Вместо полной виртуализации как в Vagrant используется паравиртуализация, т. е. изолированная среда создаётся на том же хосте и не производится виртуализация оборудования.

Так же как и Vagrant который по сути является лишь удобной прослойкой использующей возможности сторонних систем виртуализации, docker основан на LXC — системе виртуализации представленной в linux.

Соответственно нет накладных расходов на запуск отдельной версии операционной системы и инициализацию оборудования — всё выполняется на том-же ядре что на котором работает хост система. Виртуализируется дисковое пространство, процессы, сеть.

Например если ваша операционная система Ubuntu вы можете создать docker контейнер для запуска CentOS, в котором будет отдельный образ файловой системы, на котором будут развёрнуты файлы CentOS. При запуске контейнера нет нужды запускать и инициализировать систему — используется ваше уже загруженное и работающее ядро. Соответственно запускаются в виртуализированном контейнере только то что, вы укажете явно — например БД или memcache или приложение Rails.

Отсюда проистекают неоспоримое достоинства docker — он реально быстр и работает с минимальным оверхедом. Запуск приложения внутри контейнера происходит практически так же быстро как и запуск обычного приложения в хост системе.

Это же является источником и основного недостатка — поддерживается запуск только linux контейнеров. В приципе можно запустить сам docker и под Windows в виртуальной машине, но опять в виртуальной машине должен быть запущен linux.

Конфигурация задаётся в файле Dockerfile. Как и в случае с Vagrant файл содержит базовый образ для загрузки, набор скриптов которые нужно выполнить после установки, настройки сети и запускаемый файл.

Готовые образа для docker можно найти тут .

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

Для закрепления изменений их нужно создавать образ работающей системы. Для этого есть специальная команда docker push. При этом создаётся новый образ (snapshoot).

В общем docker это отдельная большая тема.

Вывод

Итого для себя я сделал следующие выводы — если вы работает на linux или ваши продакшен сервера работат под linux — однозначно docker.

Едиснтвенный вариант когда Vagrant будет единственно возможным решением это неообходимость запуска операционных систем отличных от linux. Однако на сегодня такие варианты на мой взгляд достаточно редки — веб сервер на windows выглядит откровенным извращением, остаются варианты с BSD системами, но это скорее тоже экзотика.

Комментарии