如何使用docker搭建PHP环境
时间:2022-07-25
本文章向大家介绍如何使用docker搭建PHP环境,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
文章简介
在前面几篇文章中,我们使用dnmp搭建了一个完整的docker开发环境。这篇文章接着分享如何在dnmp的基础上搭建一个自定义的PHP容器,实现多版本的PHP容器。
前期准备
首先我们下载git@github.com:bruceqiq/php_dnmp.git。
复制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;
}
}
最终结论
通过该方式,我们创建其他的容器也是类似的方式,只要配置好即可。
- 如何在CDH集群使用HDFS快照
- Sentry赋予server1权限给hive以外用户时ACL不同步问题分析
- 如何使用Java连接Kerberos的HBase
- 香香的xss小记录(一)
- UAF Writeup - pwnable.kr
- 如何使用Nginx实现Impala负载均衡
- pwnhub年前最后一战——“血月归来”writeup
- MHN中心服务器搭建与树莓派蜜罐部署
- 如何在CDH中启用Spark Thrift
- 让你的以太坊 DApps 盈利的 6 种方法
- 赛博地球杯初赛第三名,ChaMd5安全团队的writeup
- 如何在Windows Server2012搭建DNS服务并配置泛域名解析
- 如何使用HBase快照实现跨集群全量与增量数据迁移
- 为什么你应该学习搭建区块链应用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JavaScript中arguments
- js通过class name获得元素
- 基于JavaScript的rce反弹shell漏洞
- 《剑指offer》第11天:矩形覆盖
- 《剑指offer》第12天:旋转数组的最小数字
- 不同版本的Google Analytics做跨站跟踪
- 记一次 base64 图片存储引发后端查询接口性能断崖式下降问题全程解析
- JDBC+MySQL实战
- LeetCode 08字符串转整数&&09回文数
- React 17 RC 版发布:无新特性,却有新期待!
- 《剑指offer》第13天:两个数组的交集
- Spring的Controller是单例还是多例?怎么保证并发的安全
- JQUERY获取loaded 宽高这么变态
- 动态规划的楼层算法
- 58.Vue 使用render方法渲染组件