1. 程式人生 > >用Docker啟動php-5.6 fpm服務配合宿主機nginx運行php測試環境

用Docker啟動php-5.6 fpm服務配合宿主機nginx運行php測試環境

stc sendmai 本機 png ins pen 本地 ash params

因為Ubuntu18.04默認的openssl版本就是1.1.0, 而PHP5.6無法在openssl 1.1下編譯 "PHP 5.6 is receiving only security fixes and OpenSSL 1.1 is not supported. Please use PHP 7.x if you want to use OpenSSL 1.1", 所以在Ubuntu18.04下需要通過docker配合宿主機配置php5.6的環境.

在docker hub上PHP官方提供的docker image系列有單獨的php, 和apache打包的php, 以及提供fpm服務的php, 因為本機已經安裝了nginx, 所以只需要用docker提供fpm服務就可以.

下載並運行

# 下載docker image
docker pull php:5-fpm

# 創建容器, 因為這裏是本機開發環境, 使用默認的網絡
docker run -d --name phpfpm -v /home/milton/somewhere/wwwroot:/var/www/html php:5-fpm

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

# 測試一下服務端口是否打開
telnet 172.17.0.2 9000

修改本地nginx配置

因為php-fpm的服務要修改為docker提供, 而且在docker中php文件的目錄是 /var/www/html, 而本地原先使用的是/home/milton/somewhere/wwwroot 需要修改一下配置文件.

原先的配置

        location ~ \.php$ {
            root           /home/milton/somewhere/wwwroot;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /$document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        location / {
            root   /home/milton/somewhere/wwwroot;
            index  index.html index.htm index.php;
        }
    }

需要修改的是 fastcgi_pass 和 fastcgi_param 這兩行, 修改為

fastcgi_pass   172.17.0.2:9000;
fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;

.寫一個phpinfo, 重啟nginx後, 看看是否能正確被解析.

安裝必要的工具和擴展

默認的php:5-fpm不帶ifconfig, ping等工具, 也缺一些常用的擴展, 需要自行安裝

# 進入docker命令行
docker exec -it phpfpm /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 安裝擴展, 這個腳本會自動編譯並配置指定的擴展

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頁面查看是否生效.

docker的網絡

因為docker所處於的默認bridge, IP:172.17.0.x 是可以直接訪問宿主機以及外網的, 後續的使用中, 宿主機的服務就要通過宿主機的外部IP而不是127.0.0.1來訪問.

用Docker啟動php-5.6 fpm服務配合宿主機nginx運行php測試環境