工具, 軟體開發

Docker建立本機PHP+NodeJS開發環境

為什麼要用 Docker 建立本機開發環境? 用 Docker 有什麼好處? 除了避免環境建立卡關、失敗之外還有什麼好處呢?
本文教你快速、簡單建立本機的 docker + php + nginx + Node.js 開發環境 😎
為什麼我選用 Docker 建立環境呢? 絕不是因為鯨魚很可愛 🐳

(article cover from https://www.softaware.at/codeaware/2017/05/23/consistent-npm-development-environments-using-docker.html)

index:

為什麼要用 Docker 建立本機開發環境?

情境~~
如果同一個專案下,有很多工程師,每個人的環境可能都會不一樣….
`守舊派的 PHP 5.5, 追隨市場的 PHP 7.0, 喜歡嘗鮮的 PHP7.3`
然後~ 正式的線上環境則是 PHP 7.2
單是 PHP 版本就有差異了,如果再配上 MySQL、nodejs 和 npm 各個環境上的誤差可能就更精彩了!!
產品沒有出問題真是有老天保佑 🙏🙏🙏
這種情況下就很容易聽到…

『在我電腦是好的!』 😱😱😱

使用 Docker 建立本機開發環境的優點

透過 Docker in Local 可以解決以下問題,也是使用 Docker 後的優點~

  • 統一團隊成員的開發環境
    讓開發環境和線上 Production 環境相似
  • 避免 『在我的電腦是好的』 情況
  • 記錄環境設定
    可以利用 GIT 記錄環境設定變動
  • 降低升級服務各種相依性錯誤的故障問題
    e.g. 升級 PHP 後 DB driver 不能用
  • 快速抽換版號
    e.g. 因各種不同情況變更 PHP 版本
  • 超快速啟動!
  • 建製時間快速
    在 dockerfile 完備的情況下, 10~30 分鐘內就可以建立完成
    如果把 docker image 生成 push 至 repository, 建製速度會更快!!
  • 跨平台 mac, windows, linux-like 都可用
  • 保護本機環境,不要讓開發環境汙染到一般作業環境
    不會因為手誤把本機環境、os 弄壞,反而造成電腦一般事務無法操作 😭

Docker 的缺點

當然有優點就有缺點

  • 需要學習 docker 架構
    dockerfile, docker-compose.yml 寫法
  • 需要有人維護 dockerfile
    沒有不需要維護的東西 😭
  • 回應速度問題
    在 Mac / Windows 環境下因為檔案格式不同,docker 在檔案轉換、傳輸時有緩慢問題。慢的感覺因人而異

    詳細的解決方式 https://github.com/EugenMayer/docker-sync

開始使用 Docker 建立本機開發環境

Docker 的基本構成這邊就不提了
主要使用 dockerfile、docker-copmose

👉 直接到 GitHub clone 製作好的 dockerfile,cscolabear/docker-dev

git clone https://github.com/cscolabear/docker-dev

詳細安裝說明可以參照 README.md
https://github.com/cscolabear/docker-dev/blob/master/README.md

其中~ 幾個 Branch 各有特定功能、服務
可以依需要的服務自行 merge~

目前~ 少少幾個 service 和 ext

簡單來說 clone 後執行
docker-compose up -d
就可以了~

PS: 因為還在調整中,所以我還沒封裝為 docker image 供人下載
docker-compose up -d 開始建製 image 和 container
稍等一段時間後,可以看到 4 個 container 建製完成

接著可以連接進入 workspace 這個 container
(實際路徑,請參照你安裝的位置)

$ cd ~/Projects/ && clear && docker-compose exec workspace bash

連接成功之後,可以在 container 內做各種操作如下圖 ~

docker 內執行 fpm test
在 docker 內執行 npm test,得到測試結果
docker dev oh-unit
在 docker 內執行 phpunit

其它更多詳細安裝、操作可以從 README.md 找到~

Docker 之外的替代方案

當然~ 就上面提到 Docker 的缺點 你也不一定要選用 Docker
以 PHP 開發來說的話~,替代方案還有:
Vagranthttps://www.vagrantup.com
Valethttps://laravel.com/docs/master/valet
Homesteadhttps://laravel.com/docs/5.8/homestead
VM – virtual machine 在虛擬機裡自己裝開發環境 XD

不過老實說~ 還是 Docker 泛用性比較高 😓

Ref.
LaraDock – https://laradock.io/
建置、參考

結論

  • 無論如何還是要熟悉環境安裝
  • 減少開發環境維護的時間
  • 隔離開發與一般作業環境
  • 記錄環境設定、安裝版本

2 Comments

Leave a Reply