Dockerをより高速に使えるOrbStackを使ってみる

普段、Railsアプリケーションの開発を行うときに、Dockerを使って開発をしています。
OrbStackを知ったきっかけは以下のポスト。
留学から一時帰国中の長男との会話。
— 石原淳也(Junya Ishihara) (@jishiha) July 7, 2024
長男 「え?お父さん、もしかしてまさかまだDocker使ってんの?」
僕「そうだよ」
長男「アメリカの学部生でそんなやついないよ。みんなOrbStack使ってる」
僕「みんなって。。嘘つけ」
以前、Rancher Desktopへの移行を試して、またDocker Desktopに戻したりしていますが、懲りずに今度はOrbStackへの移行を試してみようと思います。
昨年に話題になってたみたいですが、残念がら知りませんでした。
OrbStackの良いところは、Docker Desktopとの共存が出来て切り替えが簡単なところです。
ちなみにビジネス利用の場合は年契約で96ドル(月8ドル)かかりますのでご注意ください。
結論を先にいうと、めっちゃ良いのでMacでDocker使うなら使って良いと思います!
インストール
brew install orbstack
Homebrewを使っているのでbrewでインストールします。
==> Installing Cask orbstack
==> Moving App 'OrbStack.app' to '/Applications/OrbStack.app'
==> Linking Binary 'orb' to '/opt/homebrew/bin/orb'
==> Linking Binary 'orbctl' to '/opt/homebrew/bin/orbctl'
🍺 orbstack was successfully installed!
OrbStack.appを開いてみます。Docker Desktopは一旦終了しておきます。

dockerのgetting-startedを実行してみます。
docker run -p 80:80 docker/getting-started

サクッと立ち上がりました。
Docker Desktopのデータを移行する
orb migrate docker
移行できるらしいのでやってみます。コマンド実行時にDocker Desktopが起動します。
ちょっとエラーが出ました。
some data failed to migrate: image sd-auto:68: load image: [-32098] read body: (remote) write /blobs/sha256/d4d7e0b7c05dcf2baa1a60952909c0df7cd6fe98a9ddfca9aa03cb88c8f098a9: no space left on device
image hogehoge-worker:latest: load image: [-32098] read body: (remote) write /blobs/sha256/d4514f8b2aac13e66dfc8b6e15aa2feb0d4ff942a192d9481f09b45e681ceb40: no space left on device
image hogehoge-app:latest: load image: [-32098] read body: (remote) rename /var/lib/docker/image/overlay2/layerdb/tmp/write-set-959636692 /var/lib/docker/image/overlay2/layerdb/sha256/a3b06a5c0a4dbe797b8d27b7dd87a9fe5c4083e016ae10796da448b9309cc251: file exists
image hogehoge-data:latest: load image: [-32098] read body: (remote) rename /var/lib/docker/image/overlay2/layerdb/tmp/write-set-8682259 /var/lib/docker/image/overlay2/layerdb/sha256/a3b06a5c0a4dbe797b8d27b7dd87a9fe5c4083e016ae10796da448b9309cc251: file exists
ディスク容量不足だったり、ファイルが存在してなかったりというエラーですかね。
一旦お試しなので、そのままでいきます。
実際に移行するならDocker Desktopから不要なイメージなど削除した上でやったほうが良さそうです。
エラーにならなかったものがあったので参考までに。

このプロジェクトのイメージは丸っと移行できました。
RSpecの実行速度を確認する
移行できたプロジェクトがあったのでそれで確認します。
まず一旦Docker DesktopでRSpecを実行してみます。
$ docker context use desktop-linux
$ time docker compose run --rm app rspec
〜中略〜
Executed in 17.45 mins fish external
usr time 207.81 millis 53.00 micros 207.76 millis
sys time 136.50 millis 310.00 micros 136.19 millis
3回実行してみて平均が17.12分
でした。結構大きめのプロジェクトなので時間かかってますね。
次に、同じコマンドをOrbStackに切り替えて実行してみます。
$ docker context use orbstack
$ time docker compose run --rm app rspec
〜中略〜
Executed in 765.35 secs fish external
usr time 171.05 millis 54.00 micros 171.00 millis
sys time 136.27 millis 630.00 micros 135.64 millis
こちらも3回実行してみて平均が12.24分
でした。約1.4倍
高速になっています。
比較すると次のような感じです。
Docker Desktop | OrbStack | |
---|---|---|
1回目 | 17.45分 | 12.75分(765.35秒) |
2回目 | 15.86分 | 12.08分(724.97秒) |
3回目 | 18.06分 | 11.89分(713.34秒) |
平均 | 17.12分 | 12.24分(734.55秒) |
めちゃくちゃ早くなってます。素晴らしい…
ファイル変更検知の確認
Rancher DesktopからDocker Desktopに戻した最大の原因は「Railsアプリケーションでのファイル変更検知が正常に機能しない」でした。

OrbStackにすることで1.4倍早くなったとしても、Rancher Desktopのときと同じでファイル変更検知が正常に機能しないのであれば使えないので確認しておきます。
結論としては、ちゃんとファイルの変更が反映されました。文章で表現するのが難しいので、とりあえず大丈夫だったことだけお伝えしておきます。
ちなみに、Reactのホットリロードもしっかり使えました。
既知の問題について
次の記事のような問題があったみたいですが、2024/07現在、自動的にTime Machineの対象から除外されるようになってるようです。

さいごに
OrbStackを試してみて、率直な感想は「全員使おう!」でした。使って損がないので使わない選択肢はないと思います。
Docker Desktopと比較して約1.4倍の高速化を実現し、ファイル変更検知も正常に機能します。
たとえOrbStackで問題が起こったとしても、Docker Desktopと共存が可能で、切り替えも簡単なので、試してみる価値は十分にあると思います。
ビジネス利用の場合は年間96ドルの費用がかかりますが、その性能向上を考えると十分な価値があると思います。
OrbStackを使って、より効率的で快適なDocker環境を構築してみてはいかがでしょうか。それでは、良きDockerライフを!