George
Если переходим к следующему RUN - это эквивалентно выключению контейнера
George
И созданию его заново
George
Соответственно, среда сбрасывается.
George
Какие решения ? Да все плохо. В конце-концов, можно все собирать или снаружи докера, а внутрь передавать окончательный артефакт
George
Или использовать multistage dockerfile
George
Вот 😭
Alexandra
George
В результате конечный образ с минимумом слоев и минимального размера. Плюс докер использует свой кэш для сборок
Alexandra
аааа, погуглю
Alexandra
про кэш да, удобно и хорошо
George
Ну, к сожалению - это не панацея
George
Докер сравнивает только по хэш сумме команды из докерфайла и зависимых файлпх
George
Т.е. если в докерфайле что-то типа RUN wget http://very-often.changing.org, то нужно извращаться, чтобы докер понял, что команда возвращает новый результат (((
Alexandra
угу, эт я знаю
Alexandra
так, ну раз так, то буду советоваться сейчас, как сделать оптимальней
George
Вообще выглядит, что докер лучше использовать для окончательной сборки ((( а не для промежуточной
Alexandra
у меня есть мультистейджевый проект, который требует:
1. пулл первого репозитория
2. сборки репозитория (с++ проект)
3. пулл второго репозитория, который должен иметь доступ к первому, он питоновский + всякие питонозависимости
4. пулл третьего репозитория, который должен уметь общаться с первым и вторым, и третий репозиторий это с++ и питон, и вот с++ часть собирается мейком
внимание, вопрос -- как лучше это все сделать?
George
Я бы намонстрячил пайплайн в гитлабе 👍 но тут вопрос в том - насколько эту конструкцию нужно часто собирать на машине разраба. И насколько она... Инвазивна - какает всякими непонятными зависимостями в систему
George
Тот же питон относительно норм живёт в venv, если не ставить вообще какие-то дикие пакеты
Alexandra
в гитлабе не пойдет, надо именно докер-образ, собрать надо один раз и потом делать его используемым на разных машинах
Alexandra
она инвазивна
Alexandra
и зачем, кстати, венв, если все делается внутри контейнера и будет существовать только один проект питоновский внутри него
Alexandra
просто насколько я знаю, венв не нужен, если делается докеризация, типа вся идеология при этом рушится
George
Alexandra
ну, мне на хост-системе не нужно ничего, кроме образа, чтобы крутился себе
George
Я поэтому и сказал, что есть две задачи:
1. Собрать нечто, что пойдет тиражироваться. Пускай артефактом и будет докер образ
2. Собрать среду для разработчика, чтобы он локально запускал сборку и мог быстро проводить эксперименты-разработку
Alexandra
сборку запускать нужно как можно реже, надо просто делать run и пользоваться
Alexandra
потому что то, что собирается - это сервер, все изменения будут далее со стороны клиента, который обращается к серверу
Alexandra
так что приоритет у первой задачи
George
Сложно сказать без конкретики
George
Я даже более скажу - можно построить пайплайн пакетирования всего куска сервера в deb файл, сохраняем его как артефакт, потом в чистом докере делаем apt install :-)
Andrey
dpkg -i скорее а так да идея хорошая
George
Т.е. как бы задача то и не про докер на самом деле. ) И, да, вариант с опакечиванием я делал. Просто обычно проще сделать все в рамках докера, чтобы не разбираться с дополнительными тулзами. Нынче народ ленивый и делать именно, что правильный менеджмент зависимостей, сложно
Alexandra
Andrey
Ну гитлаб , юзай ,а так запутаешься
Alexandra
а почему гитлаб а не докер?
Andrey
стой..гитла не заменяет докер
Alexandra
ну вот и я не понимаю к чему это сейчас)
Alexandra
сборка у меня идет на серваке, который под эти задачи выделен, читаю логи себе
George
Можно сборку делать в гитлабе (чтоб удобно). А конечный артефакт будет докер образ
George
Который будете тиражировать, раздавать разрабам и пр
Andrey
Alexandra
хм
George
Потому что можно построить самый удобный пайплайн сборки, не замыкаясь на ограничениях докера
Alexandra
ну я просто со стороны разраба сейчас выполняю не совсем свою задачу, вот и пытаюсь разобраться, какие существуют лучшие практики
George
Да, гитлаб пайплайн будет бежать в тех же контейнерах, но это другой уровень абстракции ) с плюшками типа логирование, кэширование, пайплайн как код и пр
Alexandra
так у меня и так все кэшируется же
George
Т.е. докер - это средство изоляции, средство доставки кода. А не условная замена make :-)
Alexandra
и логгирую все происходящее
George
А в гитлабе можно автомагически выкачать три репозитория в одно место с нужными commit в каждом
George
Повторюсь, это просто два разных инструмента.
Alexandra
Alexandra
Alexandra
касательно своей задачи
Alexandra
в целом - понимаю, зачем, но не понимаю, зачем делать это сейчас
Andrey
Гит лаб решит эти задачи
George
Andrey
за тебя
Alexandra
потому что там легаси-код который вряд ли будет меняться
Alexandra
еще очень долго
Alexandra
Alexandra
Andrey
ну да
Это криво , а гитлабе это не нужны эти грабли
Alexandra
ну на текущий момент там не так много специфики, которая должна быть обозначена. но посмотрю, спасибо
George
Ну, тогда мультистейдж твой вариант 🤷♂
Alexandra
тогда мультистейдж, видимо
George
Alexandra
Alexandra
спасибо
Mentat
к слову, про мультистейдж, он по прежнему не умеет в зависимости образов, будет собирать сверху вниз, пока не дойдет до указанного в таргете?