Laradock 对比 XAMPP / MAMP:从一体化安装包迁移到 Docker 容器环境的完整指南
【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70+ pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch & more.项目地址: https://gitcode.com/gh_mirrors/la/laradock
XAMPP、MAMP 与 WAMP 自 2000 年代初期以来,一直是无数 PHP 开发者搭建本地环境的默认方式:下载一个安装包、点击控制面板、服务即刻运行,无需命令行、无需 Docker。Laradock 保留了这种"开箱即用"的简便性,但将所有组件放进彼此隔离的 Docker 容器中运行,而非直接安装到你的操作系统上。本文基于官方对比文档,客观分析两种方案各自擅长的场景,并给出约 10 分钟即可完成的从 XAMPP / MAMP / WAMP 迁移到 Laradock 的实战步骤。
TL;DR:只有当 Docker 无法在你的机器上运行时,才考虑选择 XAMPP / MAMP;否则 Laradock 能以同样的便捷性为你带来按项目隔离的 PHP 版本、贴近生产环境的栈结构,以及始终保持干净的主机。
XAMPP / MAMP 是什么
XAMPP 和 MAMP 是免费的一体化安装包,直接把 Apache、MySQL(或 MariaDB)和 PHP 安装到你的 Windows、macOS 或 Linux 机器上。它们的工作方式如下:
- 一个安装程序将 Apache、MySQL 和 PHP 直接装到操作系统上;
- 项目存放在
htdocs/目录下; - 通过控制面板启动/停止服务;
- 通过
localhost/phpmyadmin管理数据库。
这套方案确实对新手极其友好,但长期使用会暴露出如下代价:
- 全局只有一个 PHP 版本:所有项目共用同一个 PHP,切换版本意味着重装 XAMPP;
- 团队之间配置漂移:每个成员的机器配置靠手工维护,无法保持一致;
- 没有隔离:一份损坏的 MySQL 配置会影响所有项目;
- 与生产环境脱节:本机原生环境与你的 Linux 服务器形态差异巨大;
- 卸载不干净:卸载后仍会残留大量文件与配置。
用 Laradock 实现同样的功能
Laradock 的做法是在项目目录旁克隆一份仓库,然后用一条命令启动你需要的服务栈:
cd my-project git clone https://github.com/laradock/laradock.git cd laradock启动服务有两种等价方式:Laradock CLI 或直接使用 Docker Compose。
方式一:Laradock CLI(推荐,首次运行带交互向导)
./laradock start nginx mysql phpmyadmin方式二:Docker Compose(纯手工,不依赖 CLI)
cp .env.example .env docker compose up -d nginx mysql phpmyadmin启动后你会得到:
- 应用入口:
http://localhost - phpMyAdmin:
http://localhost:8081(主机名mysql,用户default,密码secret) - 偏好 Apache 而非 Nginx?只需换成
./laradock start apache2 mysql phpmyadmin(或docker compose up -d apache2 mysql phpmyadmin),区别仅此而已。
所有组件都在容器中运行:每个项目可以拥有自己的 PHP 版本(5.6 至 8.5)和独立数据库,团队成员基于同一份文件得到完全一致的栈,而./laradock remove命令可以让你的机器恢复到和之前一模一样的状态。
值得说明的是,Laradock CLI 只是普通docker compose之上的一层便捷封装,不持有状态、不生成额外文件,并且每执行一条命令都会打印其真实运行的docker compose命令(见 CLI 脚本 头部注释)。纯docker compose的方式在任何时候都同样可用。
并排对比
| 维度 | XAMPP / MAMP | Laradock |
|---|---|---|
| 安装 | 桌面安装包(全局安装 Apache/MySQL/PHP) | 无需安装(git clone 即可;仅需 Docker 本身) |
| 启动 | 控制面板按钮 | ./laradock start nginx mysql |
| PHP 版本 | 全局单一版本(切换需重装) | 5.6 至 8.5,按项目隔离,通过.env配置 |
| 项目间隔离 | 无 | 完整(每个项目独立容器) |
| LAMP 之外的服务 | 无(仅 Apache + MySQL) | 100+(Redis、Postgres、队列、搜索、邮件、LLM 等) |
| 是否贴近 Linux 服务器 | 否(原生 Windows/macOS) | 是(相同的容器) |
| 团队一致性 | 各自手工配置 | 相同文件 = 所有成员一致的栈 |
| 清理 | 卸载程序,残留物长期滞留 | ./laradock remove,零残留 |
| 主机占用 | 全局安装 Apache/MySQL/PHP | 主机上不安装任何东西 |
什么情况下选择 XAMPP / MAMP
- Docker 无法在你的机器上运行(旧硬件、公司限制);
- 教授绝对初学者,GUI 控制面板能显著降低上手门槛;
- 只有一个很小的项目,原生方案足够简单,不需要更多能力。
什么情况下选择 Laradock
- 你同时维护多个项目,或你的工作中需要多个 PHP 版本;
- 你希望本地环境的行为与生产服务器一致;
- 你需要 Apache + MySQL 之外的任何服务:Redis、Postgres、队列、搜索、邮件捕获器等,每个都只需一条命令即可启动;
- 你希望有一台可以一条命令彻底清理干净的开发机。
从 XAMPP 迁移到 Laradock(约 10 分钟)
迁移共分 7 步,全程唯一需要安装的东西是 Docker 本身。
- 安装 Docker Desktop(Windows/macOS)或 Docker Engine(Linux),这是本指南中唯一的一次安装。Laradock 要求 Docker Compose v2.20 或更新版本(CLI 脚本 中
MIN_COMPOSE_MINOR=20即为此约束)。 - 在旧 phpMyAdmin(XAMPP)中导出数据库为 SQL 文件。
- 把项目移出
htdocs/,放到任意你喜欢的位置,并在其旁边添加 Laradock:cd my-project git clone https://github.com/laradock/laradock.git cd laradock && cp .env.example .env - 启动你的服务栈:
./laradock start nginx mysql phpmyadmin(或docker compose up -d nginx mysql phpmyadmin;首次运行需要几分钟构建镜像,之后只需几秒即可启动)。 - 在全新的 phpMyAdmin 中导入数据库:访问
localhost:8081,创建数据库并导入第 2 步导出的文件。 - 更新应用配置:数据库主机名从
localhost改为mysql(容器之间通过服务名互相访问),用户default,密码secret(可在.env中修改)。 - 告别旧习惯,对照下表切换日常操作:
| 在 XAMPP 中你... | 在 Laradock 中你... |
|---|---|
| 打开控制面板并点击 Start | ./laradock start nginx mysql |
| 从面板停止 Apache/MySQL | ./laradock stop |
把项目放进htdocs/ | 项目放在任意位置;在.env中设置APP_CODE_PATH_HOST |
编辑php.ini | 编辑php-fpm/phpX.Y.ini,重新构建一次 |
| 通过重装 XAMPP 切换 PHP | 修改.env中的PHP_VERSION=,重新构建一次 |
在操作系统上运行php/composer | ./laradock workspace(内置 PHP、Composer、Node、git 的 Linux shell) |
phpMyAdmin 位于localhost/phpmyadmin | phpMyAdmin 位于localhost:8081 |
迁移过程中的关键配置解读
为了让迁移顺利落地,以下配置项值得重点关注,它们分别对应迁移步骤 3、6 与"切换 PHP"三个环节。
项目目录映射:APP_CODE_PATH_HOST
默认值../表示 Laradock 目录的上一级(即你的项目根目录)会被挂载进容器内的/var/www(.env.example)。容器内部访问路径固定在/var/www,例如 Nginx 默认站点配置 的root /var/www/public,以及 PHP-FPM 的挂载声明。迁移时只需确认项目代码确实位于 Laradock 目录的上一级,或相应调整该变量。
数据库账号与端口:MYSQL_*系列
MySQL 容器的关键变量定义在 mysql/defaults.env:
| 变量 | 默认值 | 说明 |
|---|---|---|
MYSQL_VERSION | 8.4 | 可用 5.7、8.0、8.4、9.0;切换大版本会改变数据目录格式(见下) |
MYSQL_DATABASE | default | 容器启动时自动创建的数据库 |
MYSQL_USER/MYSQL_PASSWORD | default/secret | 应用连接使用的账号密码 |
MYSQL_ROOT_PASSWORD | root | root 账号密码 |
MYSQL_PORT | 3306 | 宿主机映射端口,可改 3307 等避免与本机冲突 |
这些变量通过 mysql/compose.yml 以环境变量形式注入容器,映射关系为"${MYSQL_PORT}:3306"。由于每个服务目录下都有预填好的defaults.env(mysql/defaults.env、phpmyadmin/defaults.env),你不需要复制或编辑它们——任何覆盖只需写进你自己的.env,且.env中的值永远优先(.env.example)。
注意:数据库数据存放在
DATA_PATH_HOST(默认~/.laradock/data)下的子目录中,数据库引擎不会对更新大版本后产生的旧数据做降级兼容。若更换*_VERSION后数据库容器反复重启,要么把版本改回去,要么删除对应引擎在DATA_PATH_HOST下的子目录重新初始化(这会清除该数据库的本地数据),详见 .env.example。
按项目切换 PHP 版本:PHP_VERSION
.env中的PHP_VERSION默认8.4,可接受值为8.5 - 8.4 - 8.3 - 8.2 - 8.1 - 8.0 - 7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6(.env.example)。它同时作用于 Workspace 与 PHP-FPM 容器:PHP-FPM 构建时通过LARADOCK_PHP_VERSION参数传入(php-fpm/compose.yml),对应版本的php-fpm/phpX.Y.ini会被挂载为容器内 php.ini(php-fpm/compose.yml)。也就是说,迁移表中"切换 PHP = 改PHP_VERSION+ 重新构建一次"的说法,在源码层面正是由这一参数链路实现的。
phpMyAdmin 的端口与账号
phpMyAdmin 的默认端口8081、用户default、密码secret定义在 phpmyadmin/defaults.env,并通过 phpmyadmin/compose.yml 注入容器。其中PMA_DB_ENGINE=mysql指定其连接的数据库引擎,PMA_UPLOAD_LIMIT=2G等参数保证大 SQL 文件的导入不会被截断。
关于 XAMPP / MAMP 的常见问题
XAMPP 免费吗?
是的,XAMPP(Apache Friends)免费且开源。MAMP 提供免费版本,另有付费的 MAMP PRO 升级版提供多虚拟主机等更高级的功能。
XAMPP 能运行多个 PHP 版本吗?
不能原生支持;XAMPP 每次安装只有一个全局 PHP 版本。要并排运行多个版本,需要安装多份 XAMPP 拷贝或借助第三方版本切换工具。而 Laradock 开箱即用地为每个项目提供拥有独立 PHP 版本的独立容器。
XAMPP 适合生产环境吗?
不适合。XAMPP 被明确设计并定位为本地开发工具;其默认配置(MySQL root 密码为空、phpMyAdmin 暴露在外)未针对生产环境做加固。
XAMPP 支持 Docker 吗?
不支持。XAMPP 将 Apache、MySQL 和 PHP 直接安装到操作系统上,不使用容器。这正是本文对比的核心差异。
如何把 XAMPP 项目迁移到 Docker?
从 phpMyAdmin 导出数据库,把项目文件移出htdocs/,然后按照上文从 XAMPP 迁移到 Laradock的分步指南操作,全程约 10 分钟。
如需了解完整的方案全景(包括 DDEV、Sail、Herd 与 Lando),可查看 Laradock vs Others;完整的安装与配置参考见 Getting Started。
【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70+ pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch & more.项目地址: https://gitcode.com/gh_mirrors/la/laradock
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考