Docker如何快速搭建PHP+Nginx+Mysql环境
发布时间 - 2023-05-14 00:00:00 点击率:次准备
创建目录
mkdir -p /Users/mwqnice/Documents/Program/phpProgram && mkdir -p /Users/mwqnice/Documents/Program/docker/php/php7.1.33/conf && mkdir -p /Users/mwqnice/Documents/Program/docker/php/php7.1.33/logs && mkdir -p /Users/mwqnice/Documents/Program/docker/nginx/conf.d && mkdir -p /Users/mwqnice/Documents/Program/docker/mysql/conf && mkdir -p /Users/mwqnice/Documents/Program/docker/mysql/logs && mkdir -p /Users/mwqnice/Documents/Program/docker/mysql/data && cd /Users/mwqnice/Documents/Program/docker/nginx/conf.d && sudo touch default.conf
配置PHP
拉取php-fpm镜像
docker pull php:7.1.33-fpm #版本7.1.33
启动php-fpm
docker run --name mwq-php \ -v /Users/mwqnice/Documents/Program/phpProgram:/var/www/html \ -v /Users/mwqnice/Documents/Program/docker/php/php7.1.33/conf:/usr/local/etc/php \ -v /Users/mwqnice/Documents/Program/docker/php/php7.1.33/logs:/phplogs \ -d --link mwq-php php:7.1.33-fpm
--name mwq-php是容器的名字
/Users/mwqnice/Documents/Program/phpProgram是本地项目目录,/var/www/html是容器内项目存储目录
配置Nginx
拉取Nginx镜像
docker pull nginx:latest //拉取最新版本
配置nginx.conf
server {
listen 80;
server_name localhost;
set $root /var/www/html/localhost;
#access_log /tmp/nginx/logs/localhost.net.access.log main;
#error_log /tmp/nginx/logs/localhost.net.error.log notice;
location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
root $root;
}
location / {
root $root;
index index.php index.html index.htm;
if ( -f $request_filename) {
break;
}
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php/$1 last;
break;
}
}
location ~ .php(.*)$ {
root $root;
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass mwq-php:9000;
#fastcgi_index index.php;
fastcgi_index index.php?IF_REWRITE=1;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $script;
include fastcgi_params;
}
location ~ /.ht {
deny all;
}
location ~ /.svn {
deny all;
}
location ~ /.git/ {
deny all;
}
location ~ /Logs/ {
deny all;
}
location ~ /Logs/.* {
}
location ~ /Logs/.* {
deny all;
}
location ~ .*.(sql|tar.gz|zip|gz|tar|rariso|rpm|apk|bak)$ {
deny all;
}
}启动Nginx
docker run --name mwq-nginx -p 80:80 -d \ -v /Users/mwqnice/Documents/Program/phpProgram:/var/www/html:ro \ -v /Users/mwqnice/Documents/Program/docker/nginx/conf.d:/etc/nginx/conf.d:ro \ --link mwq-php:php \ nginx
配置MySQL
拉取MySQL镜像
docker pull mysql:5.7.36 #版本5.7.36
启动MySQL
docker run -p 3306:3306 --name mwq-mysql \ -v /Users/mwqnice/Documents/Program/docker/mysql/conf:/etc/mysql/conf.d \ -v /Users/mwqnice/Documents/Program/docker/mysql/logs:/logs \ -v /Users/mwqnice/Documents/Program/docker/mysql/data:/mysql_data \ -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.36
-p 3306:3306: 将容器的3306端口映射到主机的3306端口
-v /Users/mwqnice/Documents/Program/docker/mysql/conf:/etc/mysql : 将主机/Users/mwqnice/Documents/Program/docker/mysql/conf目录挂载到容器的/etc/mysql
-e MYSQL_ROOT_PASSWORD=123456: 初始化root用户的密码
-d: 后台运行容器,并返回容器ID
常见问题
1、thinkphp报错 Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'
缺少pdo_mysql扩展,连接数据库失败
找到php.ini,docker中在/usr/local/etc/php中,复制一份php.ini,增加extension=pdo_mysql.so,重启php-fpm,如果还是不行,访问phpinfo页面,查看是否有pdo_mysql
如果没有,说明没有pdo_mysql扩展,需要编译
编译方法如下:
到docker的php容器中,在php文件夹下:
docker-php-ext-install pdo pdo_mysql
如果报 /usr/local/bin/docker-php-ext-enable: cannot create /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini: Directory nonexistent
解决方案:直接在/usr/local/etc/php目录下面新建 conf.d目录和对应的docker-php-ext-pdo_msql.ini文件
其中docker-php-ext-pdo_msql.ini的内容为:
extension=pdo_mysql.so
2、thinkphp 报错 STORAGE_WRITE_ERROR:./Application/Runtime/Cache/Home/4e64ea6a2012f26b832b14cbc2152b28.php
是因为服务器缓存文件夹的操作权限不够,即Runtime没有权限,把缓存文件全部删除,再给Runtime777权限就行了
sudo chmod 777 Runtime 或者直接对代码库最外层设置777权限
3、thinkphp验证码图片显示不出来
缺少gd扩展,安装:
docker-php-ext-install gd
可能以下报错:
If configure fails try --with-webp-dir=If configure fails try --with-jpeg-dir=configure: error: png.h not found.
安装:
apt-get install libpng-dev libjpeg-dev
再次执行:
// 增加freetype配置 docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include --with-jpeg-dir=/usr/include // 安装 docker-php-ext-install gd
php.ini增加php_gd2.so
phpinfo中显示gd库
注意如果phpinfo的gd库中没有freetype的支持,验证码依然显示不出来, 会报错:
Call to undefined function Think\imagettftext()
如果gd库中没有freeType,则按照以下步骤进行:
docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include
重新编译:
docker-php-ext-install gd
如果报错: configure: error: freetype-config not found. 运行:
apt-get -y install libfreetype6-dev
然后再继续运行上面的命令。gd库中有了freetype,则验证码显示正常了
# docker
# php
# nginx
# mysql
# html
# thinkphp
# if
# try
# Directory
# Error
# GD库
# class
# var
# undefined
# function
# 数据库
# 报错
# 镜像
# 验证码
# 库中
# 是因为
# 不出来
# 如果没有
# 然后再
# 重启
# 最新版本
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
网页设计与网站制作内容,怎样注册网站?
js实现获取鼠标当前的位置
Laravel如何处理文件下载请求?(Response示例)
重庆市网站制作公司,重庆招聘网站哪个好?
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
网站建设保证美观性,需要考虑的几点问题!
Swift开发中switch语句值绑定模式
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
高端网站建设与定制开发一站式解决方案 中企动力
Bootstrap整体框架之JavaScript插件架构
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel如何为API生成Swagger或OpenAPI文档
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
如何快速搭建高效服务器建站系统?
如何快速生成ASP一键建站模板并优化安全性?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
如何快速生成高效建站系统源代码?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Laravel如何使用模型观察者?(Observer代码示例)
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
Android滚轮选择时间控件使用详解
如何用5美元大硬盘VPS安全高效搭建个人网站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
教学论文网站制作软件有哪些,写论文用什么软件
?
Laravel如何使用查询构建器?(Query Builder高级用法)
nodejs redis 发布订阅机制封装实现方法及实例代码
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
如何在云服务器上快速搭建个人网站?
如何在橙子建站上传落地页?操作指南详解
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
JavaScript如何实现继承_有哪些常用方法
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
如何快速生成可下载的建站源码工具?
Python面向对象测试方法_mock解析【教程】
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
Laravel如何保护应用免受CSRF攻击?(原理和示例)
如何为不同团队 ID 动态生成多个独立按钮
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
,在苏州找工作,上哪个网站比较好?


tf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include --with-jpeg-dir=/usr/include
// 安装
docker-php-ext-install gd