Docker Compose 常用配置与命令速查清单

以下是面向 Java 开发工程师 的 Docker Compose 常用配置与命令速查清单,涵盖基础结构、典型 Java 应用场景(如 Spring Boot + MySQL + Redis)、常用命令及最佳实践。


📁 一、Docker Compose 是什么?

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 docker-compose.yml 文件,你可以一键启动/停止整个应用栈(如 Web 服务 + 数据库 + 缓存)。


🛠️ 二、基础 docker-compose.yml 结构

version: '3.8'

services:
  app:                     # 服务名(可自定义)
    build: .               # 构建上下文(或使用 image: myapp:1.0)
    ports:
      - "8080:8080"        # 主机端口:容器端口
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - DB_HOST=mysql
    depends_on:
      - mysql
      - redis
    volumes:
      - ./logs:/app/logs   # 挂载日志目录(开发调试用)

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: mydb
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql  # 使用命名卷持久化数据

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  mysql_data:              # 声明命名卷

💡 关键点说明:

  • depends_on:确保依赖服务先启动(但不等待服务“就绪”,需配合健康检查)。
  • environment:传递环境变量给 Java 应用(Spring Boot 会自动读取)。
  • volumes:避免容器重启后数据丢失(数据库、日志等)。

🧪 三、Java 典型场景示例:Spring Boot + MySQL + Redis

目录结构建议:

my-spring-app/
├── src/
├── pom.xml
├── Dockerfile
└── docker-compose.yml

Dockerfile(参考前面内容):

FROM eclipse-temurin:17-jre-alpine
COPY target/app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

application.yml(Spring Boot 配置):

spring:
  datasource:
    url: jdbc:mysql://mysql:3306/mydb?useSSL=false&serverTimezone=UTC
    username: root
    password: root123
  redis:
    host: redis
    port: 6379

✅ 注意:在 Compose 网络中,服务名(如 mysql、redis)可直接作为主机名使用!


🚀 四、Docker Compose 常用命令

命令说明
docker-compose up启动所有服务(前台运行,Ctrl+C 停止)
docker-compose up -d后台启动(推荐生产/开发使用)
docker-compose down停止并删除容器、网络(不会删除卷)
docker-compose down -v停止并删除容器、网络 和卷(慎用!会丢数据)
docker-compose logs -f app实时查看 app 服务日志
docker-compose ps查看当前项目中所有容器状态
docker-compose build重新构建镜像(当 Dockerfile 或代码变更后)
docker-compose restart app重启某个服务
docker-compose exec app /bin/sh进入 app 容器调试

💡 默认 Compose 项目名是目录名,可通过 -p myproject 指定。


🔒 五、进阶技巧(Java 开发者推荐)

1. 使用 .env 文件管理环境变量

# .env
DB_PASSWORD=root123
REDIS_PORT=6379
# docker-compose.yml
services:
  app:
    environment:
      - DB_PASSWORD=${DB_PASSWORD}

2. 健康检查(Healthcheck)

确保 Spring Boot 应用真正“就绪”后再被依赖:

services:
  app:
    image: myapp:1.0
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
      interval: 30s
      timeout: 10s
      retries: 3

⚠️ 需在 Spring Boot 中启用 Actuator:management.endpoints.web.exposure.include=health

3. 多环境配置(dev / prod)

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

🧹 六、清理与调试

  • 查看所有 Compose 项目:

    docker-compose ls
    
  • 强制重建并启动(代码更新后):

    docker-compose up -d --build
    
  • 仅启动部分服务(如只启数据库):

    docker-compose up -d mysql redis
    

✅ 最佳实践总结

场景建议
开发阶段挂载本地 JAR 或源码目录,实现热部署(结合 Spring DevTools)
生产部署使用预构建镜像,避免在 Compose 中 build;启用健康检查
敏感信息使用 secrets 或外部配置中心,避免明文写密码
网络隔离Compose 自动创建专属 bridge 网络,服务间通过服务名通信

更多推荐