使用 Parallels Desktop 來運行 Docker

更新:這招 Apple Silicon 不能用。

從去年開始,我陸續開始使用 Docker 在 macOS 上面進行開發,但一直一來遇到一個問題就是:效能實在太差了。

由於 Docker 實作的底層是基於 Linux 原生系統的,所以在 macOS 上的 Docker Desktop 就要先虛擬一整個 Linux 環境然後在上面執行 Docker instances。於是我開始檢討是不是我的電腦太爛了,CPU 太廢 RAM 太少,因此我去把電腦換成 64GB RAM,然後就開始發現有點不對勁...

在我換了 64GB RAM 之後,然後設定 Docker 可以用 32GB RAM,然後一打開 Docker Desktop,發現啥都還沒做,它就直接吃了 32GB。並且隨著開發進行,會越吃越多,甚至變成 40GB 以上的 RAM 使用量。這太誇張了啦!

於是我就在想,既然在 macOS 上的 Docker 都是要先虛擬一個 Linux,我用 Parallels Desktop 開一個 Ubuntu 裡面再開 Docker,搞得像是俄羅斯套娃娃也不是不行,說不定 Parallels Desktop 的記憶體管理跟資源使用比較低,結果就去查了一下,發現 Parallels Desktop 可以直接運行 Docker 虛擬機!

不過呢,這個功能由於是比較進階開發者才會用到的虛擬技術,所以需要買 Pro Edition 的 Parallels Desktop 才有(詳情可以看這裡)。非常巧的是,我手上剛好有一組 Pro 訂閱序號,所以就給他用下去啦!

 

使用方式很簡單,一開始先移除原本的垃圾 Docker Desktop:開啟 Docker Desktop,點擊選單列的「Troubleshooting」,然後選擇「Uninstall」移除。

接著我們手動安裝一些必要的指令:

再來建立 Parallels Desktop 的 Docker 虛擬機:

prl-dev 是虛擬機的名稱,可以改成別的,然後其他參數可以參考這裡的說明。

 

▼ 執行成功之後長這樣,多了一個 Docker 的圖示在虛擬機列表中

如果要開始使用 Docker,就執行

這樣終端機會設定一些環境參數,才能正確連接到 Docker 虛擬機上。

不過,現在我們馬上把虛擬機停掉,來改一些參數。

 

▼ 首先是 CPU & Memory 的部分,如果剛剛你設定了之後想反悔,可以在這邊調整,但重點是 Hypervisor 我們這邊改成 Parallels。

原因如下:在官方論壇的這篇問答中,官方說:「Parallels Hypervisor is the best one.」由於 Docker Desktop 現在就是用 Apple 方案的,所以我們這邊相信 Parallels 官方的說法,改成用他們的應該會更好。

2021.10.08 更新:如果這邊選用 Apple 的,那一樣會有越吃越多記憶體的問題。對不起我錯怪 Docker Desktop 了,不是 Docker Desktop 垃圾,是 Apple 的 Hypervisor framework 垃圾。

接著再到 Parallels Desktop 本身的總設定(不是虛擬機設定)裡面,找到 Network,改 port 轉發規則,例如你要做 NodeJS 網頁開發可能就要弄個 3000 之類的

以上這樣就完成了,然後要切記,不要用 Parallels Desktop 的 GUI 來開/關虛擬機,不然可能會在運行 Docker 時出錯,正確方式如下:

 

至於文章一開始說的效能呢?由於 Parallels Desktop 把 RAM 的使用量不知道怎麼做的「藏起來」了,所以我在系統監控程式裡面看不到真正的使用量,但基於以前用 Parallels Desktop 的經驗,以及這幾天用下來的體驗,至少分配給他 32GB 就是乖乖用 32GB,不會再繼續多佔用不該用的資源,而使用上確實也比 Docker Desktop 順暢,啟動也更快!

 

延伸閱讀:macOS 上的 Linux 虚拟化选择: Parallels Desktop vs Docker - CaptainChen

4 則留言

  1. 「superbil」的個人頭像
    superbil

    若用 docker-compose 會運作正常嗎?

    1. 「Hiraku」的個人頭像
      Hiraku

      可以的,我有用 docker-compose

  2. 「DuckLL」的個人頭像
    DuckLL

    可以試試看 lima-vm

    1. 「Hiraku」的個人頭像
      Hiraku

      謝謝推薦,但是 QEMU 效能應該沒 PD 好...

發佈留言