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

  1. 選擇適當的docker image

    要將PHP專案放入docker中運行我們可以直接選擇現成的docker image來跑就行了,所以可以在docker hub上找到許許多多與PHP相關的image,理論上直接pull下來都可以執行,
    我這邊挑選image的重點有兩個,1 最好是official 官方的image 2 版本一定要符合
    所以在docker hub上找到了由官方提供的PHP + Apache的image,而且幾乎所有版本都有
    docker hub
    點進去後就可以看到右手邊有提示如何開始 : docker pull php
    docker hub
    但是呢我們必須要指定使用PHP的版本因此可以使用

    當然也可以直接docker run image,反正local找不到會自己上docker hub尋找image

    但是,很遺憾的跑當然能跑,這時候只要在電腦的/var/html/資料夾中加入一個info.php(<?php phpinfo(); ?>)
    然後打開瀏覽器 : http://localhost:8800/,就可以看到下面的畫面

    phpinfo代表PHP可以正確執行,但是實際將專案放入資料夾中會發現,確實可執行但是少了許多的PHP 以及apache 的extension
    所以,我們必須開始著手把缺少的extension加入到image中才可以讓專案正常的跑起來,接下來的範例將舉例把pdo mysql_pdo mysql mysql_li 這些extension以及apache urlrewrite mode加入到image中

  2. 重新打包docker image

    首先,需要準備一個名為Dockerfile的文字檔,內容描述要在哪個image中加入哪些指令,舉例來說我們在/var/docker/ 這個資料夾中加入Dockerfile檔案,內容如下


    FROM 表示要以哪個docker image為基礎重新包中
    RUN docker-php-install 表示要加入的php extension
    RUN a2enmod rewrite 表示開啟apache的 url rewrite功能
    檔案存檔後接下來透過終端機切換到這個檔案的目錄

    接著透過下面的指令重新包裝docker image

    其中my_apache是重新包裝過後的docker image name,可以自由命名,–no-cache表示不要讀取快取檔案
    接下來就等執行完畢就可以重新使用新的image了
  3. 使用新的docker image

    接下來當然就是用重新包裝過的image來跑了,舉例來說像是下面的指令


    –name 表示docker 容器跑起來後的名稱,可以透過docker ps -a 中查詢到
    兩個-v 分別是把專案資料夾映射到docker中的document root以及把docker中的apache log帶回到本機資料夾,方便查閱錯誤訊息
    最後的my_apache就是重新包裝過的docker image名稱了
    最後就可以在瀏覽器中透過http://localhost:8800/ 看到你的網站了,而且extension也已經正確啟動了
    phpinfo