VSCode + Docker 的 PHP 开发环境
简介
接下来我将介绍一个使用 VSCode + Docker 搭建的 PHP 开发环境,该环境可以根据每个项目的需求构建相应版本的环境。
准备环境
在搭建开发环境前需要安装以下软件。
- 最新稳定版的 Docker。
- 最新稳定版的 Visual Studio Code
- Visual Studio Code 的插件 Remote - Containers(在插件栏搜索 ms-vscode-remote.remote-containers 即可)。
Docker 下载戳这里 Docker。
Visual Studio Code 下载戳这里 Visual Studio Code。
由于我的系统是 Windows 10 专业版,所以我这里的 Docker 安装的是 Docker Desktop for Windows。
注意:在 Windows 系统下安装的 Docker Desktop for Windows 需要注意设置内存和共享文件,内存尽量不要低于 4G,共享文件一定要设置在你项目所在的目录或盘符下。
如我这里所有的容器项目都放在D:\docker
目录下,包括数据库。
接下来我们开始搭建 PHP 的开发环境了,先将构建环境的脚本克隆下来 github.com/xueyong-q/docker-nginx-... 不过在构建 PHP 的环境前我们先把数据库也构建一下,数据库构建脚本 github.com/xueyong-q/docker-databa...。
构建数据库环境
1) 首先将 github.com/xueyong-q/docker-databa... 数据库构建脚本项目克隆下来到你 Docker 设置的共享目录或盘符下。
2) 然后在该项目下复制 .env.example
文件为 .env
配置文件,再设置以下配置。
MYSQL_USER # 新建MySQL用户名称
MYSQL_PASSWORD # 新建MySQL用户密码
MYSQL_ROOT_PASSWORD # MySQL root 用户密码
MYSQL_CONTAINER_NAME # MySQL实例名称
REDIS_CONTAINER_NAME # REDIS实例名称
3) 接下来在终端 cd
到这个数据库项目的目录下执行 docker network create database_app
命令添加网络。
4) 添加好网络后就可以执行 docker-compose up
构建启动容器了。
5) 容器启动完成后就可以通过 localhost:8888
地址来使用 phpMyAdmin 管理数据库了(在 phpMyAdmin 登录页面的服务器登录项应该使用上面配置的“MySQL实例名称”),或者可以在主机中安装数据库客户端使用 localhost:3306
来访问数据,使用 localhost:6379
来访问 Redis。
如果其它容器中需要访问数据库或 Redis 可以将容器添加到上面添加的 database_app
网络中,然后使用数据库或 Redis 容器实例名称 + 端口号来访问对应的服务。
需要更换数据库的版本可以修改 docker-compose.yml
文件中的 image
配置项,该配置项是配置你需要拉取的镜像名称,可以到 hub.docker.com 查找你需要的镜像名称。
提醒:首次构建好数据后,后面重新启动 Docker 容器后数据库的容器会自动启动。
构建PHP环境
构建PHP环境也是首先将 github.com/xueyong-q/docker-nginx-... 项目克隆下来,然后使用 VSCode 打开本项目。
然后选择在容器中重新打开。
待容器构建成功后就可以通过 localhost
来访问项目了,使用 localhost/index.php
访问 phpinfo。
注意:在构建本项目时会依赖上面数据库项目的
database_app
网络,如果该网络名称已改变则本项目的网络配置也需要修改,在.devcontainer/devcontainer.json
文件的runArgs
配置项中修改即可。
Nginx 的配置则在 .devcontainer/nginx/conf.d
目录中,日志在 .devcontainer/nginx/log
目录中。
容器的构建 Dockerfile 在 .devcontainer/php/
目录中,如果需要修改 PHP 的版本则可以修改该目录下 Dockerfile 文件中的 FROM 的镜像名称即可。
本项目默认安装以下应用和版本。
应用 | 版本 |
---|---|
PHP | 7.3 |
Nginx | 1.18 |
Node | 14.x |
Yarn | 1.22 |
另 PHP 的 Debug 扩展已安装可直接使用,使用方法如下图,在这里需要先启动容器哦。
然后选择 PHP
生成配置,这里需要注意要将 port
的端口改为 9001,因为在 php debug 扩展的配置中我是配置的 9001 端口。
将配置保存后就可以选择断点然后使用 F5 进行调试了。
另还有一个小工具 jq
,用于在终端解析 json 字符串,如下图。
注意事项:本项目默认一次只能打开一个项目实例,打开多个会有端口冲突。如果需要一次打开多个项目实例则需要修改一下端口映射,项目端口映射在 .devcontainer/devcontainer.json
文件的 appPort
配置项中修改,格式为 <主机端口>:<容器端口>
,只需将主机端口跟换为不冲突的端口即可。
注意事项
在 Windows 下的 Docker 的共享文件有小概率会出现问题,遇到的症状是使用 VSCode 打开项目进入容器后可以看到项目的目录结构但是无法打开文件。解决办法是在 Docker 容器设置中将共享的目录或盘符删除然后重启 Docker 容器,重启后再重新设置一下共享目录或盘符即可。
还有一个问题需要注意在 Windows 下的 Docker 中,项目挂载在容器中的文件权限是 777 且用户是 root,在这个环境下项目不会遇到文件权限问题,但是项目到了 Linux 的 Docker 或者是 Windows + wsl2 + Docker 的环境中就可能会出现权限问题,因为在这两个环境中挂载的文件权限是 755 用户是我们指定的所属用户,如果没有指定则默认也是 root,不过上面项目的权限已处理好不用担心。
本作品采用《CC 协议》,转载必须注明作者和本文链接
不错,支持
不过windows下的docker玩玩就好了,用来开发就算了,那速度。。。
建议上wsl2