Должен ли я использовать Vagrant или Docker для создания изолированной среды? [закрыто]

2083

Я использую Ubuntu для разработки и развертывания и нуждаюсь в создании изолированной среды.

Я рассматриваю Vagrant или Docker для этой цели. Каковы плюсы и минусы или как эти решения сравниваются?

murtaza52
источник
27
Оба теперь можно комбинировать: docs.vagrantup.com/v2/provisioning/docker.html
Alp
78
Ваш вопрос достаточно удачен, чтобы получить ответы обоих авторов двух сервисов: Митчелла и Соломона
Хайкса
4
Я хотел бы дать новое резюме - вопрос в основном неправильный. Правильный вопрос: должен ли я использовать Vagrant или docker-compose для создания изолированной среды? Ответ заключается в том, что Vagrant и docker-compose выполняют одну и ту же задачу описания сред, и вам лучше вместо этого сравнить Docker с Virtualbox. Разница в том, что Vagrant может использовать любую виртуализацию, такую ​​как Docker, VMWare, Virtualbox в Windows, Linux или OSX, но docker-compose может просто использовать образы Docker на основе Linux.
PHZ.fi-Pharazon
Для меня ответ - «Насколько важна для вас скорость в обычной работе». Я считаю Vagrant медленнее, чем Docker. В Docker, особенно после первоначального извлечения, подход Docker для кеширования и слоев делает его самым простым и быстрым для меня, как для разработчика, его использование
Майкл Даррант,

Ответы:

1155

Если ваша цель - изоляция, я думаю, Докер - это то, что вы хотите.

Vagrant - менеджер виртуальных машин. Это позволяет вам создавать сценарии конфигурации виртуальной машины, а также инициализации. Тем не менее, это все еще виртуальная машина в зависимости от VirtualBox (или других) с огромными накладными расходами. Это требует, чтобы у вас был файл жесткого диска, который мог быть огромным, это требовало большого количества оперативной памяти, и производительность могла быть не очень хорошей.

Docker, с другой стороны, использует ядро ​​cgroup и пространство имен через LXC . Это означает, что вы используете то же ядро, что и хост, и ту же файловую систему. Вы можете использовать Dockerfile с docker buildкомандой, чтобы управлять подготовкой и настройкой вашего контейнера. У вас есть пример на docs.docker.com о том, как сделать ваш Dockerfile; это очень интуитивно понятно.

Единственная причина, по которой вы можете захотеть использовать Vagrant, заключается в том, что вам нужно заняться разработкой BSD, Windows или другой не-Linux на вашем Ubuntu. В противном случае, перейдите на Docker.

creack
источник
13
К сожалению, пока нет. Если вы работаете в 32-битной системе, вам понадобится виртуальная машина с 64-битной гостевой системой для запуска Docker. Однако, с go1.1 32-битная поддержка улучшается, и вполне возможно, что докер скоро поддержит 32-битную арку
creack
8
Это верно для Mac и Windows, но, начиная с Docker 0.7, любой дистрибутив Linux работает нормально. Если вы знаете о нерабочем, пожалуйста, дайте мне знать. Кроме того, если у вас нет стека Mac или Windows (что маловероятно, но может случиться), вы не хотите запускать Docker нигде, кроме Linux. Docker-клиент отлично работает на Mac, скоро должен работать на BSD, и демон в конечном итоге будет поддерживать BSD, Solaris и Mac.
creack
9
В случае, если кто-то читает эти комментарии, вы должны знать, что Docker выпал ver1.0 всего 12 дней назад ( blog.docker.com/2014/06/its-here-docker-1-0 ), и множество различных платформ стабильно работают. & поддерживается сейчас ( docs.docker.com/installation )
JorgeArtware
17
У vagrant есть провайдеры LXC и Docker. Однако - Vagrant и Docker - это принципиально разные вещи. Vagrant предназначен исключительно для сред разработки, докер - для производства и только для Linux.
Дэннибой
2
Docker теперь работает на Windows 10 Pro и выше и Windows Server 2016. Я только что обновил Windows 10 Home до Windows 10 Pro и установил приложение Docker. Теперь я могу запускать образы докера Linux на Windows 10. Это великолепно!
PrestonDocks
2339

