为什么需要容器化测试环境
你有没有遇到过这种情况:本地开发好好的功能,一上线就报错?依赖版本不一致、系统环境差异、配置文件缺失……这些问题让人头疼。这时候,容器化就成了救星。用 Docker 把整个测试环境打包,不管在哪跑都一个样,就像把饭菜连锅带灶一起搬走,味道不会变。
特别是在团队协作中,每个人电脑配置不同,有人用 Mac,有人用 Windows,还有人用 Linux。靠文档写“请安装 Python 3.9、Node.js 16、Redis 6.2”,不如直接给一个容器镜像来得实在。
准备工具和基础环境
先确认你的电脑装好了 Docker 和 Docker Compose。大多数现代系统都能支持,Mac 和 Windows 可以装 Docker Desktop,Linux 用户推荐用官方脚本一键安装。打开终端,输入 docker --version 看看有没有反应,有就说明装好了。
接下来,我们以一个常见的 Web 项目为例:前端用 Nginx,后端是 Python Flask,数据库用 MySQL,缓存用 Redis。这种组合在实际开发中很常见,比如做个博客系统或者后台管理平台。
编写容器编排文件
在项目根目录新建一个 docker-compose.yml 文件,内容如下:
version: "3.8"
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- api
api:
build: ./flask-app
environment:
- DB_HOST=mysql
- REDIS_URL=redis://redis:6379/0
depends_on:
- mysql
- redis
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=testdb
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
mysql-data:这个文件定义了四个服务,各自独立又互相通信。启动后,访问 http://localhost:8000 就能看到页面,所有依赖自动拉起,不需要手动一个个启动。
构建应用镜像
在 ./flask-app 目录下新建 Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY . .
EXPOSE 5000
CMD ["gunicorn", "-b", "0.0.0.0:5000", "app:app"]这里用了国内镜像源加速包安装,避免被墙卡住。如果你的项目有前端构建步骤,也可以加 npm install && npm run build 进去。
启动与调试
一切就绪后,在命令行运行:
docker-compose up --build第一次会慢一点,因为要下载镜像、安装依赖。等看到日志不再疯狂滚动,就可以开始测试了。如果某个服务崩了,比如 MySQL 启动失败,可以看它的日志:
docker-compose logs mysql查问题就像修水管,哪段漏水查哪段。容器挂了也不怕,删掉重建就行:docker-compose down && docker-compose up,干净利落。
日常使用小技巧
平时开发时,可以把代码目录挂载进容器,改完代码自动生效,不用反复重建镜像。比如修改 api 服务的配置:
api:
build: ./flask-app
volumes:
- ./flask-app:/app
environment:
- FLASK_ENV=development再配合 VS Code 的 Dev Containers 插件,直接在容器里写代码,环境一致性拉满。测试完想分享给同事?推个镜像到私有仓库,一行命令就能跑起来,比发压缩包强多了。