Зачем мне это нужно: хочу еще больше упростить себе жизнь. Vagrant клёвый, но если меняешь что-то в конфиге, или обновляешь какие-то пакеты, нужно не забыть это сделать и в продакшене, а я часто забываю. Если я правильно понял, одна из фич докера — легкий деплой контейнера, в котором софт и конфиги будут идентичны тому, что используются при разработке.
Другая клевая фича, которую сложнее реализовать с Vagrant — быстрая замена каких-то пакетов (php, nginx etc), для проверки — ушел ли баг, улучшилась ли производительность, не сломалась ли обратная совместимость и т.д.
Загвоздка: все мои текущие и прошлые проекты используют Virtualbox в качестве провайдера к Vagrant. Docker требует Hyper-V. А Virtualbox и Hyper-V несовместимы по понятным причинам. Т.е., если включаешь поддержку Hyper-V — Virtualbox не запустится.
Новый проект я бы с радостью начал, используя Docker. Но поддерживать старые проекты тоже надо. Каждый раз включать-выключать Hyper-V и перезагружать хост-машину — не вариант. Остаётся два варианта:
- Использовать docker-machine: попробую, если другие варианты не подойдут. Потому что по сути это запуск Docker в Virtualbox, отсюда наверняка потери производительности, да и авторы Docker в доках рекомендуют нативное ПО под Hyper-V
- Заменить провайдера в старых проектах. Vagrant (если верить докам) поддерживает Hyper-V
Попробовал пойти по второму пути — с наскока не вышло. Потому что образ, который я использую (bento/ubuntu-16.04), не поддерживает Hyper-V. Значит, надо заменить образ. И вот на этом моменте я решил — спрошу совета у тех, кто проходил этот путь уже. Натыкаться на грабли не хочется.
Вопросы:
- Если вы работали с Vagrant + Hyper-V, и особенно если переходили с Virtualbox — есть/были проблемы? Я имею в виду, вот если я вместо bento/ubuntu пропишу другой box, не вскрою ли я ящик пандоры с какими-то специфичными ошибками/проблемами, которые проявляются только с Hyper-V?
- Что-нибудь, что я не учел? Тысяча благодарностей за любой совет.
Update: что конкретно пробовал. Заменил бокс и провайдера в Vagrant. Боксы kmm/ubuntu-xenial64, maxx/ubuntu16, generic/ubuntu1604. Со вторым машина запускается, я даже могу ssh в неё. Но при запуске ошибка "No host IP was given to the Vagrant core NFS helper. This is an internal error that should be reported as a bug."
С другими боксами падает с разными ошибками раньше. Обновил Vagrant до 2.0, всё равно не помогло. Короче, я уже потратил полдня и не продвинулся ни капли. Поэтому прошу совета.
Update 23.10: попробовал docker-machine. Это утилита, которая создает виртуалку в Virtualbox, туда устанавливает Docker Engine, и как бы "проксирует" запросы из хост-машины туда. Простые примеры завелись сразу, но возник нюанс при попытке использовать volumes в контейнере.
Штука в том, что, если вы хотите использовать volumes в вашем проекте (а вы скорее всего хотите), то нужно либо
- Хранить проект(ы) в C:\Users, потому что этот каталог автоматически монтируется в docker-machine
- Либо при старте docker-machine автоматически примонтировать ваш каталог (в моем случае, D:\Projects)
Для интересующихся подробности здесь
https://stackoverflow.com/questions/30040708/how-t... (в принципе, это не очень сложно, однако все равно контр-интуитивно). В общем, volumes на простом примере у меня заработали, хотя и потратил я очередные полдня на это.
Буду настраивать дальше завтра, послезавтра и так до тех пор, пока не заработает. Ну или пока не надоест. Я подумал, если результатом будет успех, то может стоит оформить пост на Хабре?