Docker Compose 多容器部署:前后端服务与数据库的联动配置

引言

在现代应用开发中,前后端分离架构与数据库的协同部署是常见需求。Docker Compose 通过声明式配置实现多容器编排,极大简化了本地开发与测试环境的搭建流程。本文将详细解析如何配置前后端服务与数据库的联动方案。


一、核心组件与依赖关系
  1. 服务拓扑

    • 前端容器:提供用户界面
    • 后端容器:处理业务逻辑
    • 数据库容器:持久化数据存储
    • 依赖关系:前端 → 后端 → 数据库
  2. 网络通信模型

    graph LR
    A[前端] -->|HTTP请求| B[后端]
    B -->|SQL连接| C[数据库]
    


二、容器化配置详解

1. 目录结构示例

project/
├── frontend/
│   ├── Dockerfile
│   └── src/
├── backend/
│   ├── Dockerfile
│   └── app/
└── docker-compose.yml

2. Dockerfile 配置
前端容器配置示例

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "start"]

后端容器配置示例

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:8000"]

3. 核心编排文件 (docker-compose.yml)

version: '3.8'

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - backend

  backend:
    build: ./backend
    environment:
      DB_HOST: database
      DB_PORT: 5432
    depends_on:
      database:
        condition: service_healthy

  database:
    image: postgres:15
    environment:
      POSTGRES_DB: appdb
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: securepass
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U admin"]
      interval: 5s
      timeout: 5s
      retries: 5
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:


三、关键配置解析
  1. 服务依赖控制

    • 使用 depends_on 确保启动顺序
    • 数据库健康检查 (healthcheck) 保证后端仅在数据库就绪后启动
  2. 环境变量注入
    后端通过环境变量获取数据库连接参数:

    # 后端连接数据库示例
    import os
    db_host = os.getenv('DB_HOST', 'localhost')
    

  3. 数据持久化方案

    • 命名卷 pgdata 确保数据库数据持久存储
    • 避免容器重启导致数据丢失

四、部署与验证流程
  1. 启动应用栈

    docker compose up --build
    

  2. 验证步骤

    服务 验证方式 预期结果
    前端 访问 http://localhost:3000 显示应用界面
    后端 curl http://localhost:8000 返回API响应
    数据库 进入容器执行 psql 可连接数据库

五、优势总结
  1. 环境一致性
    通过声明式配置确保开发、测试、生产环境一致

  2. 资源隔离
    各服务运行在独立容器中,避免依赖冲突

  3. 扩展便捷性
    横向扩展示例:

    docker compose up --scale backend=3
    

注:本文方案适用于主流技术栈(如React/Vue前端 + Django/Flask后端 + PostgreSQL/MySQL),可根据实际需求调整镜像与配置参数。


通过 Docker Compose 的标准化编排,开发者可快速构建包含数据库联动的完整应用环境,显著提升协作效率与部署可靠性。

更多推荐