快速参考
-
由……维护
Docker 社区 -
何处获取帮助:
Docker 社区 Slack、服务器故障、Unix & Linux 或 Stack Overflow
支持的标签及相应的 Dockerfile 链接
-
9.10.1-bullseye,9.10-bullseye,9-bullseye,bullseye,9,latest -
9.10.1-slim-bullseye,9.10-slim-bullseye,9-slim-bullseye,slim-bullseye,9-slim,slim -
9.6.6-slim-bullseye,9.6-slim-bullseye,9.6.6-slim,9.6-slim
快速参考(续)
-
已发布的图像工件详细信息:
仓库信息 仓库的repos/haskell/目录(历史)
(图像元数据、传输大小等) -
图像更新:
官方镜像仓库的library/haskell标签
官方镜像仓库的library/haskell文件(历史记录) -
此描述的来源:
文档库的haskell/目录(历史)
什么是 Haskell?
Haskell 是一种惰性、函数式、静态类型的编程语言,具有高级类型系统特性,如高阶、高阶种类参数多态性、单子效应、广义代数数据类型(GADTs)、灵活的类型类、关联类型族等。
Haskell 的 ghc 是一个可移植的、优化的编译器,具有外部函数接口(FFI)、LLVM 后端以及对并发、显式/隐式并行、运行时分析等的复杂运行时支持。其他 Haskell 工具,如 criterion 、 quickcheck 、 hpc 和 haddock ,提供高级基准测试、基于属性的测试、代码覆盖和文档生成。
大量具有生产质量的 Haskell 库以 Cabal 包的形式可从 Hackage 获得。传统的 cabal 工具,或更近的 stack 工具(在 7.10.3 +中可用)可用于简化与 Cabal 包的协作。