Отказ от ответственности: я написал Vagrant! Но поскольку я написал Vagrant, я провожу большую часть своего времени в мире DevOps, который включает в себя программное обеспечение, такое как Docker. Я работаю со многими компаниями, использующими Vagrant, и многие используют Docker, и я вижу, как они взаимодействуют.

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

Неправильно сравнивать Vagrant с Docker. В некоторых сценариях они перекрываются, а в подавляющем большинстве - нет. На самом деле, более подходящим сравнением будет Vagrant и Boot2Docker (минимальная ОС, которая может запускать Docker). Vagrant на уровень выше Docker с точки зрения абстракций, поэтому в большинстве случаев это несправедливое сравнение.

Vagrant запускает приложения для запуска приложений / сервисов с целью разработки. Это может быть на VirtualBox, VMware. Он может быть удаленным, как AWS, OpenStack. Внутри них, если вы используете контейнеры, Vagrant не заботится об этом, и принимает это: он может, например, автоматически устанавливать, извлекать, собирать и запускать контейнеры Docker. В Vagrant 1.6 Vagrant имеет среды разработки на основе докеров и поддерживает использование Docker с тем же рабочим процессом, что и Vagrant, в Linux, Mac и Windows. Вагрант не пытается заменить Docker здесь, он охватывает практики Docker.

Docker специально запускает контейнеры Docker. Если вы сравниваете непосредственно с Vagrant: это, в частности, более конкретное (может только запускать Docker-контейнеры), менее гибкое (требует где-то Linux или Linux-хост) решение. Конечно, если вы говорите о производстве или CI, нет никакого сравнения с Vagrant! Vagrant не живет в этих средах, и поэтому следует использовать Docker.

Если ваша организация использует только контейнеры Docker для всех своих проектов и в ней работают только разработчики под Linux, то, конечно, Docker наверняка подойдет вам!

В противном случае, я не вижу пользы от попытки использовать Docker в одиночку, поскольку вы теряете многое из того, что может предложить Vagrant, что дает реальные преимущества для бизнеса / производительности:

  • Vagrant может запускать машины VirtualBox, VMware, AWS, OpenStack и др. Неважно, что вам нужно, Vagrant может запустить его. Если вы используете Docker, Vagrant может установить Docker на любой из них, чтобы вы могли использовать их для этой цели.

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

  • Vagrant работает в Windows (версия XP), Mac (версия 10.5) и Linux (версия 2.6). Во всех трех случаях рабочий процесс одинаков. Если вы используете Docker, Vagrant может запустить машину (виртуальную или удаленную), которая может запустить Docker на всех трех этих системах.

  • Vagrant знает, как настроить некоторые сложные или нетривиальные вещи, такие как сетевые папки и синхронизация папок. Например: Vagrant знает, как подключить статический IP-адрес к машине или перенаправленным портам, и конфигурация одинакова, независимо от того, какую систему вы используете (VirtualBox, VMware и т. Д.). Для синхронизированных папок Vagrant предоставляет несколько механизмов для получения локальных файлы на удаленную машину (общие папки VirtualBox, NFS, rsync, Samba [плагин] и т. д.). Если вы используете Docker, даже Docker с виртуальной машиной без Vagrant, вам придется сделать это вручную, или в этом случае придется заново изобретать Vagrant.

  • Vagrant 1.6 имеет первоклассную поддержку сред разработки на основе докеров . Это не запустит виртуальную машину в Linux и автоматически запустит виртуальную машину в Mac и Windows. Конечным результатом является то, что работа с Docker одинакова на всех платформах, в то время как Vagrant по-прежнему обрабатывает утомительные детали таких вещей, как сеть, синхронизированные папки и т. Д.

