amdmax
поэтому в соответсвии с идеологией докера делают так
amdmax
1) 1 приложение, 1 репа, докерфайл, докеригнор-файл внутри. Сборка создает образ с приложением и энтрипойтом для запуска.
2) отдельная репа со скриптами деплоя, которая содержит параметры\связи\логику\порядок запуска для каждого контейнера
Max
@amdmax в вольюмах только код приложение. Приложение написано на интерпритерованном языке. Интерпретатор и веб-сервер подключены как отдельные контейнеры
Evgeny
нет вам смысла докер юзать
Evgeny
докер это не когда мы сделаем 100500 контейнеров которые будут делать то-жа самое что дела.т процессы в хост системе но только с прикольной управлялкой через докер
Max
@amdmax так почему нет смысла? Я буду получать все выше перечислимые преимущества, разве нет? Да и ещё можно добавить 4. Одинаковая среда при разработке и на продакшн
Anonymous
Anonymous
монтируешь код извне = теряется иммутабельность, основное преимущество контейнеров
Aleksandr
проблему опиши еще раз. что у тебя есть, что хочешь получить, что не работает.
Max
@zelenin изначально вопрос был следующий
"Да. У меня есть два репо: 1. my-docker - там файл compose.yml, dockerfile, etc, 2. my-app - там код моего приложения.
я хочу, на серваке запустить приложение. Я делаю, что-то вроде
git clone —recursive my-docker
cd my-docker
docker-compose up
Если я добавлю репо my-app как субмодуль гита, то git clone —recursive скачает его тоже в папку my-docker/my-app.
Вроде все отлично, но есть неудобство. Нужно будет каждый раз коммитить в репо с приложением my-app, а потом в репо my-docker принимать этот коммит.
Может есть какой-то более удобный вариант, кто как делает?"
Но потом перешел в примерно следующее. "Почему нет смысла использовать docker, если работаешь с интерпретируемыми языками и используешь примерно следующий воркфлов http://pastebin.com/THLH8Edw ?"
Anonymous
этот воркфлоу не имеет смысла
Anonymous
сложи докерфайл в основной репо
Aleksandr
во-первых нет смысла в разных репо держать, если билдишь зависимо друг от друга
Aleksandr
amdmax
Anonymous
тебе по третьему кругу объясняют, что ты переусложнил свой вокркфлоу и так никто не делает
Max
"Если все запихнуть в одну репу, то не будет каши? На практике у меня пока что нет опыта, пытаюсь вот свое приложение первый раз докеризировать. Хочу узнать best-practice. Слышал, что разделять вроде правильно. Ибо у меня могут быть (пока такого нет) несколько модулей. Например backend rest, frontend, auth-service. Они могут быть в разных репо.
Да и в my-docker будет много независимых папок вроде данных mysql, redis, elasticsearch, папка с релизами. Они хоть и под игнором, но все же нафиг они там?"
Aleksandr
разделять правильно для образов, используемых отдельно. для локального композ тебе разделять не надо
Max
@zelenin ок, тогда в каком образе хранить compose.yml? Если у меня могут быть несколько реп, как я описал выше
amdmax
"Если все запихнуть в одну репу, то не будет каши? На практике у меня пока что нет опыта, пытаюсь вот свое приложение первый раз докеризировать. Хочу узнать best-practice. Слышал, что разделять вроде правильно. Ибо у меня могут быть (пока такого нет) несколько модулей. Например backend rest, frontend, auth-service. Они могут быть в разных репо.
Да и в my-docker будет много независимых папок вроде данных mysql, redis, elasticsearch, папка с релизами. Они хоть и под игнором, но все же нафиг они там?"
ты все что связано с докером, просто запихнул в одну репу, а это неправильно.
докерфайл, и файлы необходимые для работы приложения(код, возможно настройки какие-то(не пароли) - это одна репа
все что связано с разворачиванием приложения - это вторая
Anonymous
для каждого приложения - свой докерфайл в своем репо
Anonymous
Aleksandr
amdmax
amdmax
в ответ получил от 4 людей одинаковое мнение о том, как надо.
а то, как сделано у тебя - излишне сложно и "так никто не делает" )
Max
Свою ошибку в том, что я складывал docker файлы не в репы проектов, к которым они относятся, я понял. Спасибо.
Max
но почему делать вот так плохо https://www.airpair.com/docker/posts/efficiant-development-workfow-using-git-submodules-and-docker-compose ?)))
Evgeny
Ну, во первых, девелопмент воркфлоу направлен на уменьшение гемороя разраба, к продакшну он напрямую никакого отношения не имеет.
Max
и Amine Mouafik (CTO at Continuous Software Co. Ltd, автор статьи) вроде так делает😊
Evgeny
Ну как минимум они теряют возможность разрабатывать поделчючаемые модули для ноды
Denis
Нада запрегать компанию "best cto" и стать там cto
Evgeny
что неминуемо приводит меня к мысли что чувак не сталкивался с реальностью, или что они реально этим не пользуются, или что они любят боль и страдание
Denis
И потом любой херней людям мозг выносить )
Evgeny
Max
сорри, но мне кажется я ещё больше запутался, чем перед тем как заходил в комнату😊 Если не сложно может тогда кто-то накидать, как должно быть докеризировано приложение и как оно должно подыматься на сервере, если у меня есть 3 репо:
1. restfull-api (nodejs)
2. cabinet (frontend, js)
3. player (js)
Evgeny
апи - микросервисы или один апп?
nvkv
Котаны, а расскажите за безумное.
Смотрите, у меня есть пайплайн по сборке контейнеров с софтом. Где сама сборка софта тоже в контейнере.
Во время сборки, условный maven качает тысячи говна. Можно _на этапе сборки_ примонтировать некую папку в контейнер?
Max
один апп
nvkv
чтобы оно сразу скачивало всё в маунт
Evgeny
Evgeny
Evgeny
но можно это кешировать
nvkv
У меня сейчас base-image всё "закэшировано"
nvkv
но очень утомляет их руками пересобирать
Evgeny
кого? зачем руками?
Max
ну, допустим, они разрабатываются отдельными командами
Max
и лежат в отдельных репо
amdmax
nvkv
Дак вот же, я добрался до момент, когда надо автоматизировать и подумал, может можно проще
nvkv
чем CI с периодами
Evgeny
я не знаю как делается в мавене, но скорее всего они прописаны в файле, да?
Max
никак не взаимодействуют. Допустим если пользователь зайдет по url /cabinet , то попадет в кабинет, а если в /player, то в player)))
Evgeny
А кто занимается проксированием этого?
Denis
Вся проблема с этим понимаем "где хранить докер файлы" от того, что докер дал compose но не объяснил что есть концепция service и application(набор service) или наоборот если хотите.
Denis
точнее объяснил, но не так яро как все остальное )
Evgeny
вот жеж http://collabnix.com/archives/1934
Max
@NordLuf nginx
Evgeny
ну тогда у тебя по контейнеру на кабинет и плеер которые стучатся к апи. 3 контейнера
Anonymous
если они лежат в отдельных репо = разные контейнеры из разных образов
Evgeny
а если в одном - то организоввывать надо не докер
Max
@NordLuf пока понятно. Потом я создам новое репо с docker-compose. docker-compose.yml будет тянуть image-ы из сырцов репо. Верно?
Evgeny
в идеале бы да
Evgeny
в смысле - в идеале он из будет тянуть из регистри
Max
ок, дальше я все это сделал. запустил на серваке docker-compose up. Все работает. Если кто-то сделает коммит в какое-то репо. Как мне потом на сервак задеплоить?
Evgeny
пересобрать образ через CI (в идеале), прогнать тесты, задеплоить блюгрином
amdmax
amdmax
и дергает задачу деплоя )
Anonymous
Max
сорри за нубский вопрос, но что за блюгрин?
Evgeny
http://martinfowler.com/bliki/BlueGreenDeployment.html
Max
но разработчика это же сложнее? Например, каким образом разработчик может делать изменения в ide и смореть результат, который отработал в докере без пересобрания образа?
Evgeny
это уже процесс разработки - и тут схема маунтить папки с хоста вполне себе роляет
Max
понял, спасибо
Max
а зачем тут на 9 шагу прописано volumes: - .:/code, если в dockerfile есть ADD . /code/ ?
https://docs.docker.com/compose/django/
Max
https://docs.docker.com/compose/django/