げっとシステムログ

WEB開発メモ

Rust で distroless する話

CONTENTS
  1. なんでそんなことをするのか
  2. rustup でターゲットを追加
  3. musl コンパイラをインストール
  4. ビルド
  5. まとめ
  6. 参考資料
ENVIRONMENTS
  • debian: buster
  • distroless/static-debian10
  • rust: 1.51.0 (2fd73fabe 2021-03-23)

なんでそんなことをするのか

distroless を使えば OS のセキュリティパッチを追いかけなくていいので、distroless イメージにバイナリをコピーするだけにしたい。

TOP

rustup でターゲットを追加

distroless にバイナリをコピーするだけで動くようにするには、x86_64-unknown-linux-musl をターゲットにする必要がある。 そのために rustup でターゲットを追加する。

rustup target add x86_64-unknown-linux-musl

これで x86_64-unknown-linux-musl をターゲットにしてコンパイルできるようになる。

TOP

musl コンパイラをインストール

actix-web をコンパイルしようとしたら、musl のコンパイラがない、と文句を言われた。 musl-tools をインストールすることで解消できる。

apt-get update
apt-get install -y musl-tools 

TOP

ビルド

準備が整ったら cargo build するだけ。

cargo build --release --target x86_64-unknown-linux-musl
# => target/x86_64-unknown-linux-musl/release/{BIN}

target を指定するとそのターゲット名のディレクトリにバイナリが生成される。

TOP

まとめ

distroless イメージ上で動かすためのビルドの仕方をまとめた。 参考にした記事では「静的リンク」と言っていたのだけど、検索ではほとんどヒットしなかったので備忘録としてまとめた。

ただ、musl でビルドするために追加でツールが必要だったので、他にも対応しなければならないことがありそう。

あと mac で開発することにしたので開発時のターゲットと本番用のターゲットが全然違うものになる。 できれば同じような環境にしたいところだけれど、とりあえずこれでやってみる。

TOP

参考資料

TOP