romanpostovalov
@romanpostovalov
Developer

Как удобнее разрабатывать проект с docker?

Я только начинаю работать со стеком angular, node, mongo и Docker, есть проект, который запускается с разными отдельными контейнерами из образов nginx, redis, mongo и npm само приложение на angular, koa c webpack.

Все это вынесено в небольшой скрипт на bash c разными командами

#!/bin/bash

SERVICE_NAME="web_app"

if [[ $# -eq 0 ]]; then
	docker-compose up -d $@
elif [ $1 = 'restart' ]; then
	docker-compose down && docker-compose up -d $@
elif [ $1 = 'dev' ]; then
	docker-compose -f docker-compose.yml -f docker-compose.dev.yml run --rm --service-ports $SERVICE_NAME npm run dev ${@:2}
elif [ $1 = 'test' ]; then
	docker-compose -f docker-compose.yml -f docker-compose.dev.yml run --rm --service-ports $SERVICE_NAME npm run test ${@:2}
elif [ $1 = 'debug' ]; then
	docker-compose -f docker-compose.yml -f docker-compose.dev.yml run --rm --service-ports $SERVICE_NAME npm run dev:debug ${@:2}
elif [ $1 = 'exec' ]; then
	docker-compose -f docker-compose.yml -f docker-compose.dev.yml run --rm --service-ports $SERVICE_NAME ${@:2}
elif [ $1 = 'i' ]; then
	docker-compose -f docker-compose.yml -f docker-compose.dev.yml run --rm --service-ports $SERVICE_NAME npm i --save ${@:2}
elif [ $1 = 'idev' ]; then
	docker-compose -f docker-compose.yml -f docker-compose.dev.yml run --rm --service-ports $SERVICE_NAME npm i --save-dev ${@:2}
elif [ $1 = 'un' ]; then
	docker-compose -f docker-compose.yml -f docker-compose.dev.yml run --rm --service-ports $SERVICE_NAME npm un -save ${@:2}
elif [ $1 = 'build' ]; then
	docker-compose build "${@:2}" --no-cache
elif [ $1 = 'rebuild' ]; then
	docker-compose build --no-cache
	docker-compose -f docker-compose.yml -f docker-compose.dev.yml run $SERVICE_NAME npm i
	docker-compose -f docker-compose.yml -f docker-compose.dev.yml run $SERVICE_NAME npm run build
else
	docker-compose up -d $@
fi


Все это работает и запускается отлично, как локально под Windows 10, так и на сервере Ubuntu 16.04. Я пришел из мира PHP, и привык, что делая изменения, обновляю броузер и сразу вижу изменения или отладка через дебагер IDE.
Но тут я никак не могу понять, как мне настроить обновление кода проекта при разработке в контейнере приложении.

Допустим, поменял я CSS, JS, написал что то в контроллере или модели или шаблоне, я хочу обновить страницу в броузере и сразу увидеть изменения в запущенном контейнере docker, где помещено приложение, а если мне надо добавить модуль через npm, это каждый раз заходить командой exec в контейнер и запускать внутри команду, а после команд docker-compose down или stop сохранятся ли все изменения?

Получается для каждых изменений, мне надо выполнять команду docker-compose down && docker-compose up -d, чтобы увидеть изменения в контейнере и в броузер? Не совсем понятно и как работать с базой данных в контейнере docker, если надо накатить изменения структуры или обратиться через PhpMyAdmin к базе.

Посоветуйте, как это автоматизировать и лучше понять принципы работы. А впереди еще вопросы бекапа, репликации базы данных в Docker.
  • Вопрос задан
  • 1142 просмотра
Пригласить эксперта
Ответы на вопрос 1
Файлы проекта на dev должны маунтиться из вашей хостовой ОС. Тогда все будет на лету обновляться. По поводу рестарта сервера - можно тот же nodemon взять.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы