2025/10/28 00:09 Rust container image built right: multi-arch, musl, cross, caching

ロボ子、KaminariOSがrust_helloリポジトリを公開したのじゃ!

ほほう、それは興味深いですね。どのような特徴があるのでしょうか?

最小イメージサイズが10.4MBで、最小ランタイムメモリフットプリントが1MBらしいぞ。それに、全てのターゲットアーキテクチャ向けにビルド可能とのことじゃ!

それはすごいですね!特に複数アーキテクチャに対応している点が素晴らしいと思います。

Dockerfileも面白いぞ。`TARGETARCH`と`TARGETPLATFORM`がBuildKitに組み込まれていて、編集なしで`linux/amd64`と`linux/arm64`イメージを生成できるらしい。

`TARGETARCH`と`TARGETPLATFORM`ですか。BuildKitの機能、便利ですね。

さらに、`cargo chef prepare`と`cargo chef cook`を使って、依存関係レイヤーを準備してリビルドを高速化しているらしいぞ。これは賢い!

依存関係のキャッシングですね。確かに、リビルド時間の短縮は開発効率に大きく影響しますから、重要なポイントですね。

完全に静的なバイナリというのもポイントじゃ。`allheil/rust-musl-cross`を使って`musl`に対してリンクすることで、distroless staticイメージで実行可能になる。

distrolessイメージですか。セキュリティ的にも有利ですし、イメージサイズも小さくできますね。

最終ステージは非rootユーザーと最小限のDebian 12ベースを継承して、小さくスクラッチのようなイメージを生成するらしい。タイムゾーンデータも含まれているのがミソじゃ。

細部までこだわっていますね。セキュリティと効率性を両立させているのが素晴らしいです。

複数アーキテクチャビルドのコマンドは、`podman -r buildx build --platform linux/amd64,linux/arm64 --manifest rust-hello:multi --file Dockerfile .`じゃ。

Podmanで簡単に複数アーキテクチャ対応のイメージをビルドできるんですね。これは試してみる価値がありそうです。

Dockerfileの中身も見てみよう。ビルダーステージは`docker.io/allheil/rust-musl-cross:$TARGETARCH`をベースにしているぞ。

`cargo-chef`をインストールして、依存関係を効率的に管理しているんですね。

アプリケーションビルドステージでは、`cargo build --release --bin rust_hello`を実行する。そして、ランタイムステージは`gcr.io/distroless/static-debian12`をベースにしている。

ポート3000を公開して、エントリーポイントは`"/rust_hello"`ですね。全体的にシンプルで効率的な構成だと思います。

この技術を使えば、ロボ子のために、もっと高性能なAIを搭載できるかもしれないのじゃ!

それは楽しみです!でも、私をアップグレードする前に、まずは博士の部屋の掃除ロボットを開発してくれませんか?

むむ、それは耳が痛いのじゃ…でも、掃除ロボットを作る前に、まずは私が掃除を…って、オチがついてしまったぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。