如何在Docker容器中使用Kotlin应用程序中的Rust应用程序?

2exbekwf  于 2023-03-23  发布在  Docker
关注(0)|答案(1)|浏览(158)

我有一个Rust应用程序(由不同的作者编写),它索引了一些VCF文件。我写了一个Kotlin应用程序,它接受一些VCF文件路径,做一些修改并获取数据-它应该然后理想地调用前面提到的Rust应用程序。
我已经在本地实现了它,在那里我构建了Rust应用程序存储库,因此,我使用DefaultExecutor类从命令行运行Rust应用程序。我想将整个过程移动到Docker容器中。我对如何在容器中捕获Rust应用程序感到困惑。我应该为Kotlin应用程序Dockerfile使用RUN git clone.....来获取代码吗(它是一个私有的repo)。我想知道是否有更好的方法来实现这一点,而不是将源代码拉入容器内。
另外,不确定是否有一种方法可以只在docker容器中获得Rust应用程序可执行文件。这将如何实现?

bmp9r5qi

bmp9r5qi1#

我认为你正在寻找的解决方案被称为多阶段构建。本质上,你会想要创建一个具有“阶段”的Dockerfile。每个阶段将专用于构建的不同部分。最后一个阶段将生成容器使用的映像。
你可能会从一个rust镜像开始,然后git clone你的rust应用,cargo install,然后cargo build它,然后进入构建Kotlin应用的阶段。一旦你进入构建Kotlin镜像的阶段,你就可以复制你构建的rust可执行文件。
official rust image有一个这种用法的示例

FROM rust:1.67 as builder
WORKDIR /usr/src/myapp
COPY . .
RUN cargo install --path .

FROM debian:bullseye-slim
RUN apt-get update && apt-get install -y extra-runtime-dependencies && rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local/cargo/bin/myapp /usr/local/bin/myapp
CMD ["myapp"]

如果你向下滚动一点,还有一个链接,指向关于多阶段构建的更多信息。https://docs.docker.com/develop/develop-images/multistage-build/

相关问题