2015-06-04 3 views
3

У меня есть типичная конфигурация компоновки докеров: пользовательский веб-контейнер и контейнер базы данных непосредственно из концентратора докеров. Для разработки мой каталог хоста монтируется в веб-докер, так что мне не нужно перестраивать контейнер каждый раз, когда выполняю небольшие изменения. Веб-сервер является Пассажиром (автономным), обслуживающим рубиновое приложение.Рабочий процесс разработки для docker-compose: запуск контейнера dev-version

Когда я запускаю его, у меня работает моя база данных, работает мой веб-сервис (на порте 3000), все хорошо. Однако, если я сделаю изменения, ничего не изменится, так как веб-сервер (пассажир) должен быть перезапущен. Я хотел бы иметь возможность запускать простой легкий сервер разработки, такой как thin, что я перезапустил бы вручную, когда я сделаю изменение.

Что я пробовал:

  • Запуск нового веб-контейнер (docker-compose run web ...) не предоставляет какой-либо порт для нового контейнера. Таким образом, я не могу подключиться к веб-серверу.
  • Запуск нового контейнера с докерером напрямую (docker run web -p 5000:5000 image_name ...). Мы теряем функциональность компоновки докеров, контейнер не связан с базой данных без ручных привязок.
  • Повторное создание докеры-составления каждый раз (по мере его запуска). Каждый раз, когда моя база данных перезагружается настолько пустым, мне нужно продолжать работать.
  • Использование --service-ports агд: не работают, как порт 3000 уже используется
  • docker exec мой Dev сервер на веб-контейнере: должен работать на другом порту, так что не будет подвергаться воздействию.
  • docker execkill моего веб-сервера: на самом деле это работает (перезапускается), но мне не очень нравится это решение. Во-первых, поскольку сервер все еще является Пассажиром, где я бы предпочел легкий веб-сервер (как thin). Во-вторых, я считаю, что не очень просто подключиться к серверу с помощью docker exec ....
  • Изменение моего Dockerfile для замены пассажира на веб-сервере автоматической перезагрузки dev: мне нравится Dockerfile быть таким же, как на prod-сервере, тестах и ​​dev.

У вас будет чистый и простой способ запуска моего веб-контейнера с открытым портом 5000, на котором я бы включил запуск/перезапуск веб-сервера dev?

+0

Я только что переехал весь исходный код в контейнер данных, который экспортируется с помощью SMB к разработчику. Я написал Docker Shell для этой цели - http://dockershell.io/. – mzedeler

ответ

3

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

В развитии файл докер-Compose можно переопределить CMD от вашего Dockerfile с command, так что вы можете легко использовать bash иметь оболочку или использовать сервер автоматического перезапуску.

Для использования вам пользовательских Докер-Compose файл сделать: docker-compose -f dev.yml ...

И для этого:

Возобновление докер-компоновать каждый раз (как он начинает быстро). Каждый раз, когда моя база данных перезагружается настолько пустым, мне нужно продолжать работать.

Если вы docker-compose up --no-deps web не будет перезапустить ваш дб

+0

Значит, вы говорите, что вы запустили докер, созданный с помощью базы данных, и какой-то dev-сервер, который просто начинает bash? Можете ли вы привести пример этого? Я пытаюсь запустить mongo, elasticsearch и dev-сервер без запуска сервера (просто запустите его после запуска) – FabioCosta

Смежные вопросы