2016-01-18 3 views
6

Я работаю над сервисом в системе, организованной с помощью компоновки докеров. Служба написана на скомпилированном языке, и мне нужно перестроить ее, когда я внес изменения. Я пытаюсь найти лучший способ быстро итерации изменений.Рабочий процесс разработки докеры для скомпилированных компонентов в настройке компоновки докеров

Я пробовал 2 'workflows', оба полагаются на связь с исходным каталогом через volume:, чтобы получить последний источник.

А.
  • Всплывающие все опорные контейнеры с docker-compose up -d
  • остановки контейнера для службы в стадии разработки
  • Выполнить новый контейнер с использованием изображения docker-compose run --name SERVICE --rm SERVICE /bin/bash
  • В этом контейнере запуска компиляции и запуска приложение в открытом порту.
  • Перезапустите, прекратив работу, а затем перестройте.
B.
  • (требуется Dockerfile CMD строить, а затем запустить службу)
  • Остановите службу: docker-compose kill SERVICE
  • Перезапустите службу docker-compose up -d --no-deps SERVICE

Проблема заключается в том как занять слишком много времени, чтобы перезагрузить против перезапуска службы локально (работает на моем ноутбуке независимо o f докер). Эта настройка выглядит нормально с интерпретируемыми языками, которые могут перезагружать измененные файлы, но я еще не нашел подходящую быструю систему для скомпилированных языковых служб.

+1

Доккер работает на вашем ноутбуке или удаленно? Подумайте, что вы имеете в виду «против перезапуска службы локально». Что заставляет его «слишком долго перезапускать»? Скомпилируется медленнее? Начиная? – thaJeztah

+0

Я попытался сделать это более ясным в вопросе. Докер работает через докер-машину. Когда я говорю «работает локально», я имею в виду создание и запуск службы без использования докеров. Это вариант, но это значит, что мне нужно изменить такие вещи, как URL-адрес базы данных и т. Д. –

+0

А как мне кажется, в первую очередь, совместное использование файлов между хостом и виртуальной виртуальной машиной (это красиво) не очень эффективный; это ограничение использования файлов VirtualBox. Во-вторых, VM не может быть настроена для максимальной производительности, что может повлиять на продолжительность компиляции. Вы пытались, например? увеличить объем памяти и/или количество процессоров для виртуальной машины? – thaJeztah

ответ

3

Я хотел бы сделать это:

Run docker-compose up но:

  • использовать объем узла для каталога скомпилированного бинарного вместо источника
  • использовать entrypoint, что делает что-то вроде

entrypoint.sh:

trap "pkill -f the_binary_name" SIGHUP 
trap "exit" SIGTERM 

while [[ 1 ]]; do 
    ./the_binary_name; 
done 

Напишите сценарий, чтобы восстановить бинарный файл и скопировать его в объем используемого сервиса в docker-compose.yml:

# Run a container to compile and build the binary 
docker run -ti -v $SOURCE:/path -v $DEST:/target some_image build_the_binary 

# copy it to the host volume directory 
copy $DEST/... /volume/shared/with/running/container 

# signal the container 
docker kill -s SIGHUP container_name 

Так компилировать двоичный код вы используете этот скрипт, который монтирует источник и в качестве томов. Вы можете пропустить шаг копирования, если $DEST совпадает с каталогом томов, совместно используемым контейнером «запустить». Наконец, скрипт будет сигнализировать запущенному контейнеру, чтобы он убил старый процесс (который запускал старый двоичный файл) и начал новый.

Если общий том делает компиляцию в контейнере слишком медленным, вы также можете запустить компиляцию на хосте и просто сделать копию и сигнализацию, чтобы она выполнялась в контейнере.

Это решение обладает дополнительным преимуществом, при котором вашему образцу «runtime» не нужны все зависимости dev. Это может быть очень худое изображение с простой базой ОС.

+1

Привет, спасибо за это. Это объяснило многое. Мне удалось заставить его работать так, как вы наброска здесь. Одно отличие, я не смог заставить 'docker kill -s SIGHUP' работать, вместо этого я использую' docker exec web pkill -f container_name'. Это может быть не так быстро, но переход на этот метод значительно сократил время для одной итерации. Благодарю. –

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

  • Нет связанных вопросов^_^