Чтобы обратиться к конкретным встречным аргументам в пользу использования Docker вместо Vagrant:

  • «Это менее подвижные части» - да, может быть, если вы используете Docker исключительно для каждого проекта. Даже тогда это жертвует гибкостью для блокировки Docker. Если вы когда-нибудь решите не использовать Docker для какого-либо проекта, прошлого, настоящего или будущего, у вас будет больше движущихся частей. Если вы использовали Vagrant, у вас есть одна движущаяся часть, которая поддерживает остальные.

  • "Это быстрее!" - Если у вас есть хост, на котором можно запускать контейнеры Linux, Docker определенно быстрее запускает контейнер, чем любая виртуальная машина для запуска. Но запуск виртуальной машины (или удаленной машины) стоит единовременно. В течение дня большинство пользователей Vagrant никогда не уничтожают свои виртуальные машины. Это странная оптимизация для сред разработки. На производстве, где Docker действительно сияет, я понимаю необходимость быстрого вращения контейнеров вверх / вниз.

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

В заключение: в очень специфических случаях использования Docker, безусловно, является возможной заменой Vagrant. В большинстве случаев это не так. Vagrant не мешает вам использовать Docker; он на самом деле делает все возможное, чтобы сделать этот опыт более гладким. Если вы обнаружите, что это неправда, я с удовольствием приму предложения по улучшению, поскольку цель Vagrant - одинаково хорошо работать с любой системой.

Надеюсь, это прояснит ситуацию!

Mitchell
источник
4
@JaredMarkell Я думаю, возможно, он ищет веб-сервис, который позволил бы ему управлять своими машинами Vagrant, такими как Protobox .
Райан Кеннеди
73
@ Митчелл Я просто хотел сказать спасибо, что объяснил это так подробно. Очевидно, что вы не можете быть абсолютно объективными, поэтому я ценю, что вы нашли время, чтобы объяснить нюансы и различные ситуации, в которых они могут быть использованы. Я думаю, что большая часть путаницы вокруг множества инструментов сегодня заключается в том, что они во многом перекрываются, и многие люди хотят, чтобы решение было универсальным и подходящим для всех, когда кто-то просто говорит им, что делать, и они могут его реализовать. Прелесть вашего ответа в том, что он отвечает на основной вопрос: как я могу создать изолированную среду? (независимо от инструментов).
Джордан,
4
@JaredMarkell Docker имеет REST API docs.docker.com/reference/api/docker_remote_api
Тарней Кальман,
3
@ OğuzÇelikdemir Vagrant может сделать гораздо больше. Конечно, если вы подготовите конкретную виртуальную машину для каждого проекта, это будет продолжаться. Но во время разработки я часто заканчиваю тем, что добавляю больше сервисов / демонов / настроек (например, когда я решаю использовать RabbitMQ для проекта во время разработки). Подход чисто виртуальной машины потребует, чтобы вы подготовили новый образ с установленным и настроенным RabbitMQ и заставили разработчиков изменить свою виртуальную машину на эту новую. Для Vagrant - я добавляю соответствующие строки в конфигурации vagrant, и все разработчики могут легко обновить свои виртуальные машины (используя vagrant provision).
Томаш Стручински
5
(Вы имеете в виду «раскрытие», раскрытие чего-то важного, а не «отказ от ответственности», отказ от ответственности: english.stackexchange.com/q/115850 )
Jerry101
1418

Я автор Docker.

Короткий ответ: если вы хотите управлять машинами, вы должны использовать Vagrant. И если вы хотите создавать и запускать среды приложений, вам следует использовать Docker.

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

