使用 docker-sync 解決 docker for Mac 啟動的虛擬容器程式執行緩慢的問題

DevelopersAndGamers發表於2019-10-29

背景:

新入職的公司有個非常OG的大專案,為了避免新同學重複造輪子,有哥們已經把專案需要的所有打好了一個映象供我們啟動docker。

初次啟動docker 使用的命令如下:

docker run -itd -p 80:80 -v /web/docker:/web/docker  centos

(ps: docker run 相關-i -p -v 等的含義不再此處贅述)

可見啟動容器時,使用了docker自帶的 -v (-volume) 方式進行mac本地和docker容器內的路徑對映。

問題:
1.容器啟動正常,環境正常,但是專案的執行非常慢,別人mac本地搭建的環境執行一個頁面1-2秒,容器內跑,直接15-20秒不止。

  1. 容器內專案git status 也巨慢 十幾秒有餘。

十分影響開發效率,初期在專案入口直接die('111'); 之後 發現響應很快,基本排除了nginx - php之間互動的問題。又順帶百度google了一通,最終定位到,mac本地的檔案系統和docker容器內的檔案系統(osxfs)不一致,需要頻繁的進行檔案格式轉換。

解決:

使用docker-sync以掛載容器的形式進行路徑對映。 docker-sync詳細介紹可自行google百度,本文只記錄下使用方式。

安裝:

gem install docker-sync

brew install fswatch

brew install unison

brew install eugenmayer/dockersync/unox

(ps 沒許可權時請自行sudo)

使用:

cd  /web/docker/xxx    #  專案根路徑
vim docker-sync.yml    #  docker-sync 配置檔案

內容如下:

version: '2'    
syncs:
    xxx-sync:   #ps: 生成的掛載容器的name,一般是開發容器-sync
        sync_strategy: 'unison'
        src: '.'

繼續執行啟動命令

docker-sync start     # 啟動    此時已經生成了一個xxx-sync 名稱的檔案容器 , 可自行docker ps 檢視。

接下來本地任何修改,可 xxx-sync 容器內的檔案已經自行同步。

這時候啟動容器

docker run -itd -p 80:80 -v xxx-sync:/web/docker  centos

新容器的檔案同步耗時問題已經基本解決。
ps1: 電腦重啟或者偶發性雙向同步有問題時,去本地專案根目錄 執行一次docker-sync clean 以及 docker-sync start 即可(電腦重啟時,直接docker-sync start)。
ps2: 已經run起來的容器,若是想解決此問題,需要自行百度下容器執行的配置檔案,改一下-v的路徑引數即可。

相關文章