Aleksandr
https://habrahabr.ru/company/jugru/blog/311732/
amdmax
кто-нибудь юзает докер на CentOS7? какой Storage Driver используете?
Aleksey
там автоматом встает devicemapper
Aleksey
не худший выбор
amdmax
там автоматом встает devicemapper
только тормозной очень
🏳️ Phil
Aleksey
фиг знает
amdmax
сборка nodejs приложения занимала до 45 минут.
🏳️ Phil
фиг знает
нет. даже по доке
Aleksey
ну ок
amdmax
файл 10 мегабайт внутри контейнера 10-15 минут копировался.
Aleksey
как мне увидеть что он плохой ?
amdmax
на overlayfs сборка падала частенько, например при распаковке tar'а
Evgeny
Всем спрашивающим про сторадждрайверы: https://integratedcode.us/2016/08/30/storage-drivers-in-docker-a-deep-dive/
Max
Здравствуйте. Как мне сделать в docker-compose, чтобы когда приложение на локалке, то был открыт 3306 порт, а когда на продакшн, то порт закрыт? Определение локалка/прод может происходить по переменной окружения. Можно ли в docker-compose определить конструкцию if ?
Anton
https://docs.docker.com/compose/extends/
Andrey
Всем спрашивающим про сторадждрайверы: https://integratedcode.us/2016/08/30/storage-drivers-in-docker-a-deep-dive/
Картинки и блаблабла конечно хорошо, тем более свеженькое (если правда не перепечатка :) хотелось бы с графиками такое
Evgeny
графиками чего?
amdmax
производительности наверно )
amdmax
я так понимаю, все проблемы из-за того, что РедХат против aufs? )
Max
@anton44eg спасибо, то что нужно!
Max
А кто как свой код приложения связывает с репо, где конфиг докера? С ходу приходит вариант добавить репо с прижением как субмодуль гита , но насколько это правильно? Или лучше вообще не связывать репо с конфигом докера и репо приложения?
Evgeny
можно чуть более развернуто или чуть более понятными словами?
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
А почему есть разделение на два репа? Почему не делать все в одном?
Max
Dockerfile положить в корень репы?
Если все запихнуть в одну репу, то не будет каши? На практике у меня пока что нет опыта, пытаюсь вот свое приложение первый раз докеризировать. Хочу узнать best-practice. Слышал, что разделять вроде правильно. Ибо у меня могут быть (пока такого нет) несколько модулей. Например backend rest, frontend, auth-service. Они могут быть в разных репо. Да и в my-docker будет много независимых папок вроде данных mysql, redis, elasticsearch, папка с релизами. Они хоть и под игнором, но все же нафиг они там?
Виталий
Делаем базовый образ
Виталий
В зависимом проекте пишем from:базовый образ
Bruno
я за разнесение реп на разные имаджи, как ты и описал
Bruno
но вообще жил и с одним репо, было тоже норм, как ни странно
Bruno
хоть и менее удобно
Max
@mkn8rd за разделение на образы? Или ты имел ввиду разделения на репо?
Max
В зависимом проекте пишем from:базовый образ
а что будет содержать базовый образ?
Bruno
на образы в любом случае придётся делить. Я имел в виду репы
Bruno
ты же не собираешься запихнуть бэк и фронт в один образ как минимум
Max
а почему в один образ нет? Они же будут в разных контейнерах?
amdmax
а что будет содержать базовый образ?
базовый образ будет содержать зависимости, необходимые для работы всех модулей.
Max
@mkn8rd если разделяешь репы, то как потом их связываешь? Субмодулями гита?
Anonymous
сборка nodejs приложения занимала до 45 минут.
ну это явно не проблемы storage драйвера
Bruno
а зачем их связывать?
amdmax
ну это явно не проблемы storage драйвера
его. тот же проект на aufs\overlay собирался около 1,5 минут
Max
@mkn8rd ну потом же нужно добавить код из репо(который лежит на хостмашине) в контейнер
Anonymous
это очень странно, потому что это слишком большая разница
amdmax
а почему в один образ нет? Они же будут в разных контейнерах?
По идеологии docker каждый сервис должен запускаться в своем контейнере.(с)
Max
да, я это знаю. Я этому вроде не противоречил. Я спрашивал, зачем разделять все на отдельные имеджи. Может я что-то не понял, но я пока не создаю образы, я просто все контейнеры прописываю в одном docker compose файле.
Bruno
@mkn8rd ну потом же нужно добавить код из репо(который лежит на хостмашине) в контейнер
ээ, так билдь образ с кодом его репы. Зачем тебе код прочих реп для этого?..
Bruno
я не очень тебя понимаю, видимо
amdmax
да, я это знаю. Я этому вроде не противоречил. Я спрашивал, зачем разделять все на отдельные имеджи. Может я что-то не понял, но я пока не создаю образы, я просто все контейнеры прописываю в одном docker compose файле.
получается что у тебя куча приложений в одном образе, ты пытаешься запустить контейнер с этого образа, передавая параметр, по которому какой-то скрипт внутри контейнера определяет, что именно ему запускать?
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
зачем тебе докер в таком случае??
Max
для докер-композа отдельная репа со всем связанным с деплоем
Да, но вопрос как мне получать код из других реп? В sh скрипте делать git clone?
amdmax
1) 1 приложение, 1 репа, докерфайл, докеригнор-файл внутри. Сборка создает образ с приложением и энтрипойтом для запуска. 2) отдельная репа со скриптами деплоя, которая содержит параметры\связи\логику\порядок запуска для каждого контейнера
Evgeny
я вот не знаю умеет ли делать это композ, но докер умеет делать билд сразу с гит сырца
Max
@amdmax а что не так? Там интерпритируемые языки
Max
как нужно?
Evgeny
сразу в имадж вбилдить
Max
нужно будет пересобирать имдж каждый раз, нет? А так просто сделал git pull и пересобрал приложение
Anton
так а версионирование?
Max
да и код же должен идти отдельно от image-а?
amdmax
нужно будет пересобирать имдж каждый раз, нет? А так просто сделал git pull и пересобрал приложение
докер в этом случае не нужен. запускай просто модули рядом в каталогах на разных портах и будет тебе счастье )
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
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. масштабируемость и прочая маркетинговая чушь. если у тебя приложение лежит на хостовой системе в отдельной папочке и доступно по отдельному порту - докер не нужен. у докера приложение должно быть внутри образа, для того, чтобы запустив образ на любой другой машине, ты получил тот же результат в том же самом(оттестированном?!) приложении