当通过 Docker 构建时,如何缓存 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(。

我可以建议将源代码分成两部分。这个想法是创建一个单独的 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

最新更新