我以为
cargo install
会这样做,但它实际上也会构建我的应用程序。我想达到这样的状态:cargo build
会发现所有的依赖项都已准备好使用,但不触及/src
目录。
我真正想要实现的目标是:
我正在尝试为Rust应用程序构建Docker镜像,我希望执行以下步骤:
构建时间(docker build .):
1.导入已安装了Rust工具的docker镜像 2.添加我的Cargo.toml和Cargo.lock文件 3.下载并构建所有依赖项 4.将我的源目录添加到镜像中 5.构建我的源代码
运行时间(docker run ...):
1.运行应用程序
我尝试了以下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
,因为当我更改自己的代码时,这会使缓存的映像无效。
target
子目录,但是在执行cargo build
之后,您总可以将其删除。 - Matthieu M.cargo vendor
? - Chris Emersoncargo vendor
在我的镜像上正确地安装和运行,但是我注意到依赖项已经被下载但并未被构建。我正在研究是否可以预编译它们... - Tomas Aschan