George
Если переходим к следующему RUN - это эквивалентно выключению контейнера
George
И созданию его заново
George
Соответственно, среда сбрасывается.
George
Какие решения ? Да все плохо. В конце-концов, можно все собирать или снаружи докера, а внутрь передавать окончательный артефакт
George
Или использовать multistage dockerfile
George
Вот 😭
Alexandra
Или использовать multistage dockerfile
так, я недавно во всей теме докеризации, можно подробней об этом?
George
так, я недавно во всей теме докеризации, можно подробней об этом?
Ну, это способ написания докерфайла вида FROM ubuntu as base Blablbla # здесь какая-то сборка со стопицот слоев FROM scratch as final COPY --from=base /artifact /opt # здесь перекидывает между разными образами нужные файлы # Профит !
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
Сложно сказать без конкретики
Anonymous
в гитлабе не пойдет, надо именно докер-образ, собрать надо один раз и потом делать его используемым на разных машинах
Один образ нужен? А правильно понимаю, что в один образ хотите запихнуть 3 разных собранных проекта, судя из сообщений выше?
George
Я даже более скажу - можно построить пайплайн пакетирования всего куска сервера в deb файл, сохраняем его как артефакт, потом в чистом докере делаем apt install :-)
Andrey
dpkg -i скорее а так да идея хорошая
George
Т.е. как бы задача то и не про докер на самом деле. ) И, да, вариант с опакечиванием я делал. Просто обычно проще сделать все в рамках докера, чтобы не разбираться с дополнительными тулзами. Нынче народ ленивый и делать именно, что правильный менеджмент зависимостей, сложно
Andrey
Ну гитлаб , юзай ,а так запутаешься
Alexandra
а почему гитлаб а не докер?
Andrey
стой..гитла не заменяет докер
Alexandra
ну вот и я не понимаю к чему это сейчас)
Alexandra
сборка у меня идет на серваке, который под эти задачи выделен, читаю логи себе
George
а почему гитлаб а не докер?
Они не противоречат друг другу
George
Можно сборку делать в гитлабе (чтоб удобно). А конечный артефакт будет докер образ
George
Который будете тиражировать, раздавать разрабам и пр
Alexandra
Они не противоречат друг другу
не, я понимаю, но не понимаю, зачем он сейчас рекомендуетс]
Alexandra
хм
George
Потому что можно построить самый удобный пайплайн сборки, не замыкаясь на ограничениях докера
Alexandra
ну я просто со стороны разраба сейчас выполняю не совсем свою задачу, вот и пытаюсь разобраться, какие существуют лучшие практики
George
Да, гитлаб пайплайн будет бежать в тех же контейнерах, но это другой уровень абстракции ) с плюшками типа логирование, кэширование, пайплайн как код и пр
Alexandra
так у меня и так все кэшируется же
George
Т.е. докер - это средство изоляции, средство доставки кода. А не условная замена make :-)
Alexandra
и логгирую все происходящее
George
так у меня и так все кэшируется же
С ограничениями, о которых я выше написал. А ещё докер сам не умеет ходить по гит репам и собирать их )
George
А в гитлабе можно автомагически выкачать три репозитория в одно место с нужными commit в каждом
George
Повторюсь, это просто два разных инструмента.
Alexandra
Повторюсь, это просто два разных инструмента.
понимаю, да, пытаюсь понять преимущества
Alexandra
касательно своей задачи
Alexandra
в целом - понимаю, зачем, но не понимаю, зачем делать это сейчас
Andrey
и логгирую все происходящее
у тебя сколько реп для этого проекта ? как ты версионируешь ? Как откатываешься ? где хранишь логи?
Andrey
Гит лаб решит эти задачи
Andrey
за тебя
Alexandra
у тебя сколько реп для этого проекта ? как ты версионируешь ? Как откатываешься ? где хранишь логи?
3 репы, используется один и тот же коммит / специфическая ветка, логи храню в отдельном файле, версионирование сейчас неважно
Alexandra
потому что там легаси-код который вряд ли будет меняться
Alexandra
еще очень долго
Alexandra
George
почему не умеет, я с нужными коммитами все вытащила
Ага, вручную в докерфайле типа RUN git clone blablbla && cd blablabla && git checkout something
Andrey
ну да
Это криво , а гитлабе это не нужны эти грабли
Alexandra
ну на текущий момент там не так много специфики, которая должна быть обозначена. но посмотрю, спасибо
George
Ну, тогда мультистейдж твой вариант 🤷‍♂
Alexandra
тогда мультистейдж, видимо
Alexandra
👆
дада, я читаю уже
Alexandra
спасибо
Mentat
к слову, про мультистейдж, он по прежнему не умеет в зависимости образов, будет собирать сверху вниз, пока не дойдет до указанного в таргете?