Это распространенное заблуждение, что вы можете использовать Docker только в Linux. Это неверно; Вы также можете установить Docker на Mac и Windows. При установке на Mac Docker связывает крошечную виртуальную машину Linux (25 МБ на диске!), Которая действует как оболочка для вашего контейнера. После установки это полностью прозрачно; вы можете использовать командную строку Docker точно таким же образом. Это дает вам лучшее из обоих миров: вы можете тестировать и разрабатывать свое приложение с использованием контейнеров, которые очень легки, просты в тестировании и легко перемещаются (см., Например, https://hub.docker.com для обмена повторно используемыми контейнерами с сообщество Docker), и вам не нужно беспокоиться о мельчайших подробностях управления виртуальными машинами, которые в любом случае являются лишь средством достижения цели.

Теоретически возможно использовать Vagrant в качестве уровня абстракции для Docker. Я рекомендую против этого по двум причинам:

  • Во-первых, Vagrant не является хорошей абстракцией для Docker. Vagrant был разработан для управления виртуальными машинами. Docker был разработан для управления временем выполнения приложения. Это означает, что Docker по своему замыслу может более полно взаимодействовать с приложением и имеет больше информации о времени выполнения приложения. Примитивами в Docker являются процессы, потоки журналов, переменные среды и сетевые связи между компонентами. Примитивами в Vagrant являются машины, блочные устройства и ssh-ключи. Vagrant просто находится ниже в стеке, и единственный способ, которым он может взаимодействовать с контейнером, - притворяться, что это просто другой тип машины, которую вы можете «загружать» и «входить в систему». Так что, конечно, вы можете напечатать «vagrant up» с помощью плагина Docker, и что-то очень красивое произойдет. Заменит ли он всю широту возможностей Docker? Попробуйте родной Docker на пару дней и убедитесь сами :)

  • Во-вторых, аргумент блокировки. «Если вы используете Vagrant в качестве абстракции, вы не будете заблокированы в Docker!». С точки зрения Vagrant, который предназначен для управления машинами, это имеет смысл: не являются ли контейнеры просто другим видом машины? Так же, как Amazon EC2 и VMware, мы должны быть осторожны, чтобы не связывать наши инструменты обеспечения с каким-либо конкретным поставщиком! Это создаст блокировку - лучше абстрагироваться от Vagrant. За исключением того, что это полностью упускает из виду Docker. Докер не предоставляет машины; это оборачивает ваше приложение в легкую переносимую среду выполнения, которую можно отбросить куда угодно.

То, какое время выполнения вы выбираете для своего приложения, никак не связано с тем, как вы готовите свои машины! Например, довольно часто можно развертывать приложения на компьютерах, которые предоставлены кем-то другим (например, экземпляр EC2, развернутый вашим системным администратором, возможно, с помощью Vagrant), или на чистых машинах, которые Vagrant не может предоставить вообще. И наоборот, вы можете использовать Vagrant для предоставления компьютеров, которые не имеют ничего общего с разработкой вашего приложения - например, готового к использованию Windows IIS или чего-то еще. Или вы можете использовать Vagrant для предоставления компьютеров для проектов, которые не используют Docker - возможно, они используют комбинацию rubygems и rvm для управления зависимостями и песочницы, например.

Итак, Vagrant предназначен для управления машинами, а Docker - для создания и запуска сред приложений.

Соломон Хайкс
источник
396
Просто хотел отметить, что бродячие аспекты этого ответа неверны. Vagrant не для управления машинами, Vagrant для управления средами разработки. Факт, что Vagrant раскручивает машины, в основном исторический. Следующая версия Vagrant имеет первоклассную поддержку для ускорения разработки среды с использованием Docker в качестве поставщика непосредственно на хосте или любой виртуальной машине (Mac, Win). Он также может раскрутить необработанный LXC, если это то, что кто-то хочет (опять же, на хосте или ВМ). Vagrant заинтересован в создании того, что лучше для создания переносимой среды разработки, означает ли это создание виртуальной машины или нет.
Митчелл
7
@Davide Об этом более подробно говорится
Митчелл,
48
«Это распространенное заблуждение, что вы можете использовать Docker только в Linux». Хотя это правда, верно сказать, что вы можете использовать Linux только в Docker. Если я хочу настроить тестовый прогон, который использует мое приложение в самых разных конфигурациях среды (различные базы данных, версии php, кеширование и т. Д.), То я легко могу сделать это с помощью док-контейнеров. Но я не могу видеть, будет ли мое приложение работать должным образом в Windows IIS Env, или на BSD или OSX.
Mixologic
10
Ваш первый пункт устарел, поскольку Vagrant имеет встроенную поддержку поставщика для докера: docs.vagrantup.com/v2/provisioning/docker.html
Alp
19
Пост устарел. Vagrant теперь поддерживает Docker в качестве провайдера. И есть несколько видео, демонстрирующих, как вы можете использовать Vagrant и Docker в унисон в их блоге .
Саргас
86

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

