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

由於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的環境.php

在docker hub上PHP官方提供的docker image系列有單獨的php, 和apache打包的php, 以及提供fpm服務的php, 由於本機已經安裝了nginx, 因此只須要用docker提供fpm服務就能夠. html

下載並運行mysql

# 下載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配置nginx

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

原先的配置sql

        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 這兩行, 修改成docker

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

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

安裝必要的工具和擴展bash

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

若是是安裝pecl擴展, 這個image已經帶了pecl, 直接運行pecl命令, 注意要指定版本, 以避免和當前php版本不兼容

pecl install redis-4.0.1
# 中途提示選no, 由於須要額外的.h文件支持, 沒安裝而選yes的話會設置失敗
enable igbinary serializer support? [no] : 
enable lzf compression support? [no] : 
# 啓用
docker-php-ext-enable redis

.

docker的網絡

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

相關文章
相關標籤/搜索