首先感谢社区,作者从本社区汲取了很多技术营养。现分享作者基于docker的PHP开发环境配置方案,希望能给小伙伴们在搭建PHP开发环境上带来思路上的参考。
项目集背景
laravel版本不同对PHP的版本要求不同。
如果遇到同时调试多个版本项目,且使用docker环境进行开发。具体场景如下(举例):
认证系统基于laravel6,PHP运行版本7.2。
应用系统基于laravel9,PHP运行版本8.1。
应用需要跳转认证系统进行统一登录。在认证通过后,携带临时ticket参数code回跳应用。应用拿到code参数后,请求认证系统RPC服务获取用户详细信息。

目录结构参考:
./ ├── docker-compose.yaml ├── mariadb-data ├── mariadb-log ├── nginx-config # nginx 配置 │ ├── conf.d │ │ ├── default.conf │ │ ├── sso.example.com.conf │ │ ├── app.example.com.conf │ ├── fastcgi.conf │ ├── fastcgi_params │ ├── koi-utf │ ├── koi-win │ ├── mime.types │ ├── nginx-bak.conf │ ├── nginx.conf │ ├── scgi_params │ ├── uwsgi_params │ └── win-utf ├── nginx-html # laravel 项目代码目录 │ ├── sso.example.com │ ├── app.example.com ├── nginx-log │ ├── access.log │ ├── error.log │ ├── sso.example.com-error.log │ ├── app.example.com-error.log ├── php-config-7.2 │ ├── conf.d │ ├── php.ini │ ├── php.ini-development │ └── php.ini-production ├── php-config-8.1 │ ├── conf.d │ ├── php.ini │ ├── php.ini-development │ └── php.ini-production └── php-log
docker-compose.json 内容参考:
version: "3"
services:
mysql:
hostname: mysql
image: mariadb:10.5.10
container_name: lara-mariadb-10.5
ports:
- "3308:3306"
volumes:
- ./mariadb-log:/var/log/mysql
- ./mariadb-data:/var/lib/mysql
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_USER=username
- MYSQL_PASSWORD=password
networks:
lara-net:
ipv4_address: 172.23.0.2
php72:
hostname: php-fpm-72
image: leleos/php-fpm:7.2
container_name: lara-php-fpm-7.2
ports:
- "9001:9000"
links:
- mysql:lara-mariadb-10.5
- redis:lara-redis-6
extra_hosts:
- "sso.example.com:172.23.0.10"
- "app.example.com:172.23.0.10"
volumes:
- ./nginx-html:/usr/share/nginx/html:rw
- ./php-log:/var/log/phplog
- ./php-config-7.2:/usr/local/etc/php
environment:
- TZ=Asia/Shanghai
networks:
lara-net:
ipv4_address: 172.23.0.4
php81:
hostname: php-fpm-81
image: bai615/amd64-php:8.1.17-fpm
container_name: lara-php-fpm-8.1
ports:
- "9002:9000"
links:
- mysql:lara-mariadb-10.5
- redis:lara-redis-6
extra_hosts:
- "sso.example.com:172.23.0.10"
- "app.example.com:172.23.0.10"
volumes:
- ./nginx-html:/usr/share/nginx/html:rw
- ./php-log:/var/log/phplog
- ./php-config-8.1:/usr/local/etc/php
environment:
- TZ=Asia/Shanghai
networks:
lara-net:
ipv4_address: 172.23.0.5
redis:
hostname: redis
container_name: lara-redis-6
image: redis:6.2.6
ports:
- "6479:6379"
environment:
- TZ=Asia/Shanghai
networks:
lara-net:
ipv4_address: 172.23.0.8
nginx:
hostname: nginx
container_name: lara-nginx-1.22.0
image: nginx:1.22.0
ports:
- "81:81"
- "443:443"
links:
- "php72:lara-php-fpm-7.2"
- "php81:lara-php-fpm-8.1"
- "mysql:lara-mariadb-10.5"
- "mongo:lara-mongo-5"
- "redis:lara-redis-6"
extra_hosts:
- "sso.example.com:127.0.0.1"
- "app.example.com:127.0.0.1"
environment:
- TZ=Asia/Shanghai
volumes:
- ./nginx-config:/etc/nginx
- ./nginx-log:/var/log/nginx
- ./nginx-html:/usr/share/nginx/html
networks:
lara-net:
ipv4_address: 172.23.0.10
mongo:
hostname: mongo
container_name: lara-mongo-5
image: mongo:5.0.12
ports:
- "27018:27017"
environment:
- TZ=Asia/Shanghai
volumes:
- mongo-data:/data/db
networks:
lara-net:
ipv4_address: 172.23.0.9
volumes:
mongo-data:
networks:
lara-net:
ipam:
config:
- subnet: "172.23.0.0/24"nginx 虚拟机配置参考:
server {
listen 80;
server_name app.example.com;
root "/usr/share/nginx/html/app.example.com/public";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/sso.example.com-error.log error;
sendfile off;
client_max_body_size 100m;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php81:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
}宿主机 hosts 配置参考:
127.0.0.1 sso.example.com 127.0.0.1 app.example.com
php-fpm 的 docker image 获取参考:
作者在官方image的基础上补充了一些开发必须扩展,然后build的image
包含 PHP7.4、PHP8.0、PHP8.1、PHP8.2
MacBook Intel芯片 docker PHP images :
hub.docker.com/r/bai615/amd64-php/...
MacBook M1芯片 docker PHP images :
hub.docker.com/r/bai615/arm64-php/...
好用的第三方老版本PHP
包含 PHP5.3、PHP5.4、PHP5.5、PHP5.6、PHP7.0、PHP7.1、PHP7.2、PHP7.3
hub.docker.com/r/leleos/php-fpm/ta...
作者的开发体验:
docker 开发环境:
可以任意切换软件版本(PHP,MySQL,Nginx等),与测试环境或者生产环境保持一致。
homestead 开发环境:
需要基于vgrant,依赖vbox或者wmware,目前对M1支持还不够友好。
基于brew软件管理的开发环境:
brew 方式安装、管理软件(PHP,MySQL,Nginx等)。当brew版本升级时,可能会影响已安装软件出现不可预知问题。如下:
1、携带底层依赖同步升级,不再支持低版本PHP运行(如,PHP5.6 及以下版本不能运行)。
2、软件默认安装路径变更,依赖原路径的软件不能运行。
brew 3.x 软件默认安装路径 /opt/homebrew/bin/
brew 4.x 软件默认安装路径 /usr/local/bin/
3、PHP,MySQL,Nginx等版本切换不够灵活。
以上就是MacBook下laravel多版本docker开发环境配置方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号