docker nginx 多站台多版本php開發環境

關於docker容器化的開發環境之前已經有多篇說明

使用laradock的方式 : laradock : laravel專案容器化開發實作

自建php5.6 docker image : docker 容器化 : PHP5.6專案容器化開發實作

自建ubuntu php7.3 for laravel : [作品][docker image]ubuntu18.04-php7.3-apache-for-laravel

今天要說明的是將以上幾件事情整合,透過docker compose 將容器整合並且降低附載資源

參考資料 :

https://learnku.com/laravel/t/10292/how-do-i-access-multiple-laravel-projects-under-localhost

https://gist.github.com/noeldiaz/08a1211a7c47f21f7083

好的,參考資料列出後接下來要說明一下本篇文章架構出來的開發環境與上述先前文章時做的有哪些不同

首先,之前的做法是透過不同PHP環境需求開啟多組docker,以及不同MySQL版本需求開啟多個不同版本的MySQL

而這次,則是透過docker compose 撰寫yml檔案來控制多組docker打開與關閉,另外,本次也更新的laravel以及PHP5.6的image環境

透過PHP7.3-fpm以及PHP5.6-fpm兩個兩個docker image提供純PHP環境,而伺服器的部分則是統一透過一台NginX提供服務,不再是不同環境開啟多台Apache伺服器,降低系統所需要的資源

文件結構

dev_compose 資料夾存放docker-compose.yml用來描述docker compose 如何開啟多組docker container,而.env則是用來儲存會需要用的路徑參數

nginx 資料夾提供一個Dockerfile用來描述nginx image如何build以及一個default.conf作為nginx的設定檔掛載進入container環境中

php56以及php73_laravel分別提供php5.6以及php7.3所需要的Dockerfile即可

另外,MySQL5.6以及MySQL5.7沒有特別描述,只有拉取docker hub上相對應的版本即可,所以不用任何Dockerfile描述檔

接著,我們一個環境一個環境來看

php73_laravel

主要透過php:7.3-fpm image,再另外安裝其他我們需要的套件進去即可,Dockerfile可以參考如下

php56

與php7.3項同,主要透過php5.6-fpm在安裝其他需要的套件,Dockerfile如下

nginx

nginx相對複雜一些,透過Dockerfile抓取nginx:1.17.7版本,並且安裝vim以及nano

default.conf用來描述nginx需要啟動多少個伺服器,以及port號,還有相對應要處理PHP的位置,詳細說明直接參考註解即可

80port 用於laravel開發,8800port則用於php5.6舊專案的維護,值得一提的是如何在80port中透過不同的專案路徑來瀏覽不同的laravel專安是本次花最多時間鑽研的項目

dev_compose

.env將儲存yml檔案中需要用到的參數

docker-compose.yml 將是本次的重點,如下

抓重點 :

這次總共開啟php73_laravel php56 mysql56 mysql57 nginx 等五個container來使用

其中build參數,將是指定要用哪個路徑底下的Dockerfile來產生container,但是像mysql只要指定image就可以了

volumes參數如同docker run 中的-v,無論是php還是nginx都必須將${STORAGE_PATH}指定到/var/project

而我也將所有container network 設定為dev,讓所有container可以互通

最後volumes中指定mysql57-data mysql56-data 兩者用於儲存資料庫檔案,避免container關閉後資料遺失

最後,完成後使用 docker compose up -d 及可以將所有container全部開啟,docker compose down 可以全部關閉

當然第一次開啟的時候docker會自動透過build所有image

以上,打完收工!