macos 下 docker使用方法 新手教程
下面详细介绍 macOS 下 Docker 的使用方法,特别针对 M1/M2 芯片的 Mac 进行优化。
一、安装 Docker Desktop for Mac
1. 下载和安装
-
访问 Docker 官网
-
选择 Apple Chip(M1/M2)或 Intel 版本下载
-
拖拽 Docker 到 Applications 文件夹
-
首次启动需要授权安装辅助工具
2. 初始配置
首次运行 Docker Desktop:
-
系统会请求权限,点击 "OK"
-
等待 Docker 启动(状态栏出现鲸鱼图标)
-
打开终端验证安装:
docker --version
docker-compose --version
docker ps
3. 重要设置
打开 Docker Desktop → Preferences:
General:
-
✅ Start Docker Desktop when you log in(推荐)
-
✅ Use Docker Compose V2(推荐)
Resources:
-
CPU: 建议 4-8 核(根据你的 Mac 配置)
-
Memory: 建议 4-8 GB
-
Disk image size: 至少 32 GB
二、macOS 特有的路径和权限
文件路径映射
在 macOS 中,Docker 容器访问主机文件的路径:
# 在容器中访问 Mac 主目录
-v /Users/你的用户名/project:/app# 示例
docker run -v /Users/john/myapp:/app nginx
权限处理
macOS 和 Linux 权限系统不同,需要注意:
# 在 Dockerfile 中设置合适的用户
RUN adduser -D appuser && chown -R appuser /app
USER appuser
三、针对 Apple Silicon (M1/M2) 的优化
使用多平台镜像
# 拉取兼容 M1 的镜像
docker pull --platform linux/amd64 mysql:8.0
# 或者使用 arm64 镜像(性能更好)
docker pull arm64v8/nginx
在 Dockerfile 中指定平台
# 使用多平台基础镜像
FROM --platform=linux/amd64 php:8.1-apache
# 或者使用 arm64 镜像
FROM arm64v8/php:8.1-apache
性能优化
# 使用 platform 参数运行容器
docker run --platform linux/amd64 your-image
# 对于性能敏感的应用,尽量使用 arm64 原生镜像
四、完整的 PHP 项目示例
项目结构
~/Projects/my-php-app/
├── docker-compose.yml
├── src/
│ └── index.php
└── Dockerfile
1. 创建 Dockerfile(针对 M1 优化)
# 使用 ARM 兼容的 PHP 镜像
FROM arm64v8/php:8.1-apache# 对于 Intel Mac 或需要 x86 兼容性:
# FROM --platform=linux/amd64 php:8.1-apacheWORKDIR /var/www/html# 安装系统依赖(针对 ARM 架构)
RUN apt-get update && apt-get install -y \libpng-dev \libjpeg-dev \libfreetype6-dev \libzip-dev \zip \unzip \&& docker-php-ext-configure gd --with-freetype --with-jpeg \&& docker-php-ext-install gd pdo pdo_mysql zipRUN a2enmod rewriteCOPY src/ /var/www/html/# 设置正确的文件权限
RUN chown -R www-data:www-data /var/www/html \&& chmod -R 755 /var/www/htmlEXPOSE 80
CMD ["apache2-foreground"]
2. 创建 docker-compose.yml
version: '3.8'services:web:build: .platform: linux/arm64 # 针对 M1/M2 优化ports:- "8080:80"volumes:- ./src:/var/www/html- /Users/${USER}/Projects/my-php-app/src:/var/www/html # 绝对路径确保正确映射depends_on:- dbenvironment:- APACHE_RUN_USER=www-data- APACHE_RUN_GROUP=www-datadb:image: mysql:8.0platform: linux/arm64 # 使用 ARM 版本environment:MYSQL_ROOT_PASSWORD: secretMYSQL_DATABASE: myappMYSQL_USER: app_userMYSQL_PASSWORD: app_passwordvolumes:- mysql_data:/var/lib/mysqlports:- "3306:3306"phpmyadmin:image: phpmyadmin/phpmyadminplatform: linux/arm64environment:PMA_HOST: dbPMA_PORT: 3306MYSQL_ROOT_PASSWORD: secretports:- "8081:80"depends_on:- dbvolumes:mysql_data:
3. 创建测试文件
src/index.php:
<?php
phpinfo();// 测试 MySQL 连接
try {$pdo = new PDO('mysql:host=db;dbname=myapp', 'app_user', 'app_password');echo "<h2>MySQL 连接成功!</h2>";
} catch (Exception $e) {echo "<h2>MySQL 连接失败: " . $e->getMessage() . "</h2>";
}
?>
五、在 macOS 终端中使用 Docker
基本命令
# 进入项目目录
cd ~/Projects/my-php-app# 构建和启动服务
docker-compose up -d# 查看运行状态
docker-compose ps# 查看日志
docker-compose logs web
docker-compose logs -f web # 实时日志# 停止服务
docker-compose down# 重建服务(代码修改后)
docker-compose up -d --build
常用调试命令
# 进入容器
docker-compose exec web bash
docker-compose exec db mysql -u root -p# 查看容器资源使用
docker stats# 清理无用镜像
docker image prune# 查看磁盘使用
docker system df
六、在 VS Code 中的集成使用
1. 安装扩展
-
Docker (Microsoft)
-
Dev Containers (Microsoft)
2. 使用 Docker 扩展
-
打开 VS Code
-
点击左侧 Docker 鲸鱼图标
-
你会看到:
-
正在运行的容器
-
本地镜像
-
可以直接管理所有服务
-
3. 在容器中开发
创建 .devcontainer/devcontainer.json:
{"name": "PHP Development","dockerComposeFile": "../docker-compose.yml","service": "web","workspaceFolder": "/var/www/html","shutdownAction": "stopCompose","customizations": {"vscode": {"extensions": ["bmewburn.vscode-intelephense-client","ms-azuretools.vscode-docker"]}},"forwardPorts": [8080, 8081, 3306],"postCreateCommand": "chmod -R 755 /var/www/html","remoteUser": "www-data"
}
使用方法:
-
Cmd+Shift+P→ "Dev Containers: Reopen in Container" -
现在你就在容器环境中开发了!
七、macOS 特有技巧和问题解决
1. 文件同步性能优化
Docker Desktop 的文件共享在 macOS 上可能较慢,可以:
# 在 docker-compose.yml 中使用 cached 模式
volumes:- ./src:/var/www/html:cached # 读缓存# 或者使用 delegated(写缓存)- ./src:/var/www/html:delegated
2. 主机网络访问
在 macOS 中,从容器访问主机服务:
# 使用 host.docker.internal 代替 localhost
# 在 PHP 代码中访问主机服务:
$host = 'host.docker.internal';
3. 端口占用检查
# 检查端口是否被占用
lsof -i :8080
lsof -i :3306# 如果端口被占用,修改 docker-compose.yml 中的端口映射
4. 磁盘空间管理
# 查看 Docker 磁盘使用
docker system df# 清理所有无用数据
docker system prune -a# 在 Docker Desktop 中也可以清理:
# Preferences → Resources → Advanced → Disk image size
八、完整工作流程示例
启动项目:
# 1. 进入项目目录
cd ~/Projects/my-php-app# 2. 启动服务
docker-compose up -d# 3. 访问应用
open http://localhost:8080
open http://localhost:8081 # phpMyAdmin
日常开发:
# 修改代码后,文件会自动同步
# 查看实时日志
docker-compose logs -f web# 进入容器调试
docker-compose exec web bash
php -v
composer install# 数据库操作
docker-compose exec db mysql -u root -psecret
停止项目:
# 停止并删除容器
docker-compose down# 停止但保留数据卷
docker-compose stop
九、常见问题解决
1. "Cannot connect to the Docker daemon"
-
确保 Docker Desktop 正在运行
-
重启 Docker Desktop
2. 权限错误
# 在 Dockerfile 中添加用户权限设置
RUN chown -R www-data:www-data /var/www/html
RUN chmod -R 755 /var/www/html
3. 端口冲突
# 修改 docker-compose.yml 中的端口
ports:- "8082:80" # 改用其他端口
4. 性能问题
-
在 Docker Desktop Preferences 中增加内存分配
-
使用
:cached或:delegated卷模式 -
考虑使用 Docker 的
buildkit:
DOCKER_BUILDKIT=1 docker-compose build
现在你的 macOS Docker 环境已经配置完成,可以高效地进行 PHP 开发了!
