工具

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 內執行 npm test,得到測試結果
在 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/
建置、參考

結論

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

可樂

View Comments

Recent Posts

plain PHP 搭配 Slack 進行錯誤追蹤、回報(Error Tracking、Error Handling)

錯誤追蹤、回報非常重要,看到的錯誤才知道怎麼修。現今 PHP 流行的 Laravel 有很好的 Error Tracking, Error Handling。但 plain PHP 怎麼辦呢? 在 production 為了安全考量會設定…

4 years ago

Drone CI/CD 配合 Github 使用 Rsync 進行 Deploy

jenkins、circleci、travis 或 Gitlab CI 皆為目前暫知名的 CI/CD 服務,各自缺點也不言而喻...過於肥大、收費略高(?)、速度不夠快執問題...此時使用 go language 開發的 Drone 就出現啦,完全 docker 容器化的運行方式讓整個 CI…

4 years ago

Nginx brotli 設定

網頁壓縮技術中 gzip 很好用,deflate 己經過時,但你聽過 brotli 嗎? 有著比 gzip 更好、更快的壓縮效率。看起來利大於弊有什麼不用他的理由嗎?簡單從優、缺點來看 brotli!到底 brotli 布羅特利是什麼、如何設定呢。 目前大多的 web server…

4 years ago

本機使用 Docker 容器內 PHP (wrapper/expose PHP)

為什麼要讓本機使用 Docker 內 PHP? 情境... docker 容器內用的是 PHP 7.4 但你的開發本機還在跑 PHP 5.6 或是更舊,因為 dockerize 的關係會將所有相關環境都轉移到…

4 years ago

為什麼你需要密碼管理工具

為什麼你需要密碼管理工具現代人一天下來需要輸入多少組密碼,工作與生活己經和密碼密不可分! 除了足夠全安的密碼,密碼記錄、儲存的方式又足夠安全嗎?密碼管理工具可以帶來什麼幫助呢? 為什麼你需要密碼管理工具 資安問題!!大多人說著沒做壞事不怕被偷資料、監聽。嚴重曝露出現代人的基本科技素養的低落和無知 🤯 密碼的使用無所不在!! 行動裝置的普及,APP 、手機遊戲、銀行帳戶所有和生活相關的東西都需要密碼!!facebook, line 只要打開 APP 也會輸入密碼只是他是自動輸入、一般情況不可視 (auth token) 一般人最常發生的密碼資安問題…

4 years ago

簡單使用 Mysql Partition 優化查詢

mysql 資料表分區 mysql table partition 從架構上調整 mysql 的查詢效率。mysql DB 的優化可以簡單也能複雜,除了調整設定值。也可以透過水平分割(Horizontal Partitioning)、垂直分割(Vertical Partitioning) 分庫或分表將資料分散儲存減少資料搜尋、group by 時的效能消耗。拆開批次處理,理論上效率都會變好,本文就水平分割的…

4 years ago