用Docker打造多版本PHP运行环境
2019獨角獸企業重金招聘Python工程師標準>>>
背景
隨著Docker的不斷成熟,越來越多的站長以及運維人員選擇Docker構建程序運行環境,另外由于國內的云服務廠商通常在新購主機時會給較大的優惠,而續費則優惠很少,本著盡量節省成本的原則,借助Docker自動構建運行環境,成為一個比較好的選擇。本文針對的場景是一臺云主機上運行多個版本的PHP的情況,LNMP架構。
宿主機配置
這里把運行Docker服務的服務器叫宿主機,目前Docker對于宿主機的系統是有要求的,簡單來說,Centos 需要7以上,Ubuntu需要16以上。所以在購買或者升級云主機的系統時,需要注意系統的版本,通常選最新的版本是沒錯的,除非有特殊的需求。接下去以Centos為例,安裝Docker的步驟如下:
這個命令將拉去hello-world鏡像并運行,將輸出hello world消息 7. 讓Docker隨系統啟動
sudo systemctl enable docker至此,宿主機算配置完畢啦。
編寫docker-composer.yml
docker composer 適合單主機的情況下進行多容器編排,代碼已經全部放到馬云了。 地址:https://gitee.com/linwx/Docker-LNMP
幾個關鍵點
PHP版本指定
不同版本的PHP,用不同的服務名來標志,如php-fpm,和php54-fpm. 然后在nginx里連接的時候,指定相應的名字:
links:- php-fpm:fpm- php54-fpm:fpm54在相應的配置文件中,如site1站點是運行在PHP7版本的,對應的fastcgi_pass參數是fpm:9000:
location ~ \.php$ {fastcgi_split_path_info ^(.+\.php)(/.+)$;fastcgi_pass fpm:9000;fastcgi_index index.php;include fastcgi_params;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_intercept_errors off;fastcgi_buffer_size 16k;fastcgi_buffers 4 16k;}site2站點是運行在PHP5.4版本上的,對應的fastcgi_pass參數是fpm54:9000:
location ~ \.php$ {root /var/www/html/bbs;fastcgi_pass fpm54:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;fastcgi_read_timeout 600;}容器的時間
涉及到時間和日期的操作,需要關注容器的默認時區,比如nginx的日志輸出的時間,php的計劃任務運行的時間,因此需要在容器編譯的時候,就指定好默認的時區,在nginx和cron的dockerfile里可以看到對應的命令:
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtimecron容器
本著每個容器運行一個服務的原則,本文把cron服務也單獨成一個容器,為了讓cron容器正常運行,需要注意2點,一是容器的時區,上文已經提過;二是計劃任務的列表,需要讓在編譯的時候寫入,相應的dockerfile如下:
ADD crontab /etc/cron.d/cron RUN chmod 0644 /etc/cron.d/cron RUN crontab /etc/cron.d/cron CMD ["cron", "-f"]使用cron -f 命令,讓cron保持在前臺運行
快速使用
如果不想了解那么多細節,可以在配置完宿主機后,直接git clone https://gitee.com/linwx/Docker-LNMP.git 然后配置相應的站點nginx配置文件,就可以使用docker-compose up -d --build啟動所有服務啦。
轉載于:https://my.oschina.net/u/248080/blog/1622690
總結
以上是生活随笔為你收集整理的用Docker打造多版本PHP运行环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统无ifconfig,一条命令获取本机
- 下一篇: if else和switch的效率