CentOS7 Docker配合宿主機nginx運行多版本php環境

PHP Docker 鏡像

主機通常都是直接yum配置好的Nginx+PHP-FPM+Mysql,因爲業務須要,本來環境裏面的php7,不能兼容遺留的php5.x的老程序了,可是又想在同一主機上跑起來,問題來了:php

  1. 現有直接安裝的Nginx、php7-fpm、mysql
  2. A 程序php 5.6編寫 須要fpm
  3. B 程序php 5.3 ,並且是用apache作的url rewrite
  4. A、B程序還要連接本機mysql數據庫

因此個人想法,看圖:html

Dokcer 安裝

前置任務配置啓動docker,請參考如下內容mysql

選擇php

在docker hub上PHP官方鏡像,提供的docker image系列有nginx

  • php:<version>-cli命令行版本,單獨的php
  • php:<version>-apache 和apache打包的php
  • php:<version>-fpm 提供PHP-FPM服務的php

由於本機已經安裝了nginx, 因此只須要用php:5.3-apachephp:5.6-fpm就能夠了。sql

連接Nginx

配置 php5.3+Apache

啓動 php5.3-apache

docker run --name php53apache -v /srv/www/apache:/var/www/html -v /srv/www/apache/php.ini:/usr/local/lib/php.ini -p 127.0.0.1:8080:80 -d  --restart=always --privileged=true php:5.3-apache

nginx配置

原理是反向代理docker

...
    location / {
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:8080;
    }
...

配置 php5.6-FPM

啓動php5.6-fpm

docker run --name php56fpm -v /srv/www/php56:/var/www/html -v /srv/www/php56/php.ini:/usr/local/lib/php.ini -p 127.0.0.1:9001:80 -d  --restart=always --privileged=true php:5.6-fpm

nginx配置

原理仍是fast cgi到fpm上,須要注意到是文件地址,必須爲容易內部地址數據庫

...
        location ~ \.php$ {
            root           /var/www/html; ### 這裏必須指定容器內部的地址,默認就是這個路徑
            fastcgi_pass   127.0.0.1:9001; ###個人端口是這個,按需修改
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /$document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
...

安裝必要的工具和擴展

默認的鏡像裏面不帶ifconfig, ping等工具, 也缺一些經常使用的擴展, 須要自行安裝,以php5.6爲例,apache

# 進入docker命令行
docker exec -it php56fpm /bin/bash
 
# 安裝 ifconfig, ping
apt update
apt install net-tools iputils-ping
 
# 安裝依賴(安裝gd擴展等必需要先安裝系統依賴)
apt install libfreetype6-dev libmcrypt-dev libpng-dev libjpeg-dev libpng-dev sendmail zlib1g-dev

用 docker-php-ext-install 安裝擴展, 這個腳本會自動編譯並配置指定的擴展bash

docker-php-ext-install mysql
docker-php-ext-install gd
docker-php-ext-install zip
docker-php-ext-install mbstring
docker-php-ext-install pdo_mysql

重啓docker後, 刷新phpinfo頁面查看是否生效.網絡

鏈接Mysql

因爲Docker是橋接網絡,因此從容器內向外鏈接,要鏈接外部主機的橋接地址

# 查看一下實際分配的IP地址
docker network inspect bridge

一般宿主主機的地址是172.17.0.1,因此經過docker運行的php程序要想鏈接宿主主機數據庫應該是這個地址。

數據庫對用戶登陸受權,也要是鏡像的橋接地址,而不是localhost之類的本機地址。

本文由 ez 創做,採用 知識共享署名 3.0 中國大陸許可協議 進行許可。 可自由轉載、引用,但需署名做者且註明文章出處。

相關文章
相關標籤/搜索