Vagrant vs Docker: что подходит именно вам? (Может быть оба)
Опубликовано: 2023-01-26Команды DevOps находятся под растущим давлением, чтобы быстро предоставлять клиентам больше функциональных возможностей. Поставщики облачных услуг предлагают решение с помощью масштабируемых платформ с отличной интеграцией CLI и API. К сожалению, интерфейсы, предоставляемые облачными провайдерами, могут быть несовместимы. Но некоторые облачные инструменты помогают командам DevOps создавать индивидуальные решения для любого поставщика облачных услуг.
Двумя такими инструментами являются Vagrant и Docker. Понимание того, что они делают и как они работают вместе, является ключом к получению максимальной отдачи от вашей облачной среды.
Vagrant — это инструмент для создания сред виртуальных машин (ВМ) и управления ими в рамках единого рабочего процесса. Независимо от того, создаете ли вы локальные виртуальные машины для работы с гипервизорами или просто облачные виртуальные машины, Vagrant предоставляет согласованный формат конфигурации, единый интерфейс командной строки и общие средства подготовки для установки программного обеспечения и изменения конфигураций.
Docker позволяет упаковывать программное обеспечение и поддерживающую конфигурацию в образы, которые последовательно запускаются на нескольких платформах. Docker позволяет командам DevOps быть уверенными в том, что программное обеспечение будет работать на локальной рабочей станции почти так же, как на управляемой облачной платформе.
Хотя Vagrant и Docker разделяют цель создания воспроизводимых сред, они делают это разными, но взаимодополняющими способами. В этой статье рассказывается, как Vagrant и Docker достигают своих целей.
Что такое докер?
Docker — это открытая платформа для разработки, доставки и запуска приложений. Это позволяет командам DevOps упаковывать специальное программное обеспечение, вспомогательные приложения и библиотеки, а также инструкции по настройке, работе в сети, монтированию файлов, проверкам работоспособности и запуску сценариев в автономный артефакт, называемый образом.
Затем изображения выполняются в облегченной изолированной среде, называемой контейнером. В отличие от виртуальных машин, которые обычно резервируют фиксированный объем памяти и строго ограничивают использование ЦП, контейнеры гораздо более гибкие и потребляют только то количество памяти и ЦП, которое им необходимо.
Это позволяет эффективно работать параллельно многим контейнерам, снижая затраты и увеличивая масштаб. Однако контейнеры не считаются такими же безопасными, как виртуальные машины, а это означает, что контейнеры не являются идеальным решением для запуска ненадежного кода.
Зачем использовать Docker (по сравнению с Vagrant)?
Команды DevOps обычно используют Docker для доставки и запуска веб-приложений, в том числе облачных приложений, которые либо интегрируются с очередями сообщений, либо размещаются на платформах «функция как услуга» (FaaS), реагирующих на облачные триггеры и события.
Такие платформы, как Kubernetes, основаны на Docker, что позволяет масштабировать контейнеры. Кроме того, каждый поставщик облачных услуг поддерживает возможность запуска контейнеров Docker на своей платформе как услуга (PaaS). Сейчас редко можно найти PaaS, который не поддерживает Docker.
Docker также может распространять и выполнять инструменты на основе интерфейса командной строки, причем все популярные облачные инструменты предлагают образы Docker со встроенным интерфейсом командной строки.
Каковы преимущества Докера?
Docker решает распространенную проблему, с которой сталкиваются традиционные процессы развертывания программного обеспечения, когда пользовательские приложения могут показывать разные результаты при запуске на локальной рабочей станции разработчика и в производственной среде. Эти различия часто возникают из-за того, что разработчики используют разные версии языков программирования, имеют разные конфигурации для поддержки таких приложений, как веб-серверы, или используют совершенно другие операционные системы, отличные от производственной среды. Эти различия приводят к тому, что проблемы поддержки передаются между командами с комментариями типа «Это работает на моей машине».
Поскольку образы Docker включают в себя код для пользовательских приложений, всех вспомогательных приложений и библиотек, образы выполняются в контейнерах, которые обеспечивают более согласованные результаты независимо от того, где они выполняются.
Образы Docker легко распространять с помощью реестров, таких как Docker Hub, что позволяет командам DevOps быстро обмениваться образами между собой и развертывать образы с помощью различных хостинговых платформ. Например, вы найдете Docker за пакетом разработки DevKinsta WordPress от Kinsta.
Там, где требуются более сложные стеки приложений, например развертывание базы данных вместе с серверным приложением или набор связанных микросервисов, Docker Compose предоставляет возможность создавать и связывать несколько контейнеров Docker с помощью одной команды. Все контейнеры, связанные с ними параметры и сетевые конфигурации определяются в одном файле YAML. Затем Docker Compose считывает этот файл для создания нескольких контейнеров и управления ими как единым целым.
Docker также пользуется почти универсальной поддержкой основных облачных провайдеров, а это означает, что команды DevOps избалованы выбором при выполнении своих образов Docker в облаке.
Что такое бродяга?
На протяжении десятилетий виртуальные машины зарекомендовали себя как надежное и безопасное решение для разделения и предоставления вычислительных ресурсов. Виртуальные машины остаются наиболее популярными услугами, предоставляемыми облачными провайдерами, и многие коммерческие решения и решения с открытым исходным кодом для команд стремятся запускать виртуальные машины локально.
Однако это разнообразие создает проблемы для команд DevOps. Каждое решение предоставляет свой интерфейс командной строки и API для создания виртуальных машин и управления ими, что затрудняет обеспечение согласованности между локальными средами разработки и облачными платформами.
Vagrant предлагает решение, абстрагируя базовые различия между платформами виртуальных машин, позволяя командам DevOps предоставлять новые виртуальные машины с помощью единого интерфейса командной строки и согласованного синтаксиса конфигурации. Команды, использующие Vagrant, могут создавать согласованные виртуальные машины независимо от того, будут ли они работать локально или в облачной среде, и могут легко переключаться между средами. Vagrant имеет множество различных применений, в том числе в качестве замены MAMP (macOS, Apache, MySQL/MariaDB и PHP, Perl или Python).
Зачем использовать Vagrant (по сравнению с Docker)?
Можно загрузить виртуальную машину и вручную настроить операционную систему, вручную установив программное обеспечение и отредактировав файлы конфигурации. Это не идеально, так как процесс не повторяется, а это означает, что виртуальные машины необходимо воссоздавать вручную для разных операционных систем и поставщиков. Это также делает практически невозможным понимание того, как была настроена виртуальная машина позднее.
Лучше всего автоматизировать процесс, необходимый для настройки виртуальной машины. Vagrant предоставляет единый инструмент для автоматизации процесса построения ВМ для многих провайдеров. Vagrant также предоставляет большой выбор высококачественных виртуальных машин в Vagrant Cloud, которые команды DevOps могут использовать для создания собственных виртуальных машин.
Каковы преимущества Vagrant?
Команды DevOps, использующие Vagrant, имеют единый инструмент для обучения независимо от того, создают ли они виртуальные машины для локальных платформ, облачных платформ или и тех, и других. Вы можете легко настроить файлы конфигурации Vagrant и повторно запустить или просмотреть их позже, чтобы понять, как была построена виртуальная машина.
Vagrant также позволяет командам DevOps мигрировать в облако или между поставщиками без изменения процесса, который они используют для создания виртуальных машин.
Виртуальные машины, созданные Vagrant, обеспечивают высокий уровень изоляции, часто используя специализированную поддержку виртуализации, встроенную в современные процессоры. Это делает виртуальные машины и инструменты для их создания, такие как Vagrant, лучшим выбором там, где безопасность и изоляция имеют высокий приоритет.
Многие дистрибутивы Linux, такие как Ubuntu и Fedora, также предоставляют официальные блоки Vagrant, на которых могут работать команды DevOps. Это сокращает время, необходимое для создания пользовательских виртуальных машин.
Vagrant против Docker: более пристальный взгляд
И Vagrant, и Docker повышают эффективность команд DevOps за счет автоматизации создания, распространения и запуска программных приложений.
Docker достигает этой цели с помощью пользовательского формата упаковки в виде образов и облегченной среды выполнения с помощью контейнеров. Контейнеры одинаково работают на разных платформах, что дает командам DevOps больше уверенности в том, что их программное обеспечение работает должным образом. Docker хорошо поддерживается облачными платформами PaaS и FaaS, что позволяет командам DevOps выбирать лучшую платформу для своих нужд.
Многие контейнеры могут сосуществовать на одном хосте, в первую очередь — но не полностью — изолированно друг от друга при совместном использовании одного и того же пула ресурсов. Это позволяет контейнерам эффективно масштабироваться.
Vagrant достигает этой цели, предоставляя согласованный метод создания виртуальных машин с существующими поставщиками. Это идеальный выбор для команд, которые уже вложили средства в виртуальные машины, полагаясь на их высокий уровень изоляции, безопасности, контроля и настройки.
Docker также обеспечивает лучшее решение для запуска надежного кода при минимальных вычислительных затратах. Контейнеры разумно изолированы друг от друга, но несут очень небольшие накладные расходы. Это означает, что многие контейнеры могут работать одновременно в общей ОС. Виртуальные машины представляют собой лучшее решение, когда командам требуется высокий уровень изоляции и безопасности или требуется возможность одновременного запуска множества различных операционных систем, а Vagrant предоставляет удобное решение для автоматизированного и воспроизводимого создания виртуальных машин.
Vagrant и Docker не являются взаимоисключающими технологиями, и оба инструмента можно использовать одновременно. Например, команды DevOps могут использовать Docker для разработки и запуска приложений, а Vagrant — для воссоздания специализированных сред для воспроизведения проблем. Docker может даже запускаться внутри виртуальной машины, созданной Vagrant, возможно, для тестирования новых версий Docker или для тестирования инструментов, распространяемых в виде образов Docker в изолированной среде.
Резюме
Команды DevOps имеют множество вариантов при создании, распространении и запуске приложений.
Docker предоставляет настраиваемый формат образа и среду выполнения контейнера, которая обеспечивает широкомасштабное и эффективное использование ресурсов и поддерживается на платформах PaaS и FaaS.
Виртуальные машины предлагают безопасные и изолированные среды выполнения от многих облачных и локальных поставщиков виртуальных машин, а Vagrant абстрагируется от многих различий, предоставляя единый интерфейс командной строки и согласованный синтаксис конфигурации для создания экземпляров виртуальных машин у разных поставщиков.
Прежде чем вы начнете разрабатывать свое следующее приложение, посмотрите, как служба хостинга приложений Kinsta может использовать Dockerfiles для управления развертыванием вашего кода.