文章簡介
在前面幾篇文章中,我們使用dnmp搭建了一個完整的docker開發環境。這篇文章接著分享如何在dnmp的基礎上搭建一個自定義的PHP容器,實現多版本的PHP容器。
前期準備
首先我們下載git@github.com:bruceqiq/php_dnmp.git">dnmp倉庫。
複製docker-compose.sample.yml檔案為docker-compose.yml
cp docker-compose.sample.yml docker-compose.yml
複製env.sample為.env
cp env.sample ./env
修改配置
首先我們根據需要在.env檔案中配置好PHP容器需要對映的埠等資訊。新增如下配置(可放在任意位置):
#
# PHP73
#
PHP73_VERSION=7.3.22
PHP73_PHP_CONF_FILE=./services/php73/php.ini
PHP73_FPM_CONF_FILE=./services/php73/php-fpm.conf
PHP73_LOG_DIR=./logs/php
PHP73_EXTENSIONS=pdo_mysql,mysqli,mbstring,gd,curl,opcache
PHP_SWOOLE1_PORT=9504
PHP_SWOOLE2_PORT=9505
PHP_SWOOLE3_PORT=9506
PHP_SWOOLE4_PORT=9507
PHP_SWOOLE5_PORT=9508
PHP_SWOOLE6_PORT=9509
這裡的swoole可以根據自己的需要定義,比如你只需要對映一個埠9505,直接值配置一個9504。只需要與下面的.docker-compose.yml一一對應起來即可。
接下來,配置doker-compose.yml檔案。只需要新增如下內容即可:
php73:
build:
context: ./services/php
args:
PHP_VERSION: php:${PHP73_VERSION}-fpm-alpine
CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
PHP_EXTENSIONS: ${PHP56_EXTENSIONS}
TZ: "$TZ"
container_name: php73
ports:
- "${PHP_SWOOLE1_PORT}:9504"
- "${PHP_SWOOLE2_PORT}:9505"
- "${PHP_SWOOLE3_PORT}:9506"
- "${PHP_SWOOLE4_PORT}:9507"
- "${PHP_SWOOLE5_PORT}:9508"
- "${PHP_SWOOLE6_PORT}:9509"
這裡的container_name可以根據自己的需要來配置,建議根據你的PHP版本號定義容器名字。
安裝容器
通過上面簡單的配置,我們接下來執行如下命令,就可以搭建一個完整的PHP容器了:
docker-compose up
安裝完之後,檢視效果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0e1376e67300 dnmp_php73 "docker-php-entrypoi…" 35 hours ago Up 42 minutes 9000/tcp, 0.0.0.0:9504-9509->9504-9509/tcp php73
證明我們的自定義容器安裝成功了,接下來,我們就配置nginx如何使用該容器。
使用容器
使用該容器超級簡單,只需要在nginx配置時,指向我們建立好的容器即可。
server {
listen 80;
server_name baidu.com;
root /www/mini-program-server/web;
index index.php index.html;
access_log /var/log/nginx/nginx.baidu.error.log;
error_log /var/log/nginx/nginx.baidu.access.log;
include rewrite/thinkphp.conf;
location ~ \.php$ {
# 只需要將這裡的PHP73寫成我們建立好的容器名稱即可。
fastcgi_pass php73:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
最終結論
通過該方式,我們建立其他的容器也是類似的方式,只要配置好即可。
本作品採用《CC 協議》,轉載必須註明作者和本文連結