恋上蓝花楹

Docker Compose 实战:从开发到生产的一键部署

在日常开发中,我们经常需要在本地搭建各种服务:MySQL、Redis、Nginx、应用服务等。一个个安装配置既繁琐又容易出错。Docker Compose 让这一切变得简单——一个 YAML 文件,一条命令,完整环境即刻就绪。

为什么选择 Docker Compose?

传统开发环境面临的问题:

  • 环境不一致:开发、测试、生产环境差异导致的「在我电脑上能跑」问题
  • 配置繁琐:每个服务都要单独安装、配置、启动
  • 版本冲突:不同项目需要不同版本的服务
  • 团队协作困难:新成员搭建环境需要大半天

Docker Compose 通过容器化解决了这些问题。每个服务运行在独立容器中,版本隔离、配置即代码、一键启停。

实战案例:Spring Boot + MySQL + Redis

假设我们有一个 Spring Boot 项目,依赖 MySQL 和 Redis。传统方式需要分别安装配置,现在用 Docker Compose 只需一个文件:

version: "3.8"

services:
  app:
    build: .
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydb
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: secret
      SPRING_REDIS_HOST: redis
    depends_on:
      - db
      - redis

  db:
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: mydb
    volumes:
      - mysql_data:/var/lib/mysql

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

volumes:
  mysql_data:
  redis_data:

一键启动:docker-compose up -d,所有服务就绪。新成员克隆项目后,只需安装 Docker,执行这一条命令即可开始开发。

开发环境 vs 生产环境

Docker Compose 的强大之处在于,同一套配置可以适配不同环境。我们通过多个 compose 文件实现:

开发环境 (docker-compose.yml):

  • 暴露所有端口,方便调试
  • 挂载本地代码目录,实时热重载
  • 使用轻量级镜像

生产环境 (docker-compose.prod.yml):

  • 只暴露必要端口
  • 使用命名卷持久化数据
  • 配置资源限制
  • 启用健康检查

启动生产环境:docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

常用命令速查

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f app

# 进入容器
docker-compose exec app bash

# 停止并删除容器
docker-compose down

# 停止并删除容器+数据卷
docker-compose down -v

最佳实践建议

  1. 使用 .env 文件管理敏感配置:数据库密码、API Key 等不要硬编码在 compose 文件中
  2. 合理命名服务:服务名即为主机名,应用中直接使用服务名连接
  3. 数据持久化:重要数据必须挂载卷,避免容器删除后数据丢失
  4. 健康检查:生产环境配置 healthcheck,让容器自动恢复
  5. 版本锁定:镜像指定具体版本号,避免 latest 带来的不确定性

总结

Docker Compose 让「环境即代码」成为现实。一个 YAML 文件定义了完整的基础设施,版本控制、团队共享、一键部署都变得简单。对于中小型项目,它是最实用的容器编排工具。当你需要管理更多容器时,再平滑迁移到 Kubernetes。

从今天开始,把你的开发环境容器化吧。你会发现,再也没有「环境配置」这个烦恼了。

wulilele

我是一名热爱科技与AI的软件工程师。