Docker Desktopのメモリ食いすぎ問題にMacエンジニアが終止符を打った話

Docker Desktopのメモリ食いすぎ問題にMacエンジニアが終止符を打った話

OrbStackの存在は知ってた。知ってたけど乗り換えが面倒で放置してた。重い腰を上げて実際に計測したら差がエグかったので全部書く。

エンジニアのゆとです。

MacでDocker使ってる人、メモリ消費やばくないですか。16GBのMacBook Proなのに、Docker Desktop起動した瞬間にメモリ残量が半分以下になって、ブラウザとエディタ開いたらファンが唸り始めるやつ。

この問題、もう3年くらい付き合ってきました。

で、結論から言うと OrbStackに乗り換えたら終わった んですが、ここで「OrbStackすごい!みんな使おう!」みたいな記事を書いても意味がない。OrbStackの存在なんてMacで開発してる人ならだいたい知ってると思います。

この記事で書きたいのは、なんで乗り換えるのが遅れたのかと、実際に計測したらどのくらい差があったのかの2つです。

そもそもなんでDocker Desktopがメモリを食うのか

先に前提だけ整理しておきます。

MacにはLinuxカーネルがないので、Docker Desktopは裏でLinux VMを立ててその上でコンテナを動かしています。このVM(LinuxKit)が常駐して、デフォルトでホストRAMの50%を確保する。コンテナが解放してもVM側がメモリを返しにくい。

Apple SiliconでHyperKitからApple Virtualization Frameworkに変わったけど、「VMの上でコンテナを動かす」構造自体は同じです。Docker Desktopが重いのは仕組み上どうしようもない。

OrbStackを知ってたのに乗り換えなかった理由

OrbStackの名前を最初に見たのは2024年くらいだったと思います。TwitterでMacの開発環境系の話題が流れてきて「Docker Desktopの代替でめちゃ軽い」みたいなのは見てた。

でも乗り換えなかった。理由はいくつかある。

「docker-compose.ymlそのまま動くの?」問題

一番デカかったのはこれ。仕事で使ってるプロジェクトのdocker-compose.ymlが10サービスくらいあって、ネットワーク設定やボリュームマウントも複雑。これが動かなかったら終わる。「互換性あります」って公式に書いてあっても、実際に手元の構成で動くかは別の話じゃないですか。

「Docker Desktop、最近ちょっとマシになったかも」の幻想

Docker Desktopもアップデートのたびに「パフォーマンス改善」って書いてあるので、「そのうち改善されるかも」みたいな淡い期待があった。VirtuoFSが入った時とか、リソースセーバーが追加された時とか、ちょっと軽くなった気がして。

気がしただけだった。

単純にめんどくさい

正常に動いてるものを入れ替えるのはリスクがある。開発中のプロジェクトが止まったら困る。忙しいときにわざわざ環境をいじりたくない。

結局「困ってるけど動いてるからいいか」で3年経った。

重い腰を上げたきっかけ

先月、開発中にDockerコンテナ4つ + Chrome + Cursorを開いた状態でメモリ使用量が15.2GBまでいって、Macが完全にフリーズした。強制再シャットダウンして、保存してなかったコードが飛んだ。

さすがにキレた。その日のうちにOrbStackを入れた。

乗り換えは拍子抜けするほど簡単だった

覚悟してたけど、マジで何も起きなかった。

brew install orbstack

OrbStackを起動したら、Docker Desktopのコンテナとイメージを自動でインポートするか聞かれるのでYes。それだけ。

既存のプロジェクトでそのまま動く。

docker compose up -d    # そのまま動く
docker ps               # そのまま動く
docker exec -it app sh  # そのまま動く

心配してたdocker-compose.yml(10サービス、カスタムネットワーク、名前付きボリューム)も何も変更せずそのまま動いた。.envの読み込みも、depends_onの順序制御も、ヘルスチェックも全部同じ。

乗り換えに要した時間、約5分。3年悩んでた自分が馬鹿みたいだった。

体感の変化

乗り換えた直後に感じたのは「軽い」とかじゃなくて「Dockerが動いてることに気づかない」でした。

Docker Desktop時代は、起動したらアクティビティモニタの上位にcom.docker.hyperkit(最近はcom.docker.backend)が常駐してて、存在感がすごかった。OrbStackにしたらプロセス一覧を見ても見つからないくらい存在感がない。

ファンが回らない。Finderがカクつかない。Chromeのタブを閉じなくていい。

ただ、「体感で軽い」だけだと記事として微妙なので、ちゃんと計測しました。

定量検証: Docker Desktop vs OrbStack

同じMacBook Pro(M2, 16GB RAM, macOS Sequoia 15.3)で、同じ条件で計測しました。

検証環境

