如何预安装堆栈依赖项,以减少堆栈构建时间? [英] How to pre-install stack dependencies, to reduce stack build time?

查看:125
本文介绍了如何预安装堆栈依赖项,以减少堆栈构建时间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