背景:
新入職的公司有個非常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秒不止。
- 容器內專案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的路徑引數即可。