使用docker搭建一套开发环境全家桶的详细教程
DNMP介绍
DNMP(Docker+Nginx+MySQL+PHP7/5+Redis)是一款全功能的LNMP一键安装程序。支持的服务丰富、功能强大、使用简单、兼容多平台。是适用于多端的一款docker开发与生产环境的PHP环境全家桶。
DNMP项目特点:
- 100%开源
- 100%遵循Docker标准
- 支持多版本PHP共存,可任意切换(PHP5.4、PHP5.6、PHP7.1、PHP7.2、PHP7.3)
- 支持绑定任意多个域名
- 支持HTTPS和HTTP/2
- PHP源代码、MySQL数据、配置文件、日志文件都可在Host中直接修改查看
- 内置完整PHP扩展安装命令
- 默认支持 pdo_mysql、 mysqli、 mbstring、 gd、 curl、 opcache等常用热门扩展,根据环境灵活配置
- 可一键选配常用服务:
- 多PHP版本:PHP5.4、PHP5.6、PHP7.1-7.3
- Web服务:Nginx、Openresty
- 数据库:MySQL5、MySQL8、Redis、memcached、MongoDB、ElasticSearch
- 消息队列:RabbitMQ
- 辅助工具:Kibana、Logstash、phpMyAdmin、phpRedisAdmin、AdminMongo
- 实际项目中应用,确保 100%可用
- 所有镜像源于Docker官方仓库,安全可靠
- 一次配置,Windows、Linux、MacOs皆可用
- 支持快速安装扩展命令 install-php-extensionsapcu
- 具体使用文档可参考:https://gitee.com/bruce_qiq/dnmp/blob/master/README.md。文档中已经有一个明确的使用教程。接来下,主要针对安装完之后,做的一些基本操作做一个简单的演示,因为部分操作在源文档不是很详细,并且有明显的坑。主要记录几个功能:
1.修改无法连接MySQL问题。
2.配置NGINX虚拟域名。
3.安装PHP扩展。
因为个人打算持续使用该包来做自己的开发环境,后面会针对不同的问题做总结,同时也会根据原主的仓库基础下,进行迭代更新。欢迎关注。公号卡二条的技术圈
修改MySQL连接问题
由于dnmp在安装时,是将本地的3305端口映射到MySQL容器的3306端口,因此我们在连接是需要连接3305端口。
//检测MySQL服务 functiongetMysqlVersion() { if(extension_loaded('PDO_MYSQL')){ try{ $dbh=newPDO('mysql:host=192.168.2.103;dbname=mysql','root','123456'); $sth=$dbh->query('SELECTVERSION()asversion'); $info=$sth->fetch(); }catch(PDOException$e){ return$e->getMessage(); } return$info['version']; }else{ return'PDO_MYSQL扩展未安装×'; } }
我们只需要修改为如下代码:
//检测MySQL服务 functiongetMysqlVersion() { if(extension_loaded('PDO_MYSQL')){ try{ $dbh=newPDO('mysql:host=192.168.2.103;port=3305;dbname=mysql','root','123456'); $sth=$dbh->query('SELECTVERSION()asversion'); $info=$sth->fetch(); }catch(PDOException$e){ return$e->getMessage(); } return$info['version']; }else{ return'PDO_MYSQL扩展未安装×'; } }
这里的192.168.2.103是我们宿主机的ip,根据你实际的情况填写即可。可以通过ifconfig查看。如果是Windows系统,则使用ipconfig查看。
ifconfig
配置NGINX域名
在配置之前,我们需要明确这么几个东西。我们源码目录位置、NGINX配置文件位置、NGINX日志文件位置。
1.我们可以通过截图看见,conf.d目录下面存在两个配置文件。这两个就是我事先配置好的域名文件。这个文件,是通过NGINX容器映射到本地磁盘。因此可以通过宿主机进行查看。
2.logs文件就是NGINX的error,access等相关日志文件,同样的是在NGINX容器中映射到宿主机的。
3.这里的www就是程序源码路径,我们的所有程序源码都放在这里即可。
对于NGINX域名配置文件,推荐进入到容器进行编写,而不是通过在宿主机进行编写。
第一步:进入我们的www目录,安装一个应用程序。这里推荐使用compser来安装,对于composer的使用,也可以参考文档进行简单配置即可使用。
ert@ertiaodeMac-mini~/develop/env/dnmp/wwwmaster●composercreate-projecttopthink/think=5.1.35tp5 Creatinga"topthink/think=5.1.35"projectat"./tp5" Installingtopthink/think(v5.1.35) -Installingtopthink/think(v5.1.35):Loadingfromcache Createdprojectin/app/tp5 Loadingcomposerrepositorieswithpackageinformation Updatingdependencies(includingrequire-dev) Packageoperations:2installs,0updates,0removals -Installingtopthink/think-installer(v2.0.0):Loadingfromcache -Installingtopthink/framework(v5.1.39):Loadingfromcache Writinglockfile Generatingautoloadfiles ert@ertiaodeMac-mini~/develop/env/dnmp/wwwmaster●ll total0 drwxr-xr-x3ertstaff96B9622:02localhost drwxr-xr-x19ertstaff608B9822:26tp5
这样本地就按照好了一个tp5的框架了。第二步:进入NGINX容器,通过dockerps查看docker容器的container-id,使用dockerexec命令进入到容器内部。
ert@ertiaodeMac-mini~/develop/env/dnmp/wwwmaster●dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 0f5f9cd08aa2dnmp_php"docker-php-entrypoi…"27hoursagoUpAboutanhour9000/tcp,9501/tcpphp 8bc44fc8c578dnmp_nginx"/docker-entrypoint.…"27hoursagoUp26hours0.0.0.0:80->80/tcp,0.0.0.0:443->443/tcpnginx f02ad53bf14dmysql:5.7.28"docker-entrypoint.s…"27hoursagoUp26hours33060/tcp,0.0.0.0:3305->3306/tcpmysql5 ert@ertiaodeMac-mini~/develop/env/dnmp/wwwmaster●dockerexec-it8bc44fc8c578/bin/sh /www#ls localhosttp5
进入NGINX配置文件路径
/#cd/etc/nginx/ /etc/nginx#ls-la total60 drwxr-xr-x1rootroot4096Sep820:23. drwxr-xr-x1rootroot4096Sep719:34.. drwxr-xr-x5rootroot160Sep820:05conf.d -rw-r--r--1rootroot429Sep622:02fastcgi-php.conf -rw-r--r--1rootroot1077Jul800:14fastcgi.conf -rw-r--r--1rootroot1062Sep622:02fastcgi_params -rw-r--r--1rootroot2837Jul800:14koi-utf -rw-r--r--1rootroot2223Jul800:14koi-win -rw-r--r--1rootroot5231Jul800:14mime.types lrwxrwxrwx1rootroot22Jul1104:27modules->/usr/lib/nginx/modules -rw-r--r--1rootroot760Sep622:02nginx.conf drwxr-xr-x2rootroot4096Sep820:23rewrite -rw-r--r--1rootroot636Jul800:14scgi_params -rw-r--r--1rootroot664Jul800:14uwsgi_params -rw-r--r--1rootroot3610Jul800:14win-utf
conf.d就是我们的域名配置路径,nginx就是默认的配置文件。
创建一个域名配置文件。
/etc/nginx#cdconf.d/&&touchtp5.conf /etc/nginx/conf.d#ls-la total16 drwxr-xr-x5rootroot160Sep820:05. drwxr-xr-x1rootroot4096Sep820:23.. -rw-r--r--1rootroot48Sep622:02.gitignore -rw-r--r--1rootroot2254Sep622:02localhost.conf -rw-r--r--1rootroot505Sep820:29tp5.conf
配置tp5.conf文件。复制如下内容:
server{ listen80; server_nametp5.com; root/www/tp5/public; indexindex.php; #NGINX日志文件,如果是其他的域名,直接替换nginx.tp5.com.xx.log文件名称即可。 access_log/var/log/nginx/nginx.tp5.com.access.log; error_log/var/log/nginx/nginx.tp5.com.error.log; #thinkphp5的url重写文件,避免重复编写,单独放一个文件,以后其他的thinkphp项目,直接引入即可。 includerewrite/thinkphp.conf; location~\.php${ #这里的php是php容器的名称,可以改为实际的ip,不建议使用,因为ip会变化。 fastcgi_passphp:9000; includefastcgi-php.conf; fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; includefastcgi_params; } }
测试域名配置,并重启NGINX服务。
/etc/nginx/conf.d#nginx-t&&nginx-sreload nginx:theconfigurationfile/etc/nginx/nginx.confsyntaxisok nginx:configurationfile/etc/nginx/nginx.conftestissuccessful /etc/nginx/conf.d#
将域名添加到宿主机的host文件。
访问测试
PHP扩展安装
在搭建docker环境时,PHP的Redis扩展默认是没安装,这里就以Redis扩展为例。
由于内置了部分扩展(具体有哪些扩展,参考上面提到的使用文档),因此直接使用命令安装即可。
install-php-extensionsredis
测试扩展
/www#php--riredis redis RedisSupport=>enabled RedisVersion=>5.3.1 ......
总结
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。