OSX, после этого попытался тот же самый проект сбилдить на Windows. Посыпались ошибки линкера (не установлен драйвер на postgresql), от них мне стало грустно. Я решил пересесть на докер, и билдить всё сразу в нём. Вроде как правильный CI, локально работать в том же самом окружении, что и в продакшне (ну, почти).
Однако тут сразу вылезла проблема: при каждом запуске docker build cargo делает очень длинный и печальный Updating registry. Воспроизводимость без сайд-эффектов это, конечно, хорошо, но ждать билда так долго каждый раз - это уже не очень.
Вопрос: как это можно оптимизировать? Сделать базовый докер-образ, где нужные библиотеки будут уже загружены и откомпилированы? Вообще кто-то реально использует такой паттерн (с билдами внутри докера), или я устраиваю себе ненужный лишний гемморой?
1)примонтировать папку с этим регистри 2) создать свой образ со скачанным регистри
Сейчас скину как надо делать
RUN USER=root cargo new project_dir COPY Cargo.toml Cargo.lock /project_dir/ WORKDIR /project_dir RUN cargo build --release COPY src ./src RUN cargo build --release
делать билд в докерфайле это бред делаешь билд контейнер с компилятором и основными зависимостями (типа openssl и проч) делаешь волум /root/.cargo и target после сборки бинарника собираешь новый контейнер со своим докерфайлом и бинарником в нем
Обсуждают сегодня