转载请注明出处,本文仅用于学习交流,不对之处,恳请指正 ,部分图片摘取网络,如有侵权请联系
本人不是全职的PHP开发工程师,只是单纯玩一下。有什么不对的地方,欢迎理性讨论。
因为不是PHP开发工程师,所以我不是很愿意在电脑中安装LNMP(不是)OS X NMP来拖垮我电脑的性能
Docker是一个容器化的技术,我们可以在其上面运行包括Linux系统在内的多种软件
而当我们不需要的时候可以暂停、甚至删除整个容器,有时候我们还可以进行轻量化的部署,调试等等。
Docker安装
使用 Homebrew 安装
使用Homebrew可以快速安装Docker
brew install --cask --appdir=/Applications docker
官方下载 Docker Desktop on Mac
请参考官方文档:Install Docker Desktop on Mac
-
下载软件后,就跟安装其他普通软件一样正常安装即可。安装完成后可以运行以下命令输出Docker版本号。
docker --version
-
运行Docker,我们可以看到顶部状态栏已经出现了Docker的图标
-
单击Dashboard可以打开Docker的面板进行登陆与下载镜像
Docker安装NMP
官方镜像地址:hub.docker.com
安装完成Docker之后,我们可以通过Docker的官方镜像地址下载一些你想使用的软件,比如Mysql, Linux系统, Nginx或者Apache服务器等等。
部分参数说明
- --name:运行容器名称
- -p:端口号映射,将本地的3306端口映射到容器的3306端口
- -e:新增环境变量参数,MYSQL_ROOT_PASSWORD用于指定Mysql的root账号的密码
- -v:将本地的/Users/alainlam/Documents/docker/mysql目录映射为容器的/var/lib/mysql
- -d:设置容器在在后台一直运行
生成相应目录
# 网站目录
mkdir -p ~/Documents/Developer/Docker/www/website.com/
# Mysql目录
mkdir ~/Documents/Developer/Docker/mysql
# 配置文件目录
mkdir -p ~/Documents/Developer/Docker/nginx/conf.d
# nginx日志文件目录
mkdir ~/Documents/Developer/Docker/nginx/log
Mysql
-
安装
docker pull mysql
-
运行Mysql
docker run --name mysql-service -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root \ -e MYSQL_USER=user \ -e MYSQL_PASSWORD=password \ -v ~/Documents/Developer/Docker/mysql:/var/lib/mysql \ -d mysql:latest
PHP
-
安装php:7.4-fpm
docker pull php:7.4-fpm
-
运行PHP
docker run --name php-fpm -p 9000:9000 \ -v ~/Documents/Developer/Docker/www/website.com:/www \ --link mysql-service:mysql \ -d php:7.4-fpm
-
生成测试文件
nano ~/Documents/Developer/Docker/www/website.com/index.php
写入如下内容
<?php phpinfo();
PHP安装扩展
关键命令
-
docker-php-source
提取或者删除扩展源码到/usr/src/php/ext目录。
# 提取源码 docker-php-source extract # 删除源码 docker-php-source delete
-
docker-php-ext-install
安装扩展,使用docker-php-ext-install安装扩展会同时调用docker-php-ext-enable启用该扩展。
命令格式为:docker-php-ext-install {$目标目录} -
docker-php-ext-enable
用于启动扩展
命令格式为:docker-php-ext-enable {$目标扩展} -
docker-php-ext-configure
用于自定义扩展配置
基本命令
进入PHP容器
docker exec -it php-fpm bash
查看已经安装的扩展
php -m
Nginx
-
安装
docker pull nginx
-
运行
docker run --name nginx-service -p 80:80 \ -v ~/Documents/Developer/Docker/www/website.com:/www \ -v ~/Documents/Developer/Docker/nginx/conf.d:/etc/nginx/conf.d \ -v ~/Documents/Developer/Docker/nginx/log:/var/log/nginx \ --link php-fpm:php \ -d nginx
-
编写网站conf文件
nano ~/Documents/Developer/Docker/nginx/conf.d/website.conf
写入如下内容
server { listen 80; server_name localhost; location / { root /www; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /www; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name; include fastcgi_params; } }
运行
上述配置完成并启动容器后,我们就已经完成了NMP的部署,通过http://localhost/index.php 来检查是否配置成功
进入容器进行配置
以上配置完成后,我们可以通过以下命令进到对应为容器里面去进行配置,比如进入Mysql容器新建数据库、进入Nginx容器修改配置文件等等。
docker exec -it ${容器名} bash
IDEA/PHPStorm
PHP环境配置
-
下载并安装好PHPStorm,打开PHPStrom新建项目选中我们刚才新建的www目录
-
打开软件设置
-
选中PHP,将PHP language level修改为7.4,打开CLI interpreter的设置
-
单击From Docker...
-
单击New
-
Name的位置写入Docker,选中Docker for Mac,底部出现connection successful,则与Docker通讯成功,点击保存
-
选中我们刚才创建的php-fpm,点击保存
-
这个时候我们可以看到我们的CLI interpreter已经新建成功,点击OK
-
回到设置面板,我们可以看到PHP CLI interpreter已经配置成功,我们需要修改一下容器路径,单击最下方的Docker container
-
单击修改图标,选中Container path,将其修改为/www,一路点击ok回到设置页面
使用IDEA/PHPStorm的Build-in功能
-
在控制面板中选中Build, Execution, Deployment,单击新建按钮,选中In place,输入别名
-
在Web server URL处输入http://localhost 点击保存
-
回到主页面,打开我们写好的index.php,单击右上角的Build-in preview,可以看到我们已经能够正常显示我们的页面了。同时我们也可以看到最底部出现了一个Service的选项,我们可以通过它Connect到我们的Docker容器。
调试运行在Docker里面的PHP代码
修改Docker容器的配置
很显然,我们一开始安装的PHP并没有打开xdebug的功能,我们需要先安装xdebug插件,并启用它
-
进入容器
docker exec -it php-fpm bash
-
安装xdebug,因为我使用的官方镜像自带了pecl,如果你的版本并没有pecl,那么可能需要自己手动安装。
pecl install xdebug
-
启用该插件
docker-php-ext-enable xdebug
-
查看插件是否安装成功
php -m
如果输出如下内容,则插件安装并启用成功
-
安装nano或者vim
因为容器自带没有编辑器,如果需要修改文件的话,可以将相应的路径挂载到本地或者在容器中安装编辑器对相应文件进行修改,这里我选择安装nano编辑器。
# 更新源 apt-get update # 安装nano apt-get install nano -y
-
修改配置docker-php-ext-xdebug.ini来启用xdebug的远程调试
nano /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
在配置文件中写入以下代码
# 扩展 zend_extension=xdebug # xdebug3.0 默认值为9003,需要在IDEA中进行修改,注意2.0与3.0的字段不通 # xdebug.remote_port=9000 xdebug.client_port=9003 # 允许的远程主机,host.docker.internal为自动获取主机IP,注意2.0与3.0的字段不通 # xdebug.remote_host=host.docker.internal xdebug.client_host=host.docker.internal # 打开debug模式,注意2.0与3.0的部分字段不通 # xdebug.remote_enable=1 # xdebug.default_enable=0 # xdebug.profiler_enable=0 # xdebug.auto_trace=0 # xdebug.coverage_enable=0 xdebug.mode=debug # 调试协议 xdebug.remote_handler=dbgp # 远程调试自动启动 # xdebug.remote_autostart=on xdebug.start_with_request=yes
至此,我们就将Docker的xdebug环境配置好
修改IDEA/PHPStorm的配置
-
打开设置,定位到PHP->Debug中的xdebug项,将其端口号修改为与上面配置相同的端口,我使用的是默认的9003端口
-
选中Server新建一个名为Docker的服务,Host处为localhost,端口号为80,Debugger为xdebug,钩上路径映射,输入与前面docker的挂载路径相同的配置。
-
回到主页,点击新增配置
-
单击添加按钮,选择PHP Web Page,在Name处输入你想要的名字,Server选择我们刚才配置好的Docker server,Start URL写入你的入口文件。
-
我们还可以通过下方的Debug pre-configuration来测试我们的配置是否可用。单击其中Validate,会弹窗测试页面。测试页面顶部的Local Web Server or Shared Folder与Remote Web Server按道理来说,都是可以测试通过的,下方的php.ini没有找到可以忽略,当然,你也可以到容器中配置一个php.ini,我也建议你这么去做。但是此处就不再演示说明了。
-
测试通过后,我们点击OK保存。回到首页,点击顶部的运行按钮,如果能正常打开php info的页面,则配置成功。
我们点击旁边的小电话来启动远程调试连接,并在代码设置断点,最后单击debug按钮,我们就可以调试模式了。
至此,我们的PHPStorm+Docker的配置环境大功告成....太复杂了?其实我们可以通过Dockerfile构建镜像来一键完成前面的安装工作。
文章评论