1. 程式人生 > >docker搭建php,nginx,mysql環境

docker搭建php,nginx,mysql環境

好久沒有更新部落格了,有兩三年沒有寫了。
最近想自己搭個網站,學了兩天docker技術,終於不用自己去配各種環境了,docker還是比較方便的,值得研究一把。

怎麼安裝不講了,幾個命令搞定,網上一大把,pull下來run起來就可以了。

docker的原則,一個容器只起一個服務,開始我還想一個容器把所有的環境跑起來呢,其實這樣不好。整個lnmp環境就是多容器協作來完成。
以前我配置伺服器很麻煩,系統不一樣,環境不一樣,開發伺服器和測試機不一樣,配起來也有差異,很煩人。
現在用docker,有現成的映象,就拿過來用嘛,沒必要全部自己搞一遍。

  1. 裝nginx,docker pull nginx,run起來
  2. 裝php-fpm,docker pull php:7.0-fpm,run起來
  3. 裝mysql,docker pull mysql:5.6,run起來
  4. 裝phpmyadmin,docker pull phpmyadmin/phpmyadmin,run起來

這樣每一個都能單獨run起來了
要協作怎麼辦,用link引數來解決,怎麼link自己搜。

這裡只講重點,php和nginx協作,nginx裡面配置的目錄引數是要傳給php-fpm的,傳過去的網站目錄php容器要能識別,所以你的宿主機器裡面的網站目錄www要掛到php和nginx對應的地方,然後nginx裡面的目錄配置要用php的目錄配置,不然php容器不認識,就無法解析你的php程式碼。不知道說清楚了沒有。nginx開啟php支援,配置fastcgi_param,關鍵就是這個東西。網上沒一個人能講明白的。

location ~ \.php$ {
    fastcgi_pass   php:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
    include        fastcgi_params;
}

就是這個/var/www/html,這個目錄是php容器裡面的內容目錄,為什麼在nginx容器裡面這樣配置,就是nginx要把這個引數傳給php容器,php容器他只認識自己的目錄結構,nginx裡面的內容目錄和php裡面的內容目錄預設是不一樣的,nginx的網站目錄預設是/usr/share/nginx/html,不能把這個東西傳過去,否則php不認識,會告訴你找不到檔案。
只有這一個坑,其他的網上搜一大把。

如果你熟悉了docker,看了我這篇文章解了這個坑,配一個一模一樣的lnmp環境不需要5分鐘,超過5分鐘你來打我的臉。