Haskell和Docker合理部署了图像大小?

rya*_*hza 5 windows google-app-engine haskell docker haskell-stack

我曾尝试使用此Dockerfile构建在Google App Engine中运行的PoC Happstack可执行文件:

FROM ubuntu:14.04

ENV APP_ROOT=/usr/share/app

RUN apt-get update && apt-get install curl -y && curl -sSL https://get.haskellstack.org/ | sh

COPY . ${APP_ROOT}/
WORKDIR ${APP_ROOT}/
RUN stack setup
RUN stack build

EXPOSE 8000

ENTRYPOINT ["stack","exec","app-exe"]
Run Code Online (Sandbox Code Playgroud)

这工作,我能够部署,但结果图像似乎很大.

我认为安装后图像大约为450MB stack,大约1.8GB以下stack setup,大约3GB stack build.

我认为数百MB似乎合理,甚至高达GB.我应该采取不同的方法,也许将生成的可执行文件以某种方式提取到另一个图像,以消除运行时不必要的一切?

Rob*_*ert 7

这非常适合docker多阶段构建:

https://docs.docker.com/develop/develop-images/multistage-build/

您可以申请如下:

FROM ubuntu:14.04 as mybuild

ENV APP_ROOT=/usr/share/app

RUN apt-get update && apt-get install curl -y && curl -sSL https://get.haskellstack.org/ | sh

COPY . ${APP_ROOT}/
WORKDIR ${APP_ROOT}/
RUN stack setup
RUN stack build

FROM ubuntu:14.04

COPY --from=mybuild /path/to/app-exe /dest/app-exe #edit this line accordingly

EXPOSE 8000

ENTRYPOINT ["stack","exec","app-exe"]
Run Code Online (Sandbox Code Playgroud)

FROM除了您复制的内容之外,最终图像中不包括第二个之前的所有内容COPY --from.

  • 如果你真的想疯了,这里有一篇关于使用<5 MB的Haskell可执行文件制作Docker镜像的博客文章:https://www.fpcomplete.com/blog/2015/05/haskell-web-server-in- 5MB (5认同)