Чи варто використовувати Vagrant або Docker для створення ізольованого середовища? [зачинено]


2083

Я використовую Ubuntu для розробки та розгортання і маю потребу в створенні ізольованого середовища.

З цією метою я розглядаю або Вагранта, або Докера. Які плюси і мінуси, або як вони порівнюють ці рішення?


27
Обидва зараз комбіновані: docs.vagrantup.com/v2/provisioning/docker.html
Альп

78
Ваше запитання пощастило отримати відповіді письменників обох служб: Мітчелл та Соломон Хайкс
itsazzad

4
Я хотів би дати нове резюме - питання здебільшого неправильне. Правильне питання: чи слід використовувати Vagrant або docker-compose для створення ізольованого середовища? Відповідь полягає в тому, що Vagrant і docker-compose виконують одне і те ж завдання опису середовищ, і вам слід скоріше порівняти Docker з Virtualbox. Різниця полягає в тому, що Vagrant може використовувати будь-яку віртуалізацію, таку як Docker, VMWare, Virtualbox для Windows, Linux або OSX, але докер-композиція може просто використовувати зображення Docker на основі Linux.
PHZ.fi-Pharazon

Для мене відповідь "Наскільки важлива швидкість для вас в регулярних робочих діях". Я вважаю, що Вагрант повільніше, ніж Докер. На докері, особливо після початкового витягу, підхід до кешера та шарів докера робить його найпростішим і найшвидшим для мене, як розробника, використовувати його
Майкл

Відповіді:


1155

Якщо ваша мета - ізоляція, я думаю, що Докер - це те, чого ви хочете.

Vagrant - менеджер віртуальної машини. Це дозволяє скриптувати конфігурацію віртуальної машини, а також резервування. Однак це все-таки віртуальна машина залежно від VirtualBox (або інших) з величезними накладними витратами. Для цього потрібно мати файл жорсткого диска, який може бути величезним, вимагає багато оперативної пам’яті, а продуктивність може бути не дуже хорошою.

З іншого боку, Docker використовує групу ядра та простір імен через LXC . Це означає, що ви використовуєте те саме ядро, що і хост, і ту ж файлову систему. Ви можете використовувати Dockerfile разом із docker buildкомандою, щоб обробляти забезпечення та конфігурацію вашого контейнера. У вас є приклад на docs.docker.com про те, як зробити свій Dockerfile; це дуже інтуїтивно.

Єдиною причиною, яку ви могли б захотіти використовувати Vagrant, є те, що вам потрібно зробити BSD, Windows або іншу розробку, яка не є Linux, у вашому вікні Ubuntu. Інакше йдіть за Докером.


13
На жаль, поки що. Якщо ви працюєте в 32-бітній системі, вам знадобиться VM з 64-бітовою гостьовою системою, щоб запустити докер. Однак, з go1.1 32-розрядна підтримка покращиться, і не виключено, що докер незабаром підтримає 32-бітну арку
скрип