У меня есть приличный опыт работы с Vagrant, и я очень рекомендую его. Это, безусловно, более тяжелое решение с точки зрения того, что оно основано на виртуальной машине, а не на LXC. Однако я обнаружил, что приличный ноутбук (8 ГБ ОЗУ, процессор i5 / i7) без проблем запускает виртуальную машину с использованием Vagrant / VirtualBox вместе с инструментами разработки.

Одна из замечательных особенностей Vagrant - это интеграция со скриптами Puppet / Chef / shell для автоматизации настройки. Если вы используете один из этих параметров для настройки своей производственной среды, вы можете создать среду разработки, максимально приближенную к идентичной, которую вы собираетесь получить, и это именно то, что вам нужно.

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

Интересно, что Vagrant и Docker на самом деле могут быть бесплатными. Vagrant может быть расширен для поддержки различных поставщиков виртуализации, и может оказаться, что Docker станет одним из таких поставщиков, который получит поддержку в ближайшем будущем. Видеть Https://github.com/dotcloud/docker/issues/404 для недавнего обсуждения этой темы.

Крис Бушелл
источник
7
Ребята, я выпустил экспериментальный бродячий провайдер для докера: github.com/fgrehm/docker-provider .
fgrehm
2
Docker - это не виртуализация, а запуск ОС внутри своего собственного контейнера с использованием того же ядра хоста, который не является провайдером, как и другие виртуальные машины, поэтому Vagrant уже поддерживает docker.
Афтаб Навид
1
Docker - это виртуализация самой ОС, неявное повторное использование базового оборудования. Это виртуализация, поскольку она абстрагирует и изолирует файловую систему, сети и процессы, выполняющиеся в контейнере.
jose.angel.jimenez
63

Они очень дополняют друг друга.

Я использовал комбинацию VirtualBox, Vagrant и Docker для всех своих проектов в течение нескольких месяцев и почувствовал следующие преимущества.

В Vagrant вы можете полностью отказаться от любой индивидуальной подготовки Chef, и все, что вам нужно для работы с вашим файлом vagrant, - это подготовить машину, на которой выполняется один небольшой скрипт оболочки, устанавливающий Docker. Это означает, что мои Vagrant-файлы для каждого проекта практически идентичны и очень просты.

Вот типичный Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "mark2"
  config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
  [3000, 5000, 2345, 15672, 5672, 15674, 27017, 28017, 9200, 9300, 11211, 55674, 61614, 55672, 5671, 61613].each do |p|
    config.vm.network :forwarded_port, guest: p, host: p
  end
  config.vm.network :private_network, ip: "192.168.56.20"
  config.vm.synced_folder ".", "/vagrant", :type => "nfs"
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "2048"]
    vb.customize ["modifyvm", :id, "--cpus", "2"]
  end
  # Bootstrap to Docker
  config.vm.provision :shell, path: "script/vagrant/bootstrap", :privileged => true
  # Build docker containers
  config.vm.provision :shell, path: "script/vagrant/docker_build", :privileged => true
  # Start containers
  # config.vm.provision :shell, path: "script/vagrant/docker_start", :privileged => true
end

Файл Bootstrap, который устанавливает докер, выглядит так

#!/usr/bin/env bash
echo 'vagrant  ALL= (ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
apt-get update -y
apt-get install htop -y
apt-get install linux-image-extra-`uname -r` -y
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
apt-get update -y
apt-get install lxc-docker -y
apt-get install curl -y

Теперь, чтобы получить все необходимые мне сервисы, у меня есть скрипт docker_start, который выглядит примерно так