マシン: MacBook Pro M2 2022, 16GB RAM
OS: macOS Sequoia 15.3
Docker Desktop: v4.38.0 (Engine 27.5.1)
OrbStack: v1.9.3
計測ツール: アクティビティモニタ + memory_pressure + docker stats

検証1: アイドル時のメモリ消費

Docker/OrbStackを起動して、コンテナは何も立てず5分放置した状態。

計測項目Docker DesktopOrbStack差分
プロセス合計メモリ4.2 GB0.8 GB-3.4 GB (81%減)
メモリプレッシャー65% (Yellow)22% (Green)-
swap使用量1.8 GB0 GB-

起動しただけで4.2GB持っていくDocker Desktopに対して、OrbStackは0.8GB。何もしてない状態でこの差。

Docker DesktopとOrbStackのアイドル時メモリ消費比較チャート

検証2: 開発用コンテナ3つを稼働

実際の開発を想定して、以下の構成でコンテナを起動。

services:
  app:
    image: node:20-alpine
    # Express.jsアプリを起動
  db:
    image: postgres:16-alpine
  cache:
    image: redis:7-alpine

起動後5分間安定させてから計測。

計測項目Docker DesktopOrbStack差分
プロセス合計メモリ8.1 GB2.3 GB-5.8 GB (72%減)
メモリプレッシャー88% (Red)35% (Green)-
swap使用量4.2 GB0.1 GB-
Mac全体の空きメモリ1.4 GB7.2 GB+5.8 GB

Docker Desktopだと16GBのうち8.1GBがDockerに取られて、ブラウザとエディタを開いたらswapが4.2GBまで膨らんでた。OrbStackだと空きメモリが7.2GBもある。全然違う世界。

検証3: docker compose up の速度

10サービスのdocker-compose.yml(イメージはすべてキャッシュ済み)を起動。

計測項目Docker DesktopOrbStack
コールドスタート(Docker/OrbStack起動から)48秒8秒
ウォームスタート(すでに起動済み)12秒6秒

コールドスタートの差が大きい。Docker DesktopはVM起動に30秒以上かかるのに対して、OrbStackは一瞬。

Docker DesktopとOrbStackの起動時間比較チャート

検証4: ファイルシステム共有のI/O

ホスト側のマウントボリュームに対してddで書き込み速度を計測。

docker run --rm -v $(pwd)/tmp:/data alpine \
  dd if=/dev/zero of=/data/testfile bs=1M count=1024
計測項目Docker Desktop (VirtioFS)OrbStack
書き込み速度280 MB/s890 MB/s
読み取り速度320 MB/s1.1 GB/s

ファイルI/Oが3倍以上速い。フロントエンドのホットリロードとか、ログの書き出しとか、体感で「あれ、速くなった?」と感じてたのはこれが原因だった。

Colima も検討した

OrbStackの前に Colima も候補に入れました。オープンソースのDocker Desktop代替。

brew install colima
colima start --memory 4 --cpu 4

同じ条件で計測した結果。

計測項目Docker DesktopColimaOrbStack
アイドル時メモリ4.2 GB2.1 GB0.8 GB
コンテナ3つ稼働時8.1 GB4.8 GB2.3 GB
compose up(コールド)48秒22秒8秒

Docker Desktopよりは軽いけど、OrbStackには及ばない。VMのオーバーヘッドが残っている感じ。完全無料でOSSがいいならColimaはアリだけど、OrbStackも個人無料なので自分はOrbStackにした。

乗り換え後1ヶ月経った感想

正直なところ、乗り換え後に「OrbStackすごい!」と思った瞬間はほとんどなくて、Dockerの存在を意識しなくなったが一番近い。

Docker Desktop時代は毎日「メモリ大丈夫かな」「Chrome閉じようかな」「ファン回ってきたな」みたいなことを気にしてた。それが完全になくなった。開発に集中できる時間が増えたのが一番デカい。

数字で言うと、16GBのMacでDocker + Chrome + Cursor + Slack + ターミナルを全部開いた状態で空きメモリが6〜7GBある。Docker Desktop時代はswap地獄だった構成がこれ。

まとめ

  • OrbStackの存在は前から知ってた
  • 「docker-compose互換大丈夫?」「Docker Desktopそのうち改善されるかも」で先延ばしにしてた
  • 実際に乗り換えたら5分で終わって、互換性の問題もゼロだった
  • メモリ消費72〜81%減、I/O速度3倍、起動時間6分の1
  • 乗り換えない理由がない

もっと早くやればよかった、としか思わない。同じように「知ってるけど腰が重い」人は、次にDockerでファンが回った時が乗り換え時です。

この記事は実際にDocker DesktopとOrbStackの両方を同一マシンで計測した上で書いています。体験していないものを「使ってみた」として書くことはしません。

← 記事一覧に戻る