还在用 WAMP?Docker 早就坐在吧台等你了
真的还在点开 WAMP?
WAMP、XAMPP、MAMP 在 2010 年学 PHP 的时候或许有用,但现在更像卖没气汽水的小店。想在本地复刻接近生产的环境?想把配置纳入版本控制?想在三个项目之间停止端口轮盘?Docker 早就搞定,而你的 Apache 安装器还在闪红灯。
WAMP/XAMPP/MAMP 的老毛病
- 环境冻住:每个套件都强制自己的 PHP、MySQL、Apache 版本。想摸摸 PHP 8.3?先给另外三个项目点蜡。
- 配置不可分享:把
.ini贴到 Slack 给同事或 CI?可爱,但没用。 - 毫无隔离:启用一个 Apache 模块,所有项目一起背锅。幽灵 bug 永远有座。
Docker 直接改写剧本
- YAML 描述的栈:版本化的
compose.yml在任何电脑或 CI 上一条命令就复刻环境。 - 按服务隔离:每个容器带上它精准的 PHP、Redis、PostgreSQL……想怎么配就怎么配。
- 原生可观测:日志、指标、healthcheck——不用再猜
mysqld醒没醒。 - 可移植性:Linux、macOS、Windows、ARM、x86…… 只要内核会跑容器,Docker 都点头。
告别发霉的 docker-compose.yml
Docker 文档说得很明白:文件叫 compose.yml,没有 version 字段,变量进 .env,服务声明式描述。下面这段直接可用:
yaml
几个重点:
name让docker compose ls和日志一目了然。pull_policy: always在更新栈时避免拉到陈旧镜像。depends_on+condition: service_healthy会等 MariaDB 就绪才放 FrankenPHP 开机。- 底部声明的卷能在重建时守住 MySQL 数据。
FrankenPHP:把 Apache 拉下王座
既然 FrankenPHP 集成了现代 SAPI、HTTP worker 和 Symfony/Laravel 原生支持,为什么还要在容器里供着 Apache 或 Nginx?
- 性能:持久 worker、预热 OPCache、HTTP/2,HTTP/3 也在路上。
- 简单:不用十几个
.conf;把应用丢进/app,暴露 80 端口就好。 - 开发体验:不需要
symfony serve的热重载;FrankenPHP 自己维持循环。
CI/CD 不再靠“我机器上能跑”
跑一遍 docker compose run --rm lint,然后把同一套栈部署到生产。没有变态环境差异,也不用再抢 3306 端口。
犀利但真诚的结语
爱受虐就继续抚摸那颗绿色 WAMP 图标吧。但如果想更快上线、让基础设施可版本化,还想三行命令拉起离谱组合(Redis + Meilisearch + FrankenPHP + PostgreSQL),Docker 已经等急了。扔掉史前安装器,提交你的 compose.yml,然后来享受五分钟的上手流程。