#!/bin/bash
cd /vagrant
echo Starting required service containers
export HOST_NAME=192.168.56.20
# Start MongoDB
docker run --name=mongodb --detach=true --publish=27017:27017 --publish=28017:28017 dockerfile/mongodb
read -t5 -n1 -r -p "Waiting for mongodb to start..." key
# Start rabbitmq
docker run --name=rabbitmq --detach=true --publish=5671:5671 --publish=5672:5672 --publish=55672:55672 --publish=15672:15672 --publish=15674:15674 --publish=61613:61613 --env RABBITMQ_USER=guest --env RABBITMQ_PASS=guest rabbitmq
read -t5 -n1 -r -p "Waiting for rabbitmq to start..." key
# Start cache
docker run --name=memcached --detach=true --publish=11211:11211  ehazlett/memcached
read -t5 -n1 -r -p "Waiting for cache to start..." key
# Start elasticsearch
docker run --name=elasticsearch --detach=true --publish=9200:9200 --publish=9300:9300 dockerfile/elasticsearch
read -t5 -n1 -r -p "Waiting for elasticsearch to start..." key
echo "All services started"

В этом примере я использую MongoDB, Elastisearch, RabbitMQ и Memcached

Конфигурация соло Chef без докера будет значительно более сложной.

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

Если вы заинтересованы, у меня есть более подробная статья о среде разработки на моем собственном веб-сайте по адресу

Реализация среды разработки Vagrant / Docker

Марк Стратманн
источник
2
Вы сделали всю эту оркестровку docker_start, но не удосужились связать контейнеры вместе. Вы просто используете жестко запрограммированные номера портов, потому что используете Vagrant?
WineSoaked
6
Привет WineSoaked, пример выше не показывает контейнер, который фактически использует все эти сервисы. Если вы посмотрите на упомянутое сообщение в блоге, есть другой скрипт script / vagrant / docker_web, который запускает контейнер разработки для проекта. Это действительно использует --link в команде docker run, а проект Rails использует внедренные переменные среды docker для подключения к сервисам.
Марк Стратманн
1
Я вижу потенциал слияния обоих продуктов. Vagrant как тестирование среды и докер для оболочки приложений. Объединяя оба, вы можете протестировать одно приложение или юнит-тест по множеству сценариев. Я думаю, что многие из «сервисов тестирования платформ» используют Vagrant + Docker одновременно.
m3nda
8
«Они очень приветственные». - Оба могут свободно использовать, действительно.
Underyx
2
Привет @koppor Я последний раз пользовался докером около трех месяцев назад и еще не вернулся к нему. Проблема, с которой я столкнулся, заключалась в том, что при использовании драйвера VMWare возникла ошибка при совместном использовании папок с моего хоста MAC на виртуальной машине, на которой запущен докер. Это означало, что я не мог редактировать код локально на Mac и отражать изменения в контейнере Docker. Я не знаю, исправили ли они это еще, когда они сделают, я действительно переключусь на это. Однако с тех пор, как я написал этот ответ, я переключил всю свою оркестровку контейнера на создание докеров
Марк Стратманн
53

Vagrant-lxc - это плагин для Vagrant, который позволяет вам использовать LXC для предоставления Vagrant. Он не обладает всеми функциями, которыми обладает стандартная бродячая виртуальная машина (VirtualBox), но он должен обеспечивать большую гибкость, чем контейнеры Docker. В ссылке есть видео, показывающее его возможности, которые стоит посмотреть.

GnarlinBrando
источник
5
А вот и прямая ссылка на проект github.com/fgrehm/vagrant-lxc
gertas
46

С Vagrant теперь вы можете иметь Docker в качестве поставщика. http://docs.vagrantup.com/v2/docker/ . Поставщик Docker может быть использован вместо VirtualBox или VMware.

Обратите внимание, что вы также можете использовать Docker для обеспечения Vagrant. Это сильно отличается от использования Docker в качестве провайдера.http://docs.vagrantup.com/v2/provisioning/docker.html

Это означает, что вы можете заменить Chef или Puppet на Docker. Вы можете использовать такие комбинации, как Docker в качестве провайдера (VM) с Chef в качестве провайдера. Или вы можете использовать VirtualBox в качестве поставщика и Docker в качестве поставщика.