8
Це справедливо для Mac та Windows, але оскільки докер 0.7, будь-який дистрибутив Linux працює чудово. Якщо ви знаєте непрацюючого, будь ласка, повідомте мене про це. Крім того, якщо у вас немає стека Mac або Windows (що навряд чи можливо, але ви не хочете запускати Docker ніде, а не на Linux. Клієнт докера працює добре на Mac, незабаром має працювати над BSD, і демон в кінцевому підсумку підтримує BSD, Solaris і Mac.
скрип

9
Якщо хтось читає ці коментарі, ви повинні знати, що Докер потрапив ver1.0 лише 12 днів тому ( blog.docker.com/2014/06/its-here-docker-1-0 ) і ціла маса різних платформ є стабільними & підтримується зараз ( docs.docker.com/installation )
JorgeArtware

17
у vagrant є LXC та докер-довірячі. Однак - бродяга та докер - принципово різні речі. Vagrant призначений виключно для середовищ розробки, докер - це лише для виробництва та Linux.
Dannyboy

2
Зараз Docker працює на Windows 10 Pro та новіших версій та Windows Server 2016. Я щойно оновив з Windows 10 Home до Windows 10 Pro та встановив додаток docker. Зараз я можу запускати докерські зображення Linux у Windows 10. Це геніально!
PrestonDocks

2339

Відмова: Я написав Вагрант! Але через те, що я писав Vagrant, я більшу частину свого часу проводжу в світі DevOps, який включає в себе програмне забезпечення типу Docker. Я працюю з багатьма компаніями, які використовують Vagrant, і багато хто використовує Docker, і я бачу, як вони взаємодіють.

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

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

Vagrant запускає речі для запуску програм / служб з метою розробки. Це може бути на VirtualBox, VMware. Він може бути віддаленим, як AWS, OpenStack. У тих випадках, якщо ви використовуєте контейнери, Vagrant не переймається і охоплює це: він може автоматично встановлювати, витягувати, створювати та запускати контейнери Docker, наприклад. З Vagrant 1.6 Vagrant має середовище розробки на основі докерів і підтримує використання Docker з тим же робочим процесом, що і Vagrant для Linux, Mac та Windows. Вагрант не намагається замінити Докера тут, він застосовує докерські практики.

Docker спеціально запускає контейнери Docker. Якщо ви порівнюєте безпосередньо з Vagrant: це конкретно більш конкретне (може запускати лише контейнери Docker), менш гнучкі (вимагає десь хоста Linux або Linux). Звичайно, якщо ви говорите про виробництво або ІС, порівняння з Вагрантом немає! Vagrant не живе в цих умовах, і тому Докера слід використовувати.

Якщо ваша організація працює лише з контейнерами Docker для всіх своїх проектів і має лише розробників, що працюють на Linux, то добре, Docker може точно працювати для вас!

Інакше я не бачу вигоди в спробі самостійно використовувати Docker, оскільки ви втрачаєте багато того, що може запропонувати Vagrant, які мають реальні переваги для бізнесу / підвищення продуктивності:

  • Vagrant може запускати машини VirtualBox, VMware, AWS, OpenStack тощо. Не має значення, що вам потрібно, Vagrant може запустити його. Якщо ви використовуєте Docker, Vagrant може встановити Docker на будь-який із них, щоб ви могли використовувати їх для цієї мети.

  • Vagrant - це єдиний робочий процес для всіх ваших проектів. Або кажучи іншим способом, це лише одне, що люди повинні навчитися запускати проект, чи є він у контейнері Docker чи ні. Якщо, наприклад, в майбутньому у конкурента виникне конкуренція безпосередньо з Докером, Вагрант зможе це також запустити.

  • Vagrant працює в Windows (назад до XP), Mac (назад до 10.5) та Linux (назад до ядра 2.6). У всіх трьох випадках робочий процес однаковий. Якщо ви використовуєте Docker, Vagrant може запустити машину (VM або дистанційну), яка може запускати Docker у всіх трьох цих системах.

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

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

Щоб вирішити конкретні зустрічні аргументи, які я чув на користь використання Docker замість Vagrant:

  • "Це менш рухомі частини" - Так, це може бути, якщо ви використовуєте Docker виключно для кожного проекту. Вже тоді це жертвує гнучкістю для блокування Docker. Якщо ви коли-небудь вирішите не використовувати Docker для будь-якого проекту, минулого, сьогодення чи майбутнього, тоді у вас буде більше рухомих частин. Якщо ви використовували Vagrant, у вас є одна рухома частина, яка підтримує решту.

  • "Це швидше!" - Після того, як у вас є хост, який може запускати контейнери Linux, Docker, безумовно, швидше працює, ніж будь-яка віртуальна машина була б запущена. Але запуск віртуальної машини (або віддаленої машини) - це разова вартість. Протягом дня більшість користувачів Vagrant ніколи фактично не знищують свій VM. Це дивна оптимізація для середовищ розробки. У виробництві, де Докер дійсно світить, я розумію необхідність швидко розкручувати контейнери.

Я сподіваюся, що тепер зрозуміло, що порівняти Докера з Вагрантом дуже складно, і я вважаю, що це не правильно. Для середовищ розробників Vagrant є більш абстрактним, більш загальним. Докер (і різні способи змусити його вести себе як Вагрант) - це специфічний випадок використання Вагранта, ігноруючи все інше, що може запропонувати Вагрант.

На закінчення: у дуже специфічних випадках використання Docker, безумовно, є можливою заміною Vagrant. У більшості випадків використання це не так. Vagrant не перешкоджає вашому використанню Docker; він насправді робить все можливе, щоб зробити цей досвід більш гладким. Якщо ви вважаєте, що це не так, я радий приймати пропозиції щодо вдосконалення речей, оскільки мета Vagrant - однаково добре працювати з будь-якою системою.

Сподіваюсь, це все прояснить!


4
@JaredMarkell Я думаю, що, можливо, він шукає веб-сервіс, який дозволяє йому керувати своїми машинами Vagrant, такими як Protobox .
Райан Кеннеді

73
@Mitchell Я просто хотів сказати спасибі, що пояснив це детально. Очевидно, що ти не можеш бути цілком об'єктивним, тому я ціную, що ти потребував часу, щоб пояснити нюанси та різні ситуації, коли вони могли бути використані. Я думаю, що сьогодні дуже багато плутанини щодо різноманітних інструментів полягає в тому, що вони багато перетинаються, і багато людей хочуть вирішити один розмір, коли хтось просто каже їм, що їм робити, і вони можуть це здійснити. Краса вашої відповіді полягає в тому, що вона відповідає на основне питання: як я можу створити ізольоване середовище? (незалежно від інструментів).
Йорданія


3
@ OğuzÇelikdemir Vagrant може зробити набагато більше, ніж це. Звичайно, якщо ви підготуєте конкретну віртуальну машину для кожного проекту, це триватиме. Але під час розробки я часто закінчую додавання більше служб / демонів / налаштувань (наприклад, коли я вирішую використовувати RabbitMQ для проекту під час розробки). Підхід VM вимагає, щоб ви підготували нове зображення із встановленим і налаштованим RabbitMQ та змусили розробників змінити свій VM на новий. Для Vagrant - я додаю відповідні рядки у блукаючі конфігурації, і всі розробники можуть легко оновити свої віртуальні машини (використовуючи vagrant provision).
Томаш Стручинський

5
(Ви маєте в виду «розкриття», показуючи що - то важливе, а не "відмова від відповідальності», який заперечує відповідальність: english.stackexchange.com/q/115850 )
Jerry101

1418

Я автор Докера.

Коротка відповідь полягає в тому, що якщо ви хочете керувати машинами, ви повинні використовувати Vagrant. І якщо ви хочете створювати та запускати додатки, слід скористатися Docker.

Vagrant - це інструмент для управління віртуальними машинами. Docker - це інструмент для створення та розгортання програм, упаковуючи їх у легкі контейнери. Контейнер може містити майже будь-який програмний компонент разом із залежностями (виконувані файли, бібліотеки, файли конфігурації тощо) та виконувати його в гарантованому та повторюваному середовищі виконання. Це дозволяє дуже просто створити додаток один раз і розгорнути його в будь-якому місці - на своєму ноутбуці для тестування, потім на різних серверах для прямого розгортання тощо.

Поширена помилка, що ви можете використовувати Docker лише в Linux. Це неправильно; ви також можете встановити Docker на Mac та Windows. Встановлюючись на Mac, Docker поєднує крихітний VM Linux (25 Мб на диску!), Який виконує функцію обгортки вашого контейнера. Після встановлення це повністю прозоро; ви можете використовувати командний рядок Docker точно так само. Це дає вам найкраще з обох світів: ви можете протестувати та розробляти свою програму за допомогою контейнерів, які дуже легкі, прості для тестування та прості переміщення (див., Наприклад, https://hub.docker.com для спільного використання контейнерів для багаторазового використання з спільноту Докера), і вам не потрібно турбуватися про тонко-дрібні деталі управління віртуальними машинами, які все одно є лише засобом для досягнення мети.

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

  • По-перше, Вагрант не є хорошою абстракцією для Докера. Vagrant був розроблений для управління віртуальними машинами. Docker був розроблений для управління програмою виконання. Це означає, що Docker, за задумом, може взаємодіяти з додатком більш багатими способами та має більше інформації про час роботи програми. Примітиви Докера - це процеси, потоки журналів, змінні середовища та мережеві зв’язки між компонентами. Примітивами у Vagrant є машини, блокові пристрої та ssh-ключі. Vagrant просто сидить нижче в стеці, і єдиний спосіб, коли він може взаємодіяти з контейнером, це зробити вигляд, що це просто інший вид машини, який можна "завантажувати" та "входити в систему". Тож, звичайно, ви можете набрати "бродягу" плагіном Docker, і щось трапиться. Це замість повного розмаху того, що може зробити Докер? Спробуйте рідний Докер на пару днів і переконайтеся самі:

  • По-друге, аргумент блокування. "Якщо ви використовуєте Vagrant як абстракцію, ви не будете заблоковані в Docker!". З погляду Vagrant, який призначений для управління машинами, це має ідеальний сенс: хіба контейнери не є ще одним видом машини? Як і Amazon EC2 та VMware, ми повинні бути обережними, щоб не прив’язати наші засоби забезпечення до конкретного постачальника! Це створило б блокування - краще абстрагувати все подалі від Vagrant. За винятком цього, цілком не вистачає точки Докера. Докер не забезпечує машини; він обертає вашу програму у легкому портативному режимі виконання, який можна кинути в будь-якому місці.

Час виконання, який ви обираєте для своєї програми, не має нічого спільного з тим, як ви забезпечуєте свої машини! Наприклад, досить часто розгортати додатки на машинах, які надає хтось інший (наприклад, екземпляр EC2, розгорнутий вашим системним адміністратором, можливо, використовуючи Vagrant), або голі металеві машини, які Vagrant взагалі не може надати. І навпаки, ви можете використовувати Vagrant на машинах забезпечення, які не мають нічого спільного з розробкою вашої програми - наприклад, готовим до використання вікном Windows IIS чи іншим. Або ви можете використовувати Vagrant для забезпечення машинами для проектів, які не використовують Docker - можливо, вони використовують комбінацію рубігем і rvm, наприклад, для управління залежностями та пісочниці.

Підсумовуючи це: Vagrant призначений для управління машинами, а Docker - для створення та роботи прикладних середовищ.


396
Просто хотів зауважити, що важливі аспекти цієї відповіді невірні. Vagrant не для управління машинами, Vagrant - для керування середовищами розвитку. Те, що Vagrant розкручує машини, є здебільшого історичним. Наступна версія Vagrant має першокласну підтримку для розгортання середовищ розробників, використовуючи Docker як постачальника безпосередньо на хості або будь-якій машині VM (Mac, Win). Він також може розкручувати сирий LXC, якщо те, що хтось хоче (знову ж таки, на хості або VM). Vagrant зацікавлений у тому, щоб зробити те, що найкраще створити портативне середовище розробки, чи це означає створення VM чи ні.
Мітчелл

7
@Davide Це висвітлює його більш докладно: vagrantup.com/blog/…
Мітчелл

48
"Поширене помилкове уявлення про те, що ви можете використовувати Docker лише в Linux" Хоча це правда, точно сказати, що ви можете використовувати Linux тільки на Docker. Якщо я хочу створити тестовий бігун, який здійснює мою програму в найрізноманітніших конфігураціях оточення (різних базах даних, версіях PHP, кеш-пам'яті тощо), я можу це легко зробити з докерними контейнерами. Але я не можу побачити, чи буде моя програма належним чином працювати в Windows IIS env, або на BSD або OSX.
Міксологічний

10
Ваш перший пункт є застарілим , так як Vagrant має вбудований підтримку провайдера для вантажника: docs.vagrantup.com/v2/provisioning/docker.html
ALP

19
Пост застарів. Vagrant зараз підтримує Docker як постачальника. І є кілька відеороликів, які демонструють, як ви можете дружно використовувати Vagrant та Docker у своєму блозі .
саргас

86

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

У мене є пристойний досвід роботи з Vagrant і можу дуже рекомендувати його. Це, звичайно, більш важке рішення з точки зору того, що воно засноване на ВМ замість LXC. Однак, я знайшов гідний ноутбук (8 ГБ оперативної пам’яті, процесор i5 / i7) не має проблем із запуском VM за допомогою Vagrant / VirtualBox поряд із інструментами для розробки.

Однією з дійсно чудових речей з Vagrant є інтеграція зі сценаріями Puppet / Chef / shell для автоматизації налаштування. Якщо ви використовуєте один з цих параметрів для налаштування виробничого середовища, ви можете створити середовище розробки, наближене до ідентичного, як ви збираєтеся отримати, і саме цього ви хочете.

Інша чудова річ з Vagrant - це те, що ви можете оновлювати свій Vagrantfile разом із кодом програми. Це означає, що всі інші члени вашої команди можуть поділитися цим файлом, і ви гарантовано працюєте з однаковою конфігурацією середовища.

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


7
Хлопці, я випустив експериментального постачальника бродяг для докера : github.com/fgrehm/docker-provider .
fgrehm

2
Docker - це не віртуалізація, а запуск ОС у власному контейнері, використовуючи те саме ядро ​​хоста, його не є провайдером, як інші VM, тому докер уже підтримується Vagrant.
Aftab Naveed

1
Docker - це віртуалізація самої ОС, неявна повторне використання базового обладнання. Це віртуалізація, оскільки вона абстрагує та ізолює файлову систему, мережу та процеси, що працюють у контейнері.
jose.angel.jimenez

63

Вони дуже доповнюють один одного.

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

У програмі Vagrant ви можете повністю зайнятись будь-яким забезпеченням шеф-кухаря, і все, що вам потрібно зробити, - це підготувати машину, яка запускає єдиний невеликий сценарій оболонки, який встановлює докер. Це означає, що мої Vagrantfiles для кожного проекту майже однакові та дуже прості.

Ось типовий 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

Конфігурація соло-шеф-кухаря без докера була б значно складнішою.

Остаточний великий плюс отримується, коли ви переходите до виробництва, переводячи середовище розробки на інфраструктуру хостів, які все одно, що їм достатньо конфігурації, щоб запустити докер - це дуже мало роботи.

Якщо ви зацікавлені, у мене є більш детальна стаття про середовище розробки на власному веб-сайті за адресою

Впровадження середовища для бродячого / докера


2
Ви робили все це оркестрацію docker_start, але не турбувались зв'язувати контейнери разом. Ви просто збираєтесь із жорстко зашифрованими номерами портів, оскільки ви працюєте під Vagrant?
WineSoaked

6
Привіт WineSoaked, приклад вище не показує контейнер, який фактично використовує всі ці сервіси. Якщо ви подивитесь на згадану публікацію блогу, є ще один сценарій сценарію / vagrant / docker_web, який запускає контейнер для розробки проекту. Це дійсно використовує --link в команді run docker, і проект Rails використовує змінні середовища, які вводили докер, для підключення до служб.
Марк Стратманн

1
Я бачу потенціал злиття обох продуктів. Швидкий як тестування навколишнього середовища та докер для обгортки додатків. Об'єднавши обидва, ви можете протестувати одну програму або тест на багато ессенаріїв. Я думаю, що багато хто з "сервісів тестування платформ" вчасно використовують Vagrant + Docker.
m3nda

8
"Вони дуже безкоштовні". - Дійсно, обидва є безкоштовними.
Underyx

2
Привіт @koppor Я останній раз користувався докер-машиною близько трьох місяців тому і ще не повернувся до неї. Проблема у мене полягала в тому, що вона має помилку в спільному використанні папок від мого хоста MAC до док-станції для роботи з VM під час використання драйвера VMWare. Це означало, що я не можу редагувати код локально на Mac і зміни відображатись у контейнері docker. Я не знаю, чи виправили це ще, коли вони це дійсно перейду до цього. Однак я переклав усі свої оркестровки на контейнери на докерські композиції з моменту написання цієї відповіді
Марк Стратманн

53

Vagrant-lxc - плагін для Vagrant, який дозволить вам використовувати LXC для надання Vagrant. Він не має всіх функцій, які має VM для віртуального замовчування (VirtualBox), але він повинен забезпечити вам більшу гнучкість, ніж докер-контейнери. У посиланні є відео, яке показує його можливості, які варто переглянути.


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

Це означає, що ви можете замінити шеф-кухаря чи лялечку на Докер. Ви можете використовувати комбінації, як Docker в якості постачальника (VM), а шеф-кухар як постачальник. Або ви можете використовувати VirtualBox в якості постачальника та Docker як постачальника.


23
світ просто зійшов з розуму;) ми можемо запустити бродяг за допомогою докерського постачальника, щоб запустити контейнери
докера

@zainengineer, чи постачальник Docker для Vagrant в Windows все ще використовує boot2docker або він використовує якийсь варіант Docker Toolbox?
Дерек Махар

@zainengineer Чи є у вас посилання на наочні приклади (а не бродячі документи)?
Вів

16

Використання обох є важливою частиною тестування доставки додатків. Я тільки починаю займатися Docker і дуже важко замислююся над командою додатків, яка має жахливу складність у створенні та постачанні свого програмного забезпечення. Подумайте про класичний проект Phoenix / Постійна доставка.

Мислення іде приблизно так:

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

Це, мабуть, є логічним продовженням твердження Мітчелла про те, що Вагрант - це розробка, поєднана з мисленням Фарлі / Хамблса в постійній доставці. Якщо я, як розробник, зможу скоротити цикл зворотного зв’язку щодо тестування інтеграції та доставки додатків, піде більш висока якість та краще робоче середовище.

Той факт, що я як розробник постійно та послідовно постачаю контейнери до VM та більш телісно тестую додаток, означає, що виробничі випуски будуть додатково спрощені.

Тому я бачу, що Вагрант розвивається як спосіб використовувати деякі дивовижні наслідки, які матиме Докер для розгортання додатків.


Чи є у вас випадково повідомлення про це в блозі? вже майже два роки, як це відбувається? все ще використовуєте бродягу з докером або просто докер і докер-флот / автомат?
Анджей Реманн

Компанію, в якій я працював, було придбано, і вони зняли весь мій вміст @Hoto. Коротка відповідь - я використовую докер-машину вдома для своїх домашніх проектів. На роботі я <gulp> менеджер </gulp> і не займаюся великими технологіями. У нас немає планів щодо використання Docker, тому наш інструмент, як правило, Vagrant.
Бойд Хемфілл

10

Однозначно Докер на виграш!

Як ви знаєте, Vagrant призначений для управління віртуальною машиною, тоді як Docker - для управління контейнерами для програм. Якщо ви не знаєте про різницю, ось ось такий: Контейнер програмного забезпечення може спільно використовувати одну машину та ядро ​​з іншими контейнерами програмного забезпечення. Використовуючи контейнери, ви економите гроші, оскільки не витрачаєте ресурси на декілька операційних систем (ядер), ви можете пакувати більше програмного забезпечення на одному сервері, зберігаючи хороший ступінь ізоляції.

Звичайно, це нова дисципліна, яку потрібно піклуватися про власні ловушки та проблеми.

Перейдіть на Docker Swarm, якщо ваші вимоги перевищують єдиний ліміт ресурсів машини.


8

У справжньому журналі Oracle Java є справді інформативна стаття про використання Docker у поєднанні з Vagrant (та лялькою):

Висновок

Легкі контейнери Docker швидше порівняно з класичними машинками та стали популярними серед розробників і як частина ініціатив CD та DevOps. Якщо ваша мета - ізоляція, Докер - відмінний вибір. Vagrant - це менеджер VM, який дозволяє вам конфігурувати конфігурації окремих віртуальних машин, а також здійснювати резервування. Однак це підвіконня VM, залежне від VirtualBox (або іншого менеджера VM) з відносно великими накладними витратами. Це вимагає, щоб ви працювали на холостому диску, який може бути величезним, вимагає багато оперативної пам'яті, а продуктивність може бути неоптимальною. Docker використовує ізоляцію груп ядер і простору імен через LXC. Це означає, що ви використовуєте те саме ядро, що і хост, і та сама система ile. Vagrant є рівнем вище Докера з точки зору абстракції, тому вони насправді не порівнянні. Інструменти управління конфігурацією, такі як Лялька, широко використовуються для забезпечення цільових середовищ. Повторне використання існуючих на основі лялькових рішень легко з Docker. Ви також можете нарізати своє рішення, щоб інфраструктура була забезпечена Лялькою; проміжне програмне забезпечення, сам бізнес-додаток або обидва вони надаються Docker; і Докер загортається Вагрантом. За допомогою цього набору інструментів ви можете зробити те, що найкраще підходить для вашого сценарію.

Як створювати, використовувати та упорядкувати Docker-контейнери в DevOps http://www.javamagazine.mozaicreader.com/JulyAug2015#&pageSet=34&page=0


1
Так багато зниклих
Пол Верест
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.