1. macOS环境下Docker的安装与配置
在macOS上安装Docker是搭建本地开发环境的第一步。与Windows不同,macOS的Docker安装有其特殊性,需要特别注意系统兼容性和虚拟化支持。
1.1 系统要求检查
首先确认你的Mac满足以下最低要求:
- macOS 10.15 Catalina或更高版本
- 至少4GB内存(建议8GB以上)
- 英特尔芯片或Apple Silicon(M1/M2)处理器
注意:Apple Silicon机型需要安装专门适配的Docker版本。如果你使用的是M1/M2芯片Mac,务必下载ARM架构的Docker Desktop。
1.2 Docker Desktop安装步骤
- 访问Docker官网下载对应版本的Docker Desktop安装包
- 双击下载的.dmg文件,将Docker图标拖拽到Applications文件夹
- 打开Applications文件夹,双击Docker.app启动安装
- 按照提示完成权限设置和初始配置
安装完成后,你会在菜单栏看到Docker的鲸鱼图标。首次启动可能需要几分钟时间初始化。
1.3 常见安装问题排查
问题1:Virtualization support not detected
这个错误通常出现在以下情况:
- BIOS/UEFI中未启用虚拟化支持(Intel芯片)
- 系统版本过低
- 其他虚拟化软件冲突(如Parallels、VirtualBox)
解决方案:
- 对于Intel Mac,重启进入恢复模式(Command+R),在终端输入:
bash复制
确认输出中包含"VMX"字样sysctl -a | grep machdep.cpu.features - 关闭其他虚拟化软件
- 更新macOS到最新版本
问题2:应用程序版本不兼容
如果你看到"这个版本的Docker不能与此版本的macOS配合使用"的提示,说明你下载的Docker版本与系统不匹配。解决方法:
- 检查系统版本(关于本机 → 概览)
- 下载对应系统版本的Docker Desktop
1.4 基础配置优化
安装完成后,建议进行以下配置调整:
- 进入Docker Desktop的Preferences → Resources
- 调整CPU和内存分配(建议内存不低于4GB)
- 设置合适的磁盘镜像大小(默认60GB,可根据需要调整)
- 配置镜像加速(国内用户建议添加阿里云或中科大镜像源)
json复制{ "registry-mirrors": [ "https://<your-id>.mirror.aliyuncs.com" ] } - 启用Docker CLI的实验性功能(便于使用新特性)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Docker基础与容器管理
2.1 Docker核心概念快速理解
- 镜像(Image):只读模板,包含运行应用所需的所有内容
- 容器(Container):镜像的运行实例
- 仓库(Registry):存储和分发镜像的地方(如Docker Hub)
类比理解:镜像就像iOS的APP安装包,容器就是运行起来的APP,仓库就是App Store。
2.2 常用Docker命令速查
bash复制# 查看Docker版本信息
docker --version
docker info
# 镜像管理
docker pull [镜像名] # 拉取镜像
docker images # 列出本地镜像
docker rmi [镜像ID] # 删除镜像
# 容器管理
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器
docker stop [容器ID] # 停止容器
docker rm [容器ID] # 删除容器
docker logs [容器ID] # 查看容器日志
# 容器操作
docker exec -it [容器ID] /bin/bash # 进入容器终端
2.3 容器网络基础
Docker默认创建三种网络:
- bridge:默认网络,容器通过虚拟网桥连接
- host:容器直接使用主机网络
- none:无网络连接
对于Web服务,我们通常使用bridge网络。可以通过以下命令查看网络配置:
bash复制docker network ls
docker inspect [网络名]
3. 部署Nginx+PHP环境
3.1 方案选型与架构设计
在Docker中部署Nginx+PHP有两种主流方案:
-
单容器方案:使用预装了Nginx和PHP的镜像(如
richarvey/nginx-php-fpm)- 优点:简单易用,适合快速部署
- 缺点:耦合度高,不利于单独扩展
-
多容器方案:Nginx和PHP-FPM分别运行在不同容器
- 优点:符合单一职责原则,便于独立扩展
- 缺点:配置稍复杂
我们选择更灵活的多容器方案,架构如下:
- Nginx容器:处理HTTP请求,反向代理到PHP-FPM
- PHP-FPM容器:执行PHP代码
- 共享数据卷:存放PHP应用代码
3.2 准备PHP-FPM容器
-
拉取官方PHP-FPM镜像(以7.4版本为例):
bash复制
docker pull php:7.4-fpm -
创建自定义Dockerfile添加常用扩展:
dockerfile复制FROM php:7.4-fpm # 安装常用扩展 RUN apt-get update && apt-get install -y \ libzip-dev \ zip \ && docker-php-ext-install zip pdo_mysql # 安装Composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer -
构建自定义镜像:
bash复制
docker build -t my-php-fpm .
3.3 配置Nginx容器
-
拉取官方Nginx镜像:
bash复制
docker pull nginx:latest -
准备Nginx配置文件
nginx.conf:nginx复制server { listen 80; server_name localhost; root /var/www/html; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass php:9000; # 注意这里使用服务名 fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
3.4 使用Docker Compose编排服务
创建docker-compose.yml文件:
yaml复制version: '3'
services:
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./src:/var/www/html
depends_on:
- php
networks:
- app-network
php:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./src:/var/www/html
networks:
- app-network
networks:
app-network:
driver: bridge
关键配置说明:
ports:将容器80端口映射到主机8080端口volumes:挂载配置文件和应用代码networks:创建专用网络确保容器间通信
3.5 启动服务并验证
-
创建项目目录结构:
code复制├── docker-compose.yml ├── Dockerfile ├── nginx.conf └── src/ └── index.php -
在
src/index.php中添加测试代码:php复制<?php phpinfo(); -
启动服务:
bash复制
docker-compose up -d -
访问
http://localhost:8080查看PHP信息页面
4. 高级配置与优化
4.1 PHP配置调优
编辑自定义Dockerfile,添加PHP配置:
dockerfile复制# 在Dockerfile中添加
COPY php.ini /usr/local/etc/php/conf.d/custom.ini
示例php.ini优化项:
ini复制; 提高上传限制
upload_max_filesize = 20M
post_max_size = 22M
; 调整内存限制
memory_limit = 256M
; 启用OPcache加速
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
4.2 Nginx性能优化
更新nginx.conf中的性能相关配置:
nginx复制# 在http上下文中添加
keepalive_timeout 65;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 在server上下文中添加
client_max_body_size 20m;
4.3 多项目环境配置
如果需要同时运行多个PHP项目,可以:
- 修改Nginx配置支持多虚拟主机
- 为每个项目创建单独的PHP-FPM容器
- 使用不同的端口或域名区分
示例多项目docker-compose.yml片段:
yaml复制services:
project1-php:
build:
context: ./project1
dockerfile: Dockerfile
volumes:
- ./project1:/var/www/html
networks:
- app-network
project2-php:
build:
context: ./project2
dockerfile: Dockerfile
volumes:
- ./project2:/var/www/html
networks:
- app-network
nginx:
# ...
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
4.4 数据库集成
添加MySQL服务到docker-compose.yml:
yaml复制services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: userpassword
volumes:
- mysql_data:/var/lib/mysql
networks:
- app-network
volumes:
mysql_data:
然后在PHP容器中安装MySQL扩展并更新连接配置:
dockerfile复制RUN docker-php-ext-install pdo_mysql
5. 日常开发实用技巧
5.1 开发调试配置
-
启用Xdebug远程调试:
dockerfile复制# 在Dockerfile中添加 RUN pecl install xdebug && docker-php-ext-enable xdebug添加xdebug.ini:
ini复制zend_extension=xdebug.so xdebug.mode=debug xdebug.client_host=host.docker.internal xdebug.start_with_request=yes -
配置IDE(以VS Code为例):
- 安装PHP Debug扩展
- 创建launch.json配置:
json复制{ "version": "0.2.0", "configurations": [ { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9003, "pathMappings": { "/var/www/html": "${workspaceFolder}/src" } } ] }
5.2 日志管理与监控
-
查看实时日志:
bash复制
docker-compose logs -f nginx docker-compose logs -f php -
配置日志轮转:
-
在Nginx配置中添加:
nginx复制access_log /var/log/nginx/access.log main buffer=16k; error_log /var/log/nginx/error.log warn; -
在docker-compose.yml中添加日志卷:
yaml复制volumes: - nginx-logs:/var/log/nginx
-
5.3 常用维护命令
bash复制# 批量清理无用容器和镜像
docker container prune
docker image prune
# 查看资源使用情况
docker stats
# 进入运行中的容器
docker-compose exec php bash
# 重建服务(代码或配置变更后)
docker-compose up -d --build
5.4 生产环境注意事项
-
安全加固:
- 避免使用latest标签,固定镜像版本
- 限制容器资源使用(CPU、内存)
- 禁用容器root权限
-
性能优化:
- 启用OPcache和APCu
- 配置Nginx缓存
- 使用PHP-FPM进程管理优化
-
部署策略:
- 使用CI/CD自动化构建和部署
- 考虑使用Kubernetes管理大规模部署
- 实现蓝绿部署或金丝雀发布
6. 常见问题解决方案
6.1 文件权限问题
在Linux容器中运行PHP应用常遇到文件权限问题,解决方案:
-
确保容器内用户与主机用户一致:
dockerfile复制ARG USER_ID=1000 ARG GROUP_ID=1000 RUN usermod -u ${USER_ID} www-data && \ groupmod -g ${GROUP_ID} www-data -
在主机上设置适当的目录权限:
bash复制chown -R $USER:www-data src chmod -R 775 src/storage
6.2 性能瓶颈排查
如果遇到性能问题,可以:
-
使用ab进行压力测试:
bash复制
ab -n 1000 -c 100 http://localhost:8080/ -
分析Nginx和PHP-FPM日志
-
使用Docker监控工具:
bash复制
docker stats docker top <container_id>
6.3 跨容器通信问题
确保服务间能正常通信:
-
检查网络配置:
bash复制
docker network inspect app-network -
使用服务名而非IP地址(在docker-compose.yml中定义的服务名可直接作为主机名使用)
-
测试容器间连接:
bash复制docker-compose exec php ping nginx
6.4 容器启动失败排查步骤
-
查看容器日志:
bash复制
docker-compose logs -
检查端口冲突:
bash复制
lsof -i :8080 -
验证配置文件语法:
bash复制
docker-compose config -
尝试交互式运行排查:
bash复制
docker-compose run --service-ports php bash
