LoginSignup
1
1

More than 1 year has passed since last update.

Rails コンテナの docker build を高速化してみる

Last updated at Posted at 2021-09-11

BuildKit を有効にして docker build した場合、どのくらい高速になるのか確認しました。

BuildKit

詳細まで理解していませんが、ざっくりまとめると、

  • 依存関係のない命令を並列実行できる
  • コンパイラやパッケージマネージャのキャッシュディレクトリを保持できる

これらの仕組みにより、ビルドを高速化しているようです。

利用方法

BuildKit は docker v18.06 から使えます。
環境変数 DOCKER_BUILDKIT=1 を設定するだけで有効になります。

BuildKit 無効のとき

BuildKit を無効化。

$ export DOCKER_BUILDKIT=0

中間レイヤ削除とキャッシュ不使用のオプションを付けてビルド。

$ docker build . --rm --no-cache -t rails_app -f dockerfiles/rails/Dockerfile 

ビルド時間は 4m27s でした。

BuildKit 有効のとき

次は有効にしてビルドしてみます。

$ export DOCKER_BUILDKIT=1
$ docker build . --rm --no-cache -t rails_app -f dockerfiles/rails/Dockerfile 

ビルド時間は 2m54s でした。

約35%のビルド時間削減になりました!(もちろん環境やイメージの内容にも依りますが)

ビルド時間の短縮以外で嬉しかったこと

ビルド中の画面出力が見やすくなっていました。
従来のビルドでは膨大な長さになる上に内容も分かりにくかったです。

BuildKit では、ステータスがレイヤ毎にまとめられています。
また、並列に処理が進んでいることが見て分かるようになってます。

image.png

まとめ

BuildKit を有効にしてビルド時間が短縮できることが確認できました。

BuildKit にはこの他にも機密情報をコンテナに渡すためのオプションや、SSH エージェントによる接続を許可するオプションなどが追加されているようです。またの機会に試してみたいと思います。

ちなみに、ビルドした Dockerfile はこちらです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1