用docker可以短时间内构建一个可用的轻量级环境容器。
配置Docker
安装Docker
直接去到官方选择对应的系统安装Docker官网。
然后安装成功后,使用docker -v
就可以验证安装了。
国内加速Docker
- Docker官方有中文的仓库镜像加速器[地址]
- 淘宝的阿里云有一个针对每一位用户的镜像加速器[登陆控制器-产品与服务-容器镜像服务-镜像加速器]
获取基本配置文件
因为docker安装官方的php容器,里面并没有内置的php.ini,所以我直接把php和nginx的配置文件提供并放在Github上。
1 | git clone https://github.com/copriwolf/docker-lnmp.git |
然后进入文件夹并开始操作
1 | cd docker-lnmp |
构建Mysql
1 | # 从docker仓库拉取mysql映像 |
docker run mysql
刨除其他的可选项就是这条命令最根本的,表示运行一个mysql映像的容器。--name
表示要用mysql作为这个容器的名字-p
表示暴露外界的端口,格式外界接口:容器接口
-e
表示设置环境变量,这里是设置Mysql的Root密码为My-Mysql-Root-d
表示后台运行
构建PHP-FPM
1 | # 从docker拉取最新的php-fpm映像 |
--name
表示要用php-fpm作为这个容器的名字--link
表示连接了mysql
这个容器,同时在本容器里面用mysql
去替代关于数据库的调用。-v
表示宿主机和docker机之间的映射关系,宿主机文件地址:docker机文件地址
-d
表示后台运行
构建Nginx
构建好配置文件的内容
根据原生初始的配置文件,做了修改如下:
1 | server { |
要把网站的根目录指向一个我们指定好与php-fpm一样地址的目录。
- 要设定root地址
- 然后
fastcgi-pass
要设定应用过来的php-fpm
,而不是指定特定的ip。 fastcgi_param
也要改成一个变量的形式$document_root
。
构建一个nginx容器
1 | # 从docker仓库拉取nginx映像 |
测试
在本地的~/docker/www
目录下创建一个index.php文件,里面的内容是:
1 |
|
如果显示正常,说明测试通过。
踩过的坑
- nginx与php-fpm在容器里面的地址必须要保持一直,才能让nginx正确加载php-fpm,以及php-fpm能够正确解析php文件。
- 如果使用了yii框架这种由
框架内单一文件路由
的方式驱动的网站,那么nginx的配置文件里就要写/var/www/html/web
。 - 如果docker里面的运行的框架,提示没有读写权限。就要使用
docker exec -it php-fpm /bin/bash
进入到php-fpm容器里面,然后给目录加权限chown -R www-data:www-data /vat/www/html
- 如果在docker里面运行mysql要填写mysql地址,请直接写
mysql
,因为我们在创建php-fpm容器时使用了命令--link mysql:mysql
,等于把mysql容器链接过来,而且别名就叫做mysql,所以直接在mysql地址那里大胆填写mysql
就可以调用了。 - 如果填写了正确的mysql配置,然后框架提示pdo模块没有找到,那说明php-fpm这个框架没有安装pdo扩展,这个时候,使用
docker exec -it php-fpm /bin/bash
进入到php-fpm容器里面,然后输入docker-php-ext-install pdo && docker-php-ext-install pdo_mysql && docker-php-ext-install mysqli
来安装扩展,然后exit
退出后,在宿主机使用命令docker restart php-fpm
来重启php-fpm容器才能生效噢! - 如果你发现他显示没有权限访问或者写入文件,要在
docker run
后面加一个参数,--privileged=true
,因为使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。