我希望在 Docker 上部署我的 Haskell 应用程序,而我找到的基础镜像 fco/stack-build 大小为 9GB!你知道是否有更加精简的基础镜像吗?
我希望在 Docker 上部署我的 Haskell 应用程序,而我找到的基础镜像 fco/stack-build 大小为 9GB!你知道是否有更加精简的基础镜像吗?
stack-build
的体积如此之大,是因为它包含了 Stackage 上 所有 包所需的系统依赖。
我正在使用以下基础镜像进行构建和部署:
FROM ubuntu:18.04
RUN apt-get update
# Build dependencies
RUN apt-get install --assume-yes curl
RUN curl -sSL https://get.haskellstack.org/ | sh
RUN apt-get install --assume-yes libtinfo-dev
# Without this haddock crashes for modules containing
# non-ASCII characters.
ENV LANG C.UTF-8
如果您只想在运行时使用图像,则实际上并不需要堆栈,因此这并不是真正的最小化。
首先,那个镜像可能只是在构建可执行文件时才需要的,一旦构建完成,您可以使用多阶段Docker构建或直接将可执行文件复制到更轻量级的镜像中。
这里有Dockerfile文件:https://github.com/commercialhaskell/stack/blob/master/etc/dockerfiles/stack-build/lts-13.0/Dockerfile
你可以移除这些命令(它们可能占据了大部分的大小):
# Use Stackage's debian-bootstrap.sh script to install system libraries and
# tools required to build any Stackage package.
#
RUN apt-get update && \
apt-get install -y wget && \
wget -qO- https://raw.githubusercontent.com/fpco/stackage/$BOOTSTRAP_COMMIT/debian-bootstrap.sh | bash && \
rm -rf /var/lib/apt/lists/*