Aleksandr
https://habrahabr.ru/company/jugru/blog/311732/
amdmax
кто-нибудь юзает докер на CentOS7?
какой Storage Driver используете?
Aleksey
там автоматом встает devicemapper
Aleksey
не худший выбор
amdmax
🏳️ Phil
Aleksey
фиг знает
amdmax
сборка nodejs приложения занимала до 45 минут.
Aleksey
ну ок
amdmax
файл 10 мегабайт внутри контейнера 10-15 минут копировался.
Aleksey
как мне увидеть что он плохой ?
amdmax
на overlayfs сборка падала частенько, например при распаковке tar'а
Evgeny
Всем спрашивающим про сторадждрайверы:
https://integratedcode.us/2016/08/30/storage-drivers-in-docker-a-deep-dive/
amdmax
Max
Здравствуйте. Как мне сделать в docker-compose, чтобы когда приложение на локалке, то был открыт 3306 порт, а когда на продакшн, то порт закрыт? Определение локалка/прод может происходить по переменной окружения. Можно ли в docker-compose определить конструкцию if ?
Anton
https://docs.docker.com/compose/extends/
Evgeny
графиками чего?
amdmax
производительности наверно )
amdmax
я так понимаю, все проблемы из-за того, что РедХат против aufs? )
Max
@anton44eg спасибо, то что нужно!
Max
А кто как свой код приложения связывает с репо, где конфиг докера? С ходу приходит вариант добавить репо с прижением как субмодуль гита , но насколько это правильно? Или лучше вообще не связывать репо с конфигом докера и репо приложения?
Evgeny
можно чуть более развернуто или чуть более понятными словами?
amdmax
Max
Да. У меня есть два репо: 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 принимать этот коммит.
Может есть какой-то более удобный вариант, кто как делает?
Evgeny
А почему есть разделение на два репа? Почему не делать все в одном?
amdmax
Да. У меня есть два репо: 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 принимать этот коммит.
Может есть какой-то более удобный вариант, кто как делает?
если ты их уже разъединил, то зачем объединять?
если 2 репы юзать
git clone repo1 repo1
git clone repo2 repo2
и юзать относительные пути.
либо все запихнуть в 1 репу.
Max
Dockerfile положить в корень репы?
Если все запихнуть в одну репу, то не будет каши? На практике у меня пока что нет опыта, пытаюсь вот свое приложение первый раз докеризировать. Хочу узнать best-practice. Слышал, что разделять вроде правильно. Ибо у меня могут быть (пока такого нет) несколько модулей. Например backend rest, frontend, auth-service. Они могут быть в разных репо.
Да и в my-docker будет много независимых папок вроде данных mysql, redis, elasticsearch, папка с релизами. Они хоть и под игнором, но все же нафиг они там?
Виталий
Делаем базовый образ
Виталий
В зависимом проекте пишем from:базовый образ
Bruno
я за разнесение реп на разные имаджи, как ты и описал
amdmax
Если все запихнуть в одну репу, то не будет каши? На практике у меня пока что нет опыта, пытаюсь вот свое приложение первый раз докеризировать. Хочу узнать best-practice. Слышал, что разделять вроде правильно. Ибо у меня могут быть (пока такого нет) несколько модулей. Например backend rest, frontend, auth-service. Они могут быть в разных репо.
Да и в my-docker будет много независимых папок вроде данных mysql, redis, elasticsearch, папка с релизами. Они хоть и под игнором, но все же нафиг они там?
несколько модулей(ИМХО) подразумевает несколько образов.
для каждого образа - будет свой докерфайл.
а вот для организации взаимодействия этих образов - нужен будет docker-compose, либо(так как он по функционалу не оч) надо будет использовать что-нить другое
Bruno
но вообще жил и с одним репо, было тоже норм, как ни странно
Bruno
хоть и менее удобно
Max
@mkn8rd за разделение на образы? Или ты имел ввиду разделения на репо?
Max
Bruno
на образы в любом случае придётся делить. Я имел в виду репы
Bruno
ты же не собираешься запихнуть бэк и фронт в один образ как минимум
Max
а почему в один образ нет? Они же будут в разных контейнерах?
Max
@mkn8rd если разделяешь репы, то как потом их связываешь? Субмодулями гита?
Anonymous
Bruno
а зачем их связывать?
amdmax
Max
@mkn8rd ну потом же нужно добавить код из репо(который лежит на хостмашине) в контейнер
Anonymous
это очень странно, потому что это слишком большая разница
Max
да, я это знаю. Я этому вроде не противоречил. Я спрашивал, зачем разделять все на отдельные имеджи. Может я что-то не понял, но я пока не создаю образы, я просто все контейнеры прописываю в одном docker compose файле.
Bruno
Bruno
я не очень тебя понимаю, видимо
amdmax
Evgeny
для каждого образа свой докерфайл в его репе.
Evgeny
для докер-композа отдельная репа со всем связанным с деплоем
Evgeny
если нет ci и билдится все на лету - можно дергать композ как часть sh скрипта
Max
Я пока не создаю image-и поэтому. Не хочу добавлять на докерхаб, а свой хаб пока не поднял. Поэтому в композере у меня будет примерно следующее
services:
frontend:
build: ./frontend
volumes:
- ./frontend:/app
container_name: frontend
backend:
build: ./backend
volumes:
- ./backend:/app
container_name: backend
amdmax
amdmax
зачем тебе докер в таком случае??
amdmax
1) 1 приложение, 1 репа, докерфайл, докеригнор-файл внутри. Сборка создает образ с приложением и энтрипойтом для запуска.
2) отдельная репа со скриптами деплоя, которая содержит параметры\связи\логику\порядок запуска для каждого контейнера
Evgeny
я вот не знаю умеет ли делать это композ, но докер умеет делать билд сразу с гит сырца
Max
@amdmax а что не так? Там интерпритируемые языки
Max
как нужно?
Evgeny
сразу в имадж вбилдить
Max
нужно будет пересобирать имдж каждый раз, нет? А так просто сделал git pull и пересобрал приложение
Anton
так а версионирование?
Max
да и код же должен идти отдельно от image-а?
Evgeny
amdmax
Anton
> @skmax1
да и код же должен идти отдельно от image-а?
нет
Max
вот примерно, то что я описываю https://www.airpair.com/docker/posts/efficiant-development-workfow-using-git-submodules-and-docker-compose
Max
вот его compose
api:
image: dockerfile/nodejs
volumes:
- ./api/:/app/
working_dir: /app/
command: npm start
ports:
- "8000:8000"
links:
- database
database:
image: postgresql
dashboard:
image: dockerfile/nodejs
volumes:
- ./dashboard/:/app/
working_dir: /app/
command: npm start
ports:
- "8001:8001"
links:
- api
cpanel:
image: dockerfile/nodejs
volumes:
- ./api/:/app/
working_dir: /app/
command: npm start
ports:
- "8002:8002"
links:
- api
amdmax
Max
в чем тут проблема? Почему так не нужно делать?
Aleksandr
Max
@zelenin почему workflow из этой статьи не нужно использовать ? https://www.airpair.com/docker/posts/efficiant-development-workfow-using-git-submodules-and-docker-compose
Max
чуть выше скинул docker-compose из статьи
amdmax
докер нужен для нескольких вещей:
1. изоляция сред приложений от хостовой системы
2. быстрый деплой
3. масштабируемость и прочая маркетинговая чушь.
если у тебя приложение лежит на хостовой системе в отдельной папочке и доступно по отдельному порту - докер не нужен.
у докера приложение должно быть внутри образа, для того, чтобы запустив образ на любой другой машине, ты получил тот же результат в том же самом(оттестированном?!) приложении