当前位置: 首页 > news >正文

macos 下 docker使用方法 新手教程

下面详细介绍 macOS 下 Docker 的使用方法,特别针对 M1/M2 芯片的 Mac 进行优化。

一、安装 Docker Desktop for Mac

1. 下载和安装

  1. 访问 Docker 官网

  2. 选择 Apple Chip(M1/M2)或 Intel 版本下载

  3. 拖拽 Docker 到 Applications 文件夹

  4. 首次启动需要授权安装辅助工具

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 扩展

  1. 打开 VS Code

  2. 点击左侧 Docker 鲸鱼图标

  3. 你会看到:

    • 正在运行的容器

    • 本地镜像

    • 可以直接管理所有服务

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"
}

使用方法:

  1. Cmd+Shift+P → "Dev Containers: Reopen in Container"

  2. 现在你就在容器环境中开发了!

七、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 开发了!

http://www.dtcms.com/a/528205.html

相关文章:

  • t恤定制网站哪个网站是做红酒酒的
  • 玉林网站建设培训wordpress美术馆插件
  • 一个大型 3A 游戏的开发流程是怎么样的?
  • 智能性能分析:AI大模型识别性能瓶颈并提出改进建议
  • Flutter 中使用 Flame + flame_forge2d 的注意事项清单
  • SpringBoot教程(安装篇):Elasticsearch及可视化工具安装(Windows环境)
  • 华为OD机试双机位A卷 - 商品推荐多属性排序 (C++ Python JAVA JS GO)
  • 延安市违法建设举报网站深圳宝安网站推广
  • Mac Nginx安装、启动、简单命令(苍穹外卖、黑马点评前端环境搭建)
  • 新乡哪有做网站的北京seo执行
  • GitHub等平台形成的开源文化正在重塑林语堂
  • 鸿蒙分布式软总线通信协议详解
  • 建立网站的技术做谷歌seo要发大量文章吗
  • 第7章 muduo编程示例(5)
  • 微软输入法词库拓展600w(win11)
  • 解决虚拟机安装的Ubuntu20.04.6 LTS 不能复制粘贴问题
  • Linux中系统调用sys_access函数的实现
  • 微波加热内部温度场的电磁−热耦合模拟
  • 2024ICPC上海
  • 专业制作网站多少钱成品网页网站
  • Linux(LDAP服务)
  • 安卓旧机变服务器,KSWEB部署Typecho博客并实现远程访问:cpolar内网穿透实验室第645个成功挑战
  • 无需云服务的家庭相册:OpenHarmony 上的 Rust 实践
  • OpenHarmony后台服务开发指南:ServiceAbility与ServiceExtensionAbility全解析
  • ARM Cortex-M 向量表详解
  • 网站优化免费软件游戏推广话术
  • wxPython下载和安装教程(附安装包)
  • IOT项目——电源入门系列-第三章
  • 情绪合集 | 以往高分文献分析,揭示情绪研究热点
  • Vue中data和props数据代理的区别