zainengineer
источник
23
мир просто сошел с ума;) мы можем запустить vagrant с помощью Docker провайдера, чтобы запускать Docker-контейнеры внутри Vagrant
Andrzej Rehmann
@zainengineer, поставщик Docker для Vagrant в Windows все еще использует boot2docker или использует какой-то вариант Docker Toolbox?
Дерек Махар
@zainengineer У вас есть ссылки на иллюстративные примеры (не бродячие документы)?
Wlad
16

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

Мышление идет примерно так:

  • Возьмите компонент приложения Java / Go и постройте его как контейнер (обратите внимание, не уверен, должно ли приложение быть встроено в контейнер или встроено, а затем установлено в контейнер)
  • Доставить контейнер в Vagrant VM.
  • Повторите это для всех компонентов приложения.
  • Выполните итерации для компонента (ов), чтобы кодировать против.
  • Непрерывно тестировать механизм доставки на виртуальную машину (-ы), управляемую Vagrant
  • Спите спокойно, зная, когда пора развертывать контейнер, что интеграционное тестирование проходило гораздо более непрерывно, чем до Docker.

Это, кажется, является логическим продолжением заявления Митчелла о том, что Vagrant предназначен для разработки в сочетании с мышлением Фарли / Хамблса в рамках Continuous Delivery. Если я, как разработчик, смогу сократить цикл обратной связи по интеграционному тестированию и доставке приложений, это приведет к повышению качества и улучшению условий работы.

Тот факт, что я как разработчик постоянно и последовательно поставляю контейнеры на виртуальную машину и более целостно тестирую приложение, это означает, что производственные выпуски будут еще более упрощены.

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

Бойд Хемфилл
источник
у вас случайно нет поста в блоге об этом? Прошло почти два года, как дела? все еще используете vagrant с докером или просто докер и докер-флат / машина?
Анджей Реманн
Компания, в которой я работал, была приобретена, и они сняли весь мой контент @Hoto. Короткий ответ: я использую docker-machine дома для своих любимых проектов. На работе я <gulp> manager </ gulp> и не очень разбираюсь в технологиях. У нас нет планов по использованию Docker, поэтому наш инструмент, как правило, Vagrant.
Бойд Хемфилл
10

Определенно Docker для победы!

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

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

Выберите Docker Swarm, если ваши требования превышают лимит ресурсов одной машины.

Хайро Андрес Веласко Ромеро
источник
8

В журнале Oracle Java действительно содержательная статья об использовании Docker в сочетании с Vagrant (и Puppet):

Вывод

Легкие контейнеры Docker быстрее по сравнению с классическими виртуальными машинами и стали популярными среди разработчиков и в рамках инициатив CD и DevOps. Если ваша цель - изоляция, Docker - отличный выбор. Vagrant - это менеджер виртуальных машин, который позволяет создавать сценарии конфигурации отдельных виртуальных машин, а также выполнять настройку. Однако это все-таки виртуальная машина, зависящая от VirtualBox (или другого менеджера виртуальных машин) с относительно большими накладными расходами. Для этого требуется простоя жесткого диска, который может быть огромным, занимает много оперативной памяти, а производительность может быть ниже оптимальной. Docker использует cgroups ядра и изоляцию пространства имен через LXC. Это означает, что вы используете то же ядро, что и хост, и ту же систему ile. Vagrant на уровень выше Docker с точки зрения абстракции, поэтому они на самом деле не сопоставимы. Инструменты управления конфигурацией, такие как Puppet, широко используются для предоставления целевых сред. С помощью Docker легко использовать существующие решения на основе Puppet. Вы также можете нарезать свое решение, чтобы инфраструктура обеспечивалась Puppet; промежуточное программное обеспечение, само бизнес-приложение или оба вместе предоставляются с помощью Docker; и Докер обволакивает Вагрант. С этим набором инструментов вы можете делать то, что лучше для вашего сценария.

Как создавать, использовать и организовывать контейнеры Docker в DevOps http://www.javamagazine.mozaicreader.com/JulyAug2015#&pageSet=34&page=0

Адриан Кребс
источник
1
Так много пропали без вести
Пол Верест