还记得上一次用Docker搭的那个最简PHP环境吗?一个基于 php:8.5-apache 的容器,把源码目录挂进去,8080 端口一开,连本地PHP都不装就能跑代码。小项目、随手实验,足够轻便,也用得挺开心。
可一旦程序需要存数据,这个单容器方案就露怯了。总不能让用户提交的表单随风而逝吧?于是,数据库登场,顺带PHP还得装上能与MySQL系数据库对话的扩展。原来那份只写了一个 web 服务的 compose.yml,是时候进化了。
这次我们做的事很直白:在旧配置上贴一个 MariaDB 服务,并把 web 容器的启动方式从直接拉镜像,改为本地构建,以便注入 mysqli、pdo、pdo_mysql 三个扩展。整完之后的 yaml 长这样——
services 底下多出一个 mariadb 成员,用的是 mariadb:10.11 镜像,顺便用环境变量一键设好 root 密码、库名、用户和用户密码。而 web 那边,image 字段被换成了 build: . ,让 Docker 去找当前目录下的 Dockerfile 干活。Dockerfile 就三行:基于 php:8.5-apache,然后跑一条 docker-php-ext-install 把上面三个扩展安上。简单粗暴,却刚好满足数据库连接需求。
仔细看的话,文件末尾还多了一段 volumes: mariadb_data: 的声明。这可不是写来凑数的。Docker 容器天生就是可替换的,删掉一个容器,里面所有的数据就跟着灰飞烟灭。数据库可经不起这么折腾。给 MariaDB 配一个独立管理的卷,相当于把数据挪到了一个 docker 自己看管的“外部仓库”里。哪怕把数据库容器删掉重建,只要挂的还是同一个卷,表和数据都安稳地呆在那里,开发时的测试数据再也不会莫名消失。
至于 web 容器为什么要切到本地构建,除了装扩展这个硬需求,还有个顺手的好处:开发阶段,源码照样不往镜像里塞,直接通过 volumes 挂载。改一行 PHP,容器里秒生效,完全不用重新打镜像。这种“热更新”体验,对于改来改去的日常调试太对胃口了。
至此,单薄的一个容器,变成了 web + 数据库双服务协同的小型开发环境。原本需要本地装一堆依赖才能跑起来的场景,如今一份 compose 文件加几行 Dockerfile 就能随时复现,团队新成员把仓库 clone 下来,一句 docker compose up 就拥有同样的运行环境。从实验玩具到能存数据的开发环境,升级的代价,真的就只是多写十来行配置而已。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.