SML/NJのdockerイメージをマルチアーキテクチャ対応した
私が個人的に管理しているsml/njのdockerイメージを linux/amd64 と linux/386 のマルチアーキテクチャ対応しました。
以下のページでタグを確認すると、linux/amd64 と linux/386 という種類が表示されると思います。
使用方法
使用するにはそれぞれのアーキテクチャのLinuxホストから任意のイメージをpullするだけ、つまり普通に使うだけです。
amd64版の方は全て 32/64bit モード両方でビルドしてありますので、sml -32(or -64)
とすることで32bitモードでも使うことができますが、これは非ネイティブ動作(らしい)なので注意です*1。
仕組み
docker registry は、各イメージ名に manifest というメタデータを関連付けており、ここに対応アーキテクチャ(やプラットフォーム)も含まれています。
ですので docker cli から適切なアーキテクチャを指定すればそのレイヤーがダウンロード出来るというワケです。
以下のように確認出来ます。(manifest は実験的な機能なので明示的に有効にしてやる必要があります。)
$ DOCKER_CLI_EXPERIMENTAL=enabled docker manifest inspect eldesh/smlnj:latest { "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 1157, "digest": "sha256:86983a83d1ef042bd3dbc1e013dad7845a566dc2afc3e52c17582f993a626af7", "platform": { "architecture": "386", "os": "linux" } }, { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 1158, "digest": "sha256:6d93f94070bf7877595f143f7f2ae7b3488e3740b2da35db17362a614f310a05", "platform": { "architecture": "amd64", "os": "linux" } } ] }
*1:これに注意すべき人存在する気がしないけど