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