通过Docker构建时,如何缓存nix派生的依赖项?

时间:2019-12-12 21:34:59

标签: nix

FROM nixos/nix@sha256:af330838e838cedea2355e7ca267280fc9dd68615888f4e20972ec51beb101d8
# FROM nixos/nix:2.3
ADD . /build
WORKDIR /build
RUN nix-build
ENTRYPOINT /build/result/bin/app

我上面有一个非常简单的Dockerfile,可以成功构建我的应用程序。但是,每次我修改应用程序目录(.)中的任何文件时,都必须从头开始重建并下载所有nix存储依赖项。

我可以以某种方式获取下载的存储依赖项的“列表”,然后将其添加到Dockerfile的开头,以便独立地对其进行缓存(以节省时间和带宽为最终目标)吗?

我知道我可以使用本身具有缓存功能的nix来构建此docker映像(以及nix存储),但是我试图在非nix的环境中使其可构建(因此使用docker)。 / p>

1 个答案:

答案 0 :(得分:0)

我建议将源分为两部分。这个想法是创建一个仅包含依赖项的单独的Docker层,该层很少更改:

FROM nixos/nix:2.3
ADD ./default.nix /build
# if you have any other Nix files, put them to ./nix subdirectory
ADD ./nix /build/nix
# now let's download all the dependencies
RUN nix-shell --run exit

# At this point, Docker has cached all the dependencies. We can perform the build
ADD . /build
WORKDIR /build
RUN nix-build
ENTRYPOINT /build/result/bin/app
相关问题