MacでDocker Desktopのリソースボトルネックを解消する方法
22. Juni 2026
0
Computing/SoftwareComments (0)
Log in to leave a comment
No posts yet
Log in to leave a comment
No posts yet
Docker Desktopは起動した瞬間、物理メモリの半分を占有します。仮想化フレームワークの不具合により、コンテナを停止してもメモリは解放されません。Macのカーネルがディスクスワップを開始すると、Apple SiliconであってもI/Oボトルネックは避けられません。JVMベースのアプリを動かす際にコンテナが理由もなく終了する「Exit Code 137」現象は、ヒープサイズを調整するだけでは解決しません。
サービスごとのメモリ制限値を手動で計算して入力してください。全体の制限値 は次の公式で求めます。
以下のスクリプトで環境変数を制御すれば、ローカルサービスのダウンタイムを防ぐことができます。
sysctl -n hw.memsize でMacの総RAM容量を確認します。.env ファイルに BACKEND_MEM_LIMIT=1536M のように割り当て値を自動注入します。macOSのAPFSとLinuxコンテナの権限不一致はビルドエラーの原因となります。DDEVのベンチマークによると、従来のgRPC FUSEの代わりにVirtioFSを適用し、Colima環境でMutagen同期を並行して行うと、Drupalのインストール速度が102秒から27秒へと73%短縮されます。
パフォーマンスのボトルネックを減らすには、以下の設定を適用してください。
sudo diskutil apfs changeOwnerSharing /Volumes/ExternalSSD-Dev enable コマンドで権限構造を無視します。docker-compose.yml ファイルの develop.watch.sync ルールにおいて、node_modules のような重いパスは同期対象から除外します。--mount-inotify オプションを追加し、FSEventsの信号をLinuxカーネルに合わせます。この構成を完了すると、コード修正時に発生する遅延時間が物理デバイスの95%程度の速度まで回復します。
複数の仮想化ランタイムを混在させて使うと、Dockerソケットのパスが絡まり合います。AppleのコンテナフレームワークはマイクロVMを独立して構成するため、ネットワーク管理が複雑です。
ポート競合を防ぐには、ネットワーク自動補正スクリプトを使用してください。
lsof -i -P -n コマンドで、8080や5432など現在使用中のポートを探します。.env に更新してコンテナを起動します。コンテナが削除されるとデータベースファイルも一緒に消えてしまいます。/Volumes/ExternalSSD-Dev/DockerData/volumes/pg_data_core/ のように、物理ディスクの特定パスにボリュームをバインドしておいてください。
データ復旧の耐性を持たせるには、次のステップが必要です。
docker compose exec コマンドでPostgreSQLデータをストリーミングダンプし、gzip で圧縮保存します。gunzip -c で圧縮ファイルをコンテナに直接注入します。read オプションを入れて、復旧実行前に承認プロセスを強制します。この方法を使えば、誤ったテストデータが入ったとしても5秒以内に正常な状態に戻すことができます。