docker 容器化 : PHP5.6專案容器化開發實作
本篇將紀錄如何將PHP5.6專案移至docker中開發,並且重新包裝docker image加入需要的php extension
參考資料 :
https://www.minwt.com/webdesign-dev/html/20606.html
https://adon988.logdown.com/posts/7800794-docker-installation-and-laradock-introduction
https://ithelp.ithome.com.tw/articles/10191016
如果你還沒有看過前面的文章請先閱讀 : MAC安裝Docker
-
選擇適當的docker image
要將PHP專案放入docker中運行我們可以直接選擇現成的docker image來跑就行了,所以可以在docker hub上找到許許多多與PHP相關的image,理論上直接pull下來都可以執行,
我這邊挑選image的重點有兩個,1 最好是official 官方的image 2 版本一定要符合
所以在docker hub上找到了由官方提供的PHP + Apache的image,而且幾乎所有版本都有
點進去後就可以看到右手邊有提示如何開始 : docker pull php
但是呢我們必須要指定使用PHP的版本因此可以使用1docker pull php:5.6-apache當然也可以直接docker run image,反正local找不到會自己上docker hub尋找image
1docker run -d -p 8800:80 -v /var/html:/var/www/html php:5.6-apache --name my_apache但是,很遺憾的跑當然能跑,這時候只要在電腦的/var/html/資料夾中加入一個info.php(<?php phpinfo(); ?>)
然後打開瀏覽器 : http://localhost:8800/,就可以看到下面的畫面代表PHP可以正確執行,但是實際將專案放入資料夾中會發現,確實可執行但是少了許多的PHP 以及apache 的extension
所以,我們必須開始著手把缺少的extension加入到image中才可以讓專案正常的跑起來,接下來的範例將舉例把pdo mysql_pdo mysql mysql_li 這些extension以及apache urlrewrite mode加入到image中 -
重新打包docker image
首先,需要準備一個名為Dockerfile的文字檔,內容描述要在哪個image中加入哪些指令,舉例來說我們在/var/docker/ 這個資料夾中加入Dockerfile檔案,內容如下
123FROM php:5.6-apacheRUN docker-php-ext-install mysqli pdo pdo_mysql mysqlRUN a2enmod rewrite
FROM 表示要以哪個docker image為基礎重新包中
RUN docker-php-install 表示要加入的php extension
RUN a2enmod rewrite 表示開啟apache的 url rewrite功能
檔案存檔後接下來透過終端機切換到這個檔案的目錄
1cd /var/docker/
接著透過下面的指令重新包裝docker image
1docker build -t my_apache . --no-cache
其中my_apache是重新包裝過後的docker image name,可以自由命名,–no-cache表示不要讀取快取檔案
接下來就等執行完畢就可以重新使用新的image了 -
使用新的docker image
接下來當然就是用重新包裝過的image來跑了,舉例來說像是下面的指令
1docker run -d -p 8800:80 --name apache_service -v /var/Documents/PHP/my_project:/var/www/html -v /var/Documents/PHP/logs:/var/log/apache2 my_apache
–name 表示docker 容器跑起來後的名稱,可以透過docker ps -a 中查詢到
兩個-v 分別是把專案資料夾映射到docker中的document root以及把docker中的apache log帶回到本機資料夾,方便查閱錯誤訊息
最後的my_apache就是重新包裝過的docker image名稱了
最後就可以在瀏覽器中透過http://localhost:8800/ 看到你的網站了,而且extension也已經正確啟動了