Есть ли способ сказать Cargo для установки и сборки всех моих зависимостей, но не попытки создать мое приложение?
Я думал, что cargo install будет делать это, но на самом деле все идет так же, как и при создании моего приложения. Я хочу добраться до состояния, в котором cargo build найдет все зависимости, готовые к использованию, но не касаясь каталога /src.
То, что я действительно пытаюсь сделать:
Я пытаюсь создать образ Docker для приложения Rust, где я бы хотел сделать следующие шаги:
Время сборки (docker build.):
- импортировать изображение докера с установленным ржавчиной
- добавьте мои файлы Cargo.toml и Cargo.lock
- загружать и строить все зависимости
- добавить исходный каталог к изображению
- создать исходный код
Время выполнения (docker run...):
- запустить приложение
Я пробовал следующий Dockerfile, но указанный шаг также создает мое приложение (что, конечно же, терпит неудачу, поскольку исходный каталог еще не существует):
FROM jimmycuadra/rust
ADD Cargo.toml /source
ADD Cargo.lock /source
RUN cargo install # <-- failure here
ADD src /source/src
RUN cargo build
ENTRYPOINT cargo run
Причина, по которой я хочу отделить шаг зависимостей установки от создания моего приложения, заключается в том, что если я не изменю зависимости, я хочу, чтобы Docker мог использовать кэшированное изображение со всеми уже установленными и построенными зависимостями. Таким образом, я не могу ADD/src/source/src до тех пор, пока не установит зависимости, поскольку это приведет к аннулированию кэшированного изображения при изменении моего собственного кода.