如何预安装堆栈依赖项,以减少堆栈构建时间?
How to pre-install stack dependencies, to reduce stack build time?
我正在从 Haskell 应用程序构建一个 docker 图像,我正在从容器内执行 stack build
。
因为 stack build
从 'fresh/vanilla' docker 图像开始 - 所有库都需要 installed/pulled.
有什么方法可以预安装这些库依赖项吗?为了减少 docker 图像构建时间 (stack build
) 的最终目标。我还希望稍后能够 'add' 一个额外的依赖项,而不必再次 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
但是这有几个限制:
- 依赖项是按顺序构建的(因此速度较慢)
- 同时安装与此库相关的任何可执行文件的副作用。 - 生成的 Docker 图像是 巨大的 - 67GB:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> d2a95ef3622d 11 seconds ago 67GB
这似乎可以做到:
stack build --only-dependencies
可以一步手动安装依赖项,例如:
stack install --resolver lts-14.27 Cabal Only RSA SHA StateVar adjunctions aeson ...
我正在从 Haskell 应用程序构建一个 docker 图像,我正在从容器内执行 stack build
。
因为 stack build
从 'fresh/vanilla' docker 图像开始 - 所有库都需要 installed/pulled.
有什么方法可以预安装这些库依赖项吗?为了减少 docker 图像构建时间 (stack build
) 的最终目标。我还希望稍后能够 'add' 一个额外的依赖项,而不必再次 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
但是这有几个限制:
- 依赖项是按顺序构建的(因此速度较慢)
- 同时安装与此库相关的任何可执行文件的副作用。 - 生成的 Docker 图像是 巨大的 - 67GB:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> d2a95ef3622d 11 seconds ago 67GB
这似乎可以做到:
stack build --only-dependencies
可以一步手动安装依赖项,例如:
stack install --resolver lts-14.27 Cabal Only RSA SHA StateVar adjunctions aeson ...