如何预安装堆栈依赖项,以减少堆栈构建时间?

Chr*_*ski 2 haskell-stack

stack build我正在从 Haskell 应用程序构建 docker 映像,并在容器内执行。

因为stack build是从“新鲜/普通”docker 映像开始 - 所有库都需要安装/拉取。


有没有办法可以预安装这些库依赖项?为了减少 docker 镜像构建时间的最终目标 ( stack build)。我还希望能够稍后“添加”额外的依赖项,而不必再次stack build从头开始。

一个可能的解决方案:

我尝试了一系列:

RUN stack install --only-dependencies --resolver="lts-14.27" aeson
RUN stack install --only-dependencies --resolver="lts-14.27" aeson-pretty
RUN stack install --only-dependencies --resolver="lts-14.27" ansi-terminal
RUN stack install --only-dependencies --resolver="lts-14.27" ansi-wl-pprint
RUN stack install --only-dependencies --resolver="lts-14.27" appar
RUN stack install --only-dependencies --resolver="lts-14.27" array
RUN stack install --only-dependencies --resolver="lts-14.27" asn1-encoding
RUN stack install --only-dependencies --resolver="lts-14.27" asn1-parse
RUN stack install --only-dependencies --resolver="lts-14.27" asn1-types
RUN stack install --only-dependencies --resolver="lts-14.27" async
RUN stack install --only-dependencies --resolver="lts-14.27" attoparsec
RUN stack install --only-dependencies --resolver="lts-14.27" authenticate-oauth
RUN stack install --only-dependencies --resolver="lts-14.27" auto-update
RUN stack install --only-dependencies --resolver="lts-14.27" base
RUN stack install --only-dependencies --resolver="lts-14.27" base-compat
RUN stack install --only-dependencies --resolver="lts-14.27" base-orphans
RUN stack install --only-dependencies --resolver="lts-14.27" base16-bytestring
Run Code Online (Sandbox Code Playgroud)

然而这有几个限制:

  • 依赖项是按顺序构建的(因此速度较慢)
  • 同时安装与该库相关的任何可执行文件的副作用。- 生成的 Docker 镜像非常巨大 - 67GB
docker images
REPOSITORY                                                      TAG                                                   IMAGE ID            CREATED             SIZE
<none>                                                          <none>                                                d2a95ef3622d        11 seconds ago      67GB
Run Code Online (Sandbox Code Playgroud)

sam*_*m46 6

这似乎可以做到:

stack build --only-dependencies
Run Code Online (Sandbox Code Playgroud)