コンテンツへスキップ
GitHubリポジトリ フォーラム RSS-ニュースフィード

AlpineベースのDockerイメージ

Johannes Müller

Crystalチームは、Docker Hubのcrystallang/crystalで、CrystalコンパイラがインストールされたDockerイメージを提供しています。0.13.0以降のCrystalバージョンは、様々なバージョンのUbuntu LinuxをベースとしたDockerイメージとして利用可能です。Alpine Linuxベースのイメージも、0.32.1-alpineから利用可能になりました。AlpineイメージはUbuntuイメージよりも軽量で、0.32.1では185MBに対して115MBです。ほんのわずかなバイトの節約です。

しかし、より重要なのは、Alpine Linuxがほとんどの他のディストリビューション(Ubuntuを含む)でデフォルトで使用されているgnu-libcではなく、musl-libcをベースとしていることです。musl-libcにリンクすることは、現在完全に静的にリンクされたCrystalバイナリをビルドする唯一の方法です。Alpine Linuxはこの作業を容易にします。たとえば、公式のCrystalコンパイラのLinuxビルドは、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