跳至内容
GitHub 仓库 论坛 RSS 新闻源

基于 Alpine 的 Docker 镜像

Johannes Müller

Crystal 团队在 Docker Hub 上提供了带有已安装 Crystal 编译器的 Docker 镜像,地址为 crystallang/crystal。 从 0.13.0 版本开始,Crystal 版本都以基于不同版本的 Ubuntu Linux 的 Docker 镜像形式提供。 基于 Alpine Linux 的镜像现已推出,从 0.32.1-alpine 开始。 Alpine 镜像比 Ubuntu 镜像更轻便,对于 0.32.1 版本,其大小为 185 MB,而 Ubuntu 为 115 MB。 节省了几个字节。

但更重要的是,Alpine Linux 基于 musl-libc,而不是大多数其他发行版(包括 Ubuntu)默认使用的 gnu-libc。 目前,链接到 musl-libc构建完全静态链接的 Crystal 二进制文件 的唯一方法。 Alpine Linux 使这变得足够容易。 例如,适用于 Linux 的官方 Crystal 编译器构建是在 Alpine Linux 上静态链接到 musl-libc 的。

适用于 APK(Alpine 的包管理器)的 Crystal 包 已经存在了相当一段时间,并且边缘版本通常会很快更新。 更新的 Docker 镜像将在新的 Crystal 版本发布后立即可用。 它们始终基于 Alpine Linux 的稳定版本,但提供最新的 Crystal 版本。

以下是如何使用 Docker 镜像构建静态链接的“Hello World”程序的示例

$ echo 'puts "Hello World!"' > hello-world.cr
$ docker run --rm -it -v $PWD:/workspace -w /workspace crystallang/crystal:0.32.1-alpine \
    crystal build hello-world.cr --static
$ ./hello-world
Hello World!
$ ldd hello-world
        statically linked