Docker как эффективная среда разработки Rails
[ ОБНОВЛЕНИЕ]
К сожалению, дорогие коллеги, я сейчас отказался от докеров.
Основные факторы:
- Плохо общий объем производительности (есть некоторые обходные пути, использующие дополнительные инструменты, но это скорее взлом). Это не проблема для тех прекрасных людей, которые используют Linux, хотя!
- Я недооценил некоторые предварительные работы, которые необходимы для того, чтобы удаленная работа выполнялась хорошо с редакторами /IDE. Такие вещи, как linting, предполагают локальную среду выполнения из коробки, и кажется, что наиболее распространенным решением является множество сценариев оболочки bash для делегирования выполнения в контейнер докеров.
Также мы наняли двух парней DevOps, у которых есть довольно много докеров, если они появятся, как (безболезненно!) представит докер в нашей компании для хостинга и разработки, я буду рад пересмотреть эту тему.
[ OLD POST]
Как новая версия, использующая встроенный гипервизор OSX, теперь доступна, я решил попробовать подтолкнуть все мои разработки Ruby/Rails/JS к контейнерам докеров. Я немного поиграл на новой установке El Capitan, пытаясь закрепить несколько частных драгоценных камней, которые у нас есть, и наше приложение для монолитных Rails.
Есть несколько вопросов, я надеялся, что наше сообщество поможет решить проблему.
Цель - все работает, и на хосте есть только iTerm, git, Sublime, SourceTree и Docker (ничего не вырезано на камне, если какая-то дополнительная зависимость (-y) может улучшить/сделать рабочий процесс значительно проще, я с удовольствием рассмотрю варианты)
Требования
- Существует множество услуг (EngineYard, ElastiBeanstalk, Github и т.д.), которые требуют, чтобы мои ключи функционировали правильно, я должен иметь возможность повторно использовать те, которые находятся на моей главной машине.
- Повторное использование установленных RubyGems во всех контейнерах приложений Ruby было бы неплохо. В основном файл docker container/docker-compose устанавливается таким образом, что он монтирует тот же каталог, который будет
GEM_PATH
, bundler
в каждом контейнере будет устанавливать там драгоценные камни. Приложению bundler
следует позаботиться о загрузке правильных версий.
- Я должен иметь возможность легко отлаживать код - помещать точки останова и взаимодействовать с отладчиком, поскольку он будет выполняться локально
- Он должен поддерживать цикл TDD - я меняю файл, он попадает в процесс
guard
в контейнере, и соответствующие тесты выполняются
- При выполнении тестов Cucumber/Selenium я должен уметь видеть, что происходит в браузерах. (Насколько я понимаю, это опции - подключение через VNC к буферу виртуального фрейма или запуск локального сервера X. Я бы предпочел варианты, которые связаны с меньшими зависимостями со стороны хоста).
Вопросы
- Док-ронирование существующих приложений относительно легко в наши дни, как вы, хорошие люди, обрабатываете создание/загрузку новых проектов? Общий контейнер разработчика, который имеет обычные зависимости?
- Возможно ли настроить то, что контейнер "продолжает работать" более или менее, чем виртуальная машина? (Это может решить множество моих требований - запустить
guard
, упростить отладку, запустить произвольные процессы в одном запуске)
- Я намерен использовать докер для упаковки нашего приложения для целей CI. Это означает, что для разных сред могут быть несколько разные зависимости, а также смонтированные тома будут отличаться (вероятно, для контейнера CI этого не будет). Должна ли она решаться как другая конфигурация в
docker-compose.yml
(томах) или определена внутри другого файла докеров, который наследуется от базового?
Другие мысли
Я также прекрасно разбираюсь в коммерческом или некоммерческом инструменте, который обертывает/связывает описанную инструментальную форму. До сих пор я нашел вещь под названием http://wercker.com), что мне не нравится в этом, похоже, это требует от вас чтобы настроить dev env так или иначе, что убивает цель всего усилия.
Не стесняйтесь опросить этот вопрос, если он был опубликован раньше и четко ответил. С другой стороны, я был бы рад, если эта тема будет давать руководства, ссылки, предложения, чтобы сделать это гладко, я уверен, что в настоящее время это интересует довольно много разработчиков.
Ответы
Ответ 1
Рассмотрим orats (улокальные шаблоны приложений rails):
Цель состоит в том, чтобы предоставить вам отличное базовое приложение, которое можно использовать в следующем проекте Rails.
и
Также используется Docker, чтобы ваше приложение можно запускать на любой основной платформе - даже без необходимости установки Ruby.
К другим вашим требованиям:
-
мои ключи... Я должен иметь возможность повторно использовать те, которые находятся на моем хосте машина
Укажите ключи в docker-compose.yml
, но опустить значение.
-
установка точек останова и взаимодействие с отладчиком
При запуске службы вместо docker-compose up
используйте docker-compose run --service-ports
. Это позволит, например, binding.pry
для работы.
-
При выполнении тестов Cucumber/Selenium я должен уметь видеть, что происходит в браузерах.
Это сложно. Для решения проблемы используйте save_screenshot
и (важную часть) сохраните его в каталоге установлен на том на хосте Docker. Откройте этот каталог на хосте, и вы увидите скриншот обновления.
Ответ 2
некоторые примечания об использовании докера для разработки:
- запустите команду bash внутри докера и работайте как в VM, ссылка
- отобразить порт контейнера с хост-машиной и использовать браузер ссылка
- файлы карт ссылка
- .env метод настройки переменных позволяет использовать докер в любой среде, включая CI ссылка
- bash скрипты и имена контейнеров могут помочь автоматизировать задачи link