Ок, я вижу плюсы Докера при развертывании приложений. А как это внедрять в разработку?
ВОт я на локальной машине не хочу иметь 100500 зависимостей, поэтому использую Докер. Запустил приложение, оно работает. Но если я вношу какие-то изменения в исходный код - докер этого не видит. И перезапуск контейнера не помогает, нужно пересобирать весь образ.
ВОзникает вопрос - что тогда делать с докером на стадии development?
В идеале - запускать все в контейнерах - МОнгу, Ноду, Редис и тд, разрабатывать приложение таким образом.
Но если я вношу какие-то изменения в исходный код - докер этого не видит. И перезапуск контейнера не помогает, нужно пересобирать весь образ.
А как файлы в докер попадают ? Если пробрасывать папку (volumes), то быть проблем не должно (там какие-то ньюансы с виндой могут быть, но это не точно).
Если же COPY/ADD - то да, надо пересобирать контейнер.
FROM node:latest
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
CMD npm run dev
EXPOSE 7777
ПРосто Hello World на Ноде (правда с nodemon).
ОС Убунту
Надо по другому? Где бы найти туториал. Документация ошеломляющая, читать ее смысла нет. Если я простейшее приложение не могу запустить как надо, то даже смысла не вижу за такое браться не специалисту.
Монтируешь папку с твоими скриптами на хосте внутрь контейнера.
npm install делаешь тоже на хосте (хотя можешь конечно сделать аттач внутрь контейнера и запустить руками там). Нода в контейнере работает просто вместо ноды на хосте.
Для отдачи статики, я держу в докере еще нжинкс, который может проксировать запросы на запущенный вебпак-дев-сервер (если он используется в разработке).
Монгу, редис - как угодно. Для разработки удобно держать в своих контейнерах рядышком, запускать все сразу докер-компоузом.
Монтировать папку - это уже из темы volumes? Я туда не дошел еще, только знакомлюсь. Думал volumes это уже из продвинутого использования, мне бы хотя бы простой сценарий с хеллоу ворлд на эскпрессе. Видимо hot-module replacement это и есть он. Вебпак используется, фронт на Вью. Но сейчас сервер ноды обычный на Экспрессе, поставил nodemon.
А как мне делать npm install на хосте, если там, к примеру Node не установлен? Я же хочу Ноду из контейнера.
wiyod, без volumes (считай без персистентых данных) нет особого смысла всё это использовать. В контейнере не хранятся никакие данные, которые нельзя восстановить при его создании из Dockerfile.
Насчет npm install тут можно как угодно.
Для продакшна - вписывается в докерфайл, для разработки можно залезть в контейнер для выполнения комманд. https://docs.docker.com/engine/reference/commandli... https://docs.docker.com/engine/reference/commandli...
Вообще странный вопрос.
Во время изменения кода docker не нужен.
Т.е. вы пишите как обычно.
А вот для развертывания для тестирования - да.
Создаете новый контейнер с вашим приложением.
Его тестируют, если есть ошибки, то цикл повторяется.
По хорошему вас это не должно особо касаться.
Т.е. ваша задача создать docker-файл, по которому будет собираться docker-контейнер с вашим приложением.
А системы CI/CD сами должны разворачивать на тесте и далее.
В разработке docker-контейнеры нужны только для сторонних сервисов.
Т.е. вы у себя на машине их поднимаете и работаете с ними.
Что за фигня? Я хочу разрабатывать приложение, не устанавливая 100 зависимостей. Это и есть одно из назначений Докера. ПРо деплой я вообще ни слова не пишу, меня это в данный момент не интересует.
Основное назначение Docker это доставка приложения к конечному пользователю с минимальными изменениями.
Грубо говоря если приложение завернули в docker, то менять его не нужно (иногда даже вредно).
Если нужно изменение, то изменили, завернули в Docker отправили дальше для тестирования/развертывания.
wiyod, Ага есть не правильное мнение и мое :-)
Просто когда docker используют по сценарию который я описал, то проблем обычно нет.
Как минимум все success-story рассказывают об этом.
А программировать внутри docker'а не удобно.
Да и весь смысл контейнерезации, что бы не заморачиваться.
Поменялось что-то в приложении, вместо того, чтобы мучиться с изменениями внутри контейнера мы создаем новый контейнер и нафиг выкидываем старый.
Ну не совсем выкидываем а кладем в архив, чтобы если что-то не работает, то опять же не ковыряться внутри контейнера. А достать старый рабочий и его запустить.
Ерлан Ибраев, еще раз. Я же описал сценарий. Мне не нужна Нода, Монга, редис на рабочей машине. Это же окружение не нужно моему дизайнеру. Это все можно использовать в контейнерах, монтируя исходники как вольюм и все будет работать. Вопрос только как это все сделать. Это и был мой вопрос. Деплой меня не интересует сейчас.
Я вас понял. Но.
Docker это не про разработку.
Docker это про деплой.
На крайний случай на машине разработчика разворачиваются контейнеры для сторонних сервисов.
БД, готовое REST-API и пр.
Но если вам нужно что-то менять в docker, то
1) Это делается с большим геморроем
2) Встает вопрос с сохранением измененных данных
Для вашего случая надо в докер контейнере монтировать внешнюю ФС (локальную для вашего кома), в которой производить изменения.
ИМХО поставить node.js гораздо проще, чем пытаться вести разработку внутри контейнера.
Но каждый сам кузнец своего счастья.
Хотите делать странное, то делайте.
Возможно и получиться.