如何预安装堆栈依赖项,以减少堆栈构建时间? [英] How to pre-install stack dependencies, to reduce stack build time?
问题描述
我正在从Haskell应用程序构建docker映像,我正在容器内执行stack build
.
I'm building a docker image from a Haskell application, I'm executing stack build
from within the container.
因为stack build
是从新的/原始的" docker映像开始的-所有库都需要安装/拉出.
Because stack build
is starting from a 'fresh/vanilla' docker image - all the libraries need to be installed/pulled.
是否可以预安装这些库依赖项?为了减少docker镜像构建时间(stack build
)的最终目标.我还希望以后可以添加"一个附加的依赖项,而不必再次从头开始再次stack build
所有内容.
Is there a way I can pre-install these library dependencies? For the end goal of reducing the docker image build time (stack build
). I'd also like to be able to later on 'add' an additional dependency without having to once again stack build
everything over from start.
可能的解决方案:
我尝试了一系列:
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
推荐答案
一个人可以通过以下步骤在单个步骤中手动安装依赖项:
One can manually install the dependencies in a single step with something like :
stack install --resolver lts-14.27 Cabal Only RSA SHA StateVar adjunctions aeson ...
这篇关于如何预安装堆栈依赖项,以减少堆栈构建时间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!