关于此图像
此图像在可能的情况下附带一个最小的 Haskell 工具链( ghc 和 cabal-install )以及 stack 工具(https://www.haskellstack.org/)。 stack 当前不支持 ARM64 ,因此未包含在该处理器架构中。
ARM64 支持是新的,在现阶段应被视为实验性的。自 8.10.7 、 9.0.2 和 9.2.1 起已添加支持。
注意:GHC 开发者不支持旧版本分支(即 7.8.x )。只有最近的两个次要版本会接收更新或显示在本页面顶部的“支持的标签……”部分。
此外,我们旨在支持作为变体的 Debian 的两个最新版本( stable 和 oldstable ),如果未指定,则最新版本为默认版本。
注意:目前
stableDebian 是 11 版本“牛眼”,然而它尚未得到 Haskell 工具的支持。在那之前,默认将仍然是 Debian 10“buster”。我们已经放弃了对 Debian 9“stretch”的支持。
如何使用此图像
启动与 ghci 的交互式解释器会话:
$ docker run -it --rm haskell:9
GHCi, version 9.0.1: http://www.haskell.org/ghc/ :? for help
Prelude>
使用 stack 对应用程序进行 Docker 化:
FROM haskell:8.10
RUN stack install --resolver lts-17.14 pandoc citeproc
ENTRYPOINT ["pandoc"]
使用 cabal 对应用程序进行 Docker 化:
FROM haskell:8.10
RUN cabal update && cabal install pandoc citeproc
ENTRYPOINT ["pandoc"]
使用构建缓存迭代开发带有 Dockerfile 的 Haskell 应用程序:
FROM haskell:8
WORKDIR /opt/example
RUN cabal update
# Add just the .cabal file to capture dependencies
COPY ./example.cabal /opt/example/example.cabal
# Docker will cache this command as a layer, freeing us up to
# modify source code without re-installing dependencies
# (unless the .cabal file changes!)
RUN cabal build --only-dependencies -j4
# Add and Install Application Code
COPY . /opt/example
RUN cabal install
CMD ["example"]
关于 happy 、 alex 等的考虑因素
一些也充当构建依赖项的软件包,例如 happy 和 alex ,不再包含在此映像中(自 haskell:8.2.2 和 haskell:8.4.3 起)。存在一个引导问题,即可能假定其中一个或多个这些工具是可用的。如果遇到关于在 Cabal 软件包中未明确指出的缺失依赖项的错误,则需要明确标记它们以进行安装。
堆栈的注意事项
Stack 工具主要设计为直接在主机上运行,并具有许多高级功能,例如 GHC 引导和 Docker 集成。在容器镜像的上下文中,其中一些功能( stack docker )与 Docker 抽象冲突,应避免使用。
另一个可能令人困惑的常见场景是默认的 Stackage 快照。Stackage 快照是一组固定到特定版本的 Haskell 包,以与特定的 GHC 版本兼容。当你要求 Stack 解析依赖项时,它通过 resolver 值引用特定的快照。虽然你应该在项目中明确指定 resolver ,但也可以使用自动生成的默认值运行。该默认值由从上游 Stackage 服务器请求时获得的值确定,并指向最新的“LTS”快照。如果快照引用的 GHC 版本与 Docker 镜像中提供的不同,你可能会看到如下消息:
Step 2/3 : RUN stack install pandoc
---> Running in e20466d52060
Writing implicit global project config file to: /root/.stack/global-project/stack.yaml
Note: You can change the snapshot via the resolver field there.
Using latest snapshot resolver: lts-11.11
Downloading lts-11.11 build plan ...
Downloaded lts-11.11 build plan.
Compiler version mismatched, found ghc-8.4.3 (x86_64), but expected minor version match with ghc-8.2.2 (x86_64) (based on resolver setting in /root/.stack/global-project/stack.yaml).
To install the correct GHC into /root/.stack/programs/x86_64-linux/, try running "stack setup" or use the "--install-ghc" flag.
在这种情况下, haskell Docker 镜像中的 GHC 版本领先于默认 Stack 解析器预期的 GHC 版本。正如输出所建议的,手动设置解析器(通常通过 stack.yml )是推荐的方法。
Step 2/3 : RUN stack install --resolver ghc-8.4.3 pandoc
---> Running in 0bd7f1fcc8b2
Writing implicit global project config file to: /root/.stack/global-project/stack.yaml
Note: You can change the snapshot via the resolver field there.
Using resolver: ghc-8.4.3 specified on command line
Updating package index Hackage (mirrored at https://s3.amazonaws.com/hackage.fpcomplete.com/) ...
Selected mirror https://s3.amazonaws.com/hackage.fpcomplete.com/
在 Docker 镜像上下文中使用 --install-ghc 的替代方案没有意义,因此全局 install-ghc 标志已设置为 false (截至 haskell:8.2.2 和 haskell:8.4.3 ),以避免在容器中引导新 GHC 的默认行为。
图像变体
haskell 图像有多种类型,每种都针对特定的用例而设计。
haskell:<version>
这是事实上的镜像。如果你不确定自己的需求是什么,你可能想要使用这个。它被设计既可用作一次性容器(挂载你的源代码并启动容器以启动你的应用程序),也可用作构建其他镜像的基础。
其中一些标签可能包含诸如“bullseye”之类的名称。这些是 Debian 发行版的套件代号,表明该镜像基于哪个发行版。如果你的镜像需要安装除镜像自带的软件包之外的任何其他软件包,你可能希望明确指定其中之一,以便在 Debian 有新版本发布时最大程度地减少损坏。
haskell:<version>-slim
此图像不包含默认标签中包含的常见软件包,仅包含运行 ghc 、 cabal-install 和 stack 所需的最小软件包。此外,不包括分析支持,这节省了约 700MB 的空间。
如果图像大小是关注点,我们建议使用精简图像。
许可证
此图像根据麻省理工学院许可证(LICENSE)获得许可,并包含根据 BSD 许可证获得许可的软件:格拉斯哥 Haskell 编译器许可证、Stack 许可证。
与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。
一些能够自动检测到的额外许可证信息可能会在 repo-info 存储库的 haskell/ 目录中找到。
对于任何预构建镜像的使用,镜像用户有责任确保对此镜像的任何使用都符合其中包含的所有软件的任何相关许可证。