基础安装
安装git、docker和docker-compose。mac和windows用户安装docker便集成了docker-compose,类unix用户需要单独安装docker-compose。
下载dnmp docker-compose源代码
使用git clone即可,也可以直接进去下压缩包git clone https://github.com/yeszao/dnmp.git dnmp
修改php文件夹下Dockerfile以支持swoolecd dnmp/php/这里有多个php安装包,选php72/
编辑Dockerfile,结尾添加&&pecl install -o -f swoole \ #用pecl方式快捷安装,大家可以换成源码安装,原理一样
&& docker-php-ext-enable swoole #利用镜像本身的命令开启swoole
启动容器docker-compose up -d #-d后台运行
等待四个镜像dnmp-mysql,dnmp-nginx,dnmp-redis,dnmp-php启动完毕打开浏览器localhost测试是否成功
代码位置
源代码在:dnmp/www/site1/ 目录下。
环境调整
上面的目录是可以配置的,可以具体修改docker-compose.yml volumes的映射,配合映射到主机的nginx配置文件去修改,注意需要保证Nginx和PHP-FPM都挂载了Host的文件目录,并且都挂载在容器的:/var/www/html。
注意如果容器已经启动,编辑之后需要停止并删除掉之前的容器docker-compose stop && docker-compose rm
重新builddocker-compose up -d --build
其他的修改也应如此,具体可以看docker-compose说明。
问题总结
1、根据上述步骤下来,就会得到一个运行在docker上的lnmp+swoole的环境,如果使用到了swoole的话,你可能还需要修改nginx配置进行转发处理。
2、连接数据库主机名一定要127.0.0.1,因为MySQL客户端默认使用unix socket方式连接,应该直接用本地IP。
3、客户端登录的时候可能会报2509的连接错误,这个错误出现的原因是这个镜像默认使用mysql最新版,在mysql8之前的版本中加密规则为mysql_native_password,而在mysql8以后的加密规则为caching_sha2_password。
解决此问题有三种方法,一种是更新navicat驱动来解决此问题,二种是将mysql用户登录的加密规则修改为mysql_native_password,三是将mysql版本降级,修改docker-compose.yml去指定mysql版本。
本着开发环境用新不用旧,本文采用第二种办法:
docker exec -it dnmp-mysql /bin/bash;#进入mysql bash
mysql -uroot -p123456;
use mysql;
GRANT ALL ON *.* TO 'root'@'%'; #授权 root 用户的所有权限并设置远程访问
flush privileges; #刷新权限
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码' PASSWORD EXPIRE NEVER;#修改加密规则
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'; #设置新密码
flush privileges; #刷新权限