ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

macOS下使用Docker部署Nginx+PHP开发环境

macOS下使用Docker部署Nginx+PHP开发环境 1. 为什么选择在macOS上使用Docker部署NginxPHP作为一名长期在macOS环境下工作的全栈开发者我深刻理解本地开发环境配置的痛点。传统方式直接在macOS上安装Nginx和PHP会遇到版本冲突、依赖管理复杂等问题而Docker提供了一种优雅的解决方案。Docker的核心价值在于环境隔离和可移植性。通过容器化技术我们可以避免污染主机环境保持系统纯净快速切换不同版本的PHP/Nginx组合进行测试团队共享相同的开发环境配置开发环境与生产环境高度一致对于macOS用户来说Docker Desktop提供了原生支持M1/M2芯片的版本性能接近原生应用。实测在2021款M1 Pro MacBook Pro上运行NginxPHP容器的性能损耗不到5%完全满足日常开发需求。重要提示如果你的Mac是M系列芯片务必下载Apple Silicon版本的Docker Desktop否则会遇到兼容性问题导致性能大幅下降。2. macOS环境下的Docker安装与配置2.1 系统要求检查在开始安装前请确认你的macOS满足以下要求macOS 10.15 Catalina或更高版本至少4GB内存建议8GB以上20GB可用磁盘空间对于Intel芯片支持硬件虚拟化VT-x对于Apple Silicon无需特别配置可以通过以下命令检查硬件虚拟化支持仅Intel芯片sysctl -a | grep machdep.cpu.features输出中应包含VMX字样。2.2 Docker Desktop安装步骤访问Docker官网下载对应版本Intel芯片https://docs.docker.com/desktop/install/mac-install/Apple Siliconhttps://docs.docker.com/desktop/install/mac-apple-silicon/双击下载的.dmg文件将Docker图标拖到Applications文件夹首次启动时会要求权限授权允许网络连接允许访问Downloads和Documents目录等待初始化完成首次启动较慢在顶部菜单栏看到Docker图标表示运行成功2.3 常见安装问题解决问题1Docker Desktop启动失败提示Virtualization support not detected解决方案重启Mac开机时按住CommandR进入恢复模式打开终端执行spctl kext-consent add VB5E2TV963重启后再次尝试启动Docker问题2M1芯片上镜像兼容性问题解决方案确保使用ARM架构的基础镜像或在docker-compose.yml中指定平台platform: linux/amd643. NginxPHP容器化部署实战3.1 项目目录结构规划建议采用以下目录结构~/projects/nginx-php-demo/ ├── docker-compose.yml ├── nginx/ │ ├── conf.d/ │ │ └── default.conf │ └── nginx.conf ├── php/ │ └── php.ini └── www/ └── index.php3.2 docker-compose.yml配置创建docker-compose.yml文件version: 3.8 services: nginx: image: nginx:1.23-alpine ports: - 8080:80 volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./www:/var/www/html depends_on: - php networks: - app-network php: image: php:8.2-fpm-alpine volumes: - ./www:/var/www/html - ./php/php.ini:/usr/local/etc/php/conf.d/custom.ini networks: - app-network networks: app-network: driver: bridge关键配置说明使用alpine版本镜像减小体积将本地www目录映射到容器/var/www/html自定义nginx配置和php.ini创建专用网络确保容器间通信3.3 Nginx配置文件创建nginx/conf.d/default.confserver { listen 80; index index.php index.html; server_name localhost; root /var/www/html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_split_path_info ^(.\.php)(/.)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }3.4 PHP测试文件创建www/index.php?php phpinfo(); ?4. 容器启动与调试4.1 启动容器服务在项目根目录执行docker-compose up -d首次运行会下载镜像并创建容器完成后访问 http://localhost:8080应该能看到PHP信息页面。4.2 常用操作命令查看运行中的容器docker-compose ps查看Nginx日志docker-compose logs nginx进入PHP容器docker-compose exec php sh重启服务docker-compose restart停止并删除容器docker-compose down4.3 性能优化配置Nginx优化在nginx/nginx.conf中添加worker_processes auto; events { worker_connections 1024; multi_accept on; use epoll; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; gzip on; gzip_disable msie6; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xmlrss text/javascript; }PHP优化在php/php.ini中添加memory_limit 256M upload_max_filesize 64M post_max_size 64M max_execution_time 120 opcache.enable1 opcache.memory_consumption128 opcache.interned_strings_buffer8 opcache.max_accelerated_files4000 opcache.revalidate_freq60 opcache.fast_shutdown15. 高级配置与扩展5.1 多PHP版本管理如果需要切换PHP版本只需修改docker-compose.yml中的镜像标签php: image: php:7.4-fpm-alpine然后重新构建docker-compose up -d --build5.2 数据库集成添加MySQL服务到docker-compose.ymlservices: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: app_db MYSQL_USER: app_user MYSQL_PASSWORD: password volumes: - mysql_data:/var/lib/mysql networks: - app-network volumes: mysql_data:然后在PHP容器中安装MySQL扩展docker-compose exec php sh apk add --no-cache mysql-client docker-php-ext-install pdo_mysql exit docker-compose restart php5.3 Xdebug配置开发环境下可以启用Xdebug进行调试创建php/xdebug.inizend_extensionxdebug.so xdebug.modedevelop,debug xdebug.client_hosthost.docker.internal xdebug.client_port9003 xdebug.start_with_requestyes xdebug.discover_client_host1修改docker-compose.yml中PHP服务的volumesvolumes: - ./php/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini在IDE中配置PHP远程调试端口90036. 生产环境注意事项虽然本文主要面向开发环境但如果你计划将这种配置用于生产环境需要注意安全性强化禁用PHP危险函数disable_functions exec,passthru,shell_exec,system,proc_open,popenNginx隐藏版本信息server_tokens off;性能监控使用cAdvisor监控容器资源使用设置资源限制php: deploy: resources: limits: cpus: 2 memory: 1G日志管理配置日志轮转将日志输出到stdout/stderr以便Docker收集高可用性使用多个Nginx worker配置PHP-FPM进程池我在实际项目中使用这套配置已经稳定运行了3年多最大的体会是Docker带来的环境一致性让团队协作变得非常顺畅。新成员加入时只需git clone代码库后执行docker-compose up就能获得完全一致的开发环境彻底告别在我机器上是好的这类问题。
返回列表