Есть ли способ сказать 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
до тех пор, пока не установит зависимости, поскольку это приведет к аннулированию кэшированного изображения при изменении моего собственного кода.