目录一、Docker Compose 简介1. 定义2. 核心作用3. 核心概念4. 常用核心命令二、Docker Compose 应用案例1SpringBoot MySQL Redis Nginx案例2ELK 日志收集栈Elasticsearch Logstash Kibana案例3WordPress 博客NginxPHPMysql案例4Prometheus Grafana 监控1. 定义Docker Compose是官方推出的多容器编排工具用于一次性管理一组关联服务前端、后端、数据库、Redis、MQ 等。2. 核心作用一键启停整套服务不用手动挨个docker run一条命令启动所有容器统一配置所有容器参数写在docker-compose.yml文件可版本管理、复制部署自动网络互通同项目内容器默认加入同一网桥服务名直接当域名互相访问数据卷统一管理统一挂载目录、持久化数据环境隔离支持多环境配置开发 / 测试 / 生产3. 核心概念docker-compose.yml主配置文件定义服务、镜像、端口、挂载、依赖、网络service单个容器服务mysql、nginx、apivolume持久化存储卷network自定义网络command覆盖容器启动命令depends_on容器启动依赖先启动数据库再启动应用4. 常用核心命令# 前台启动看日志 docker compose up # 后台守护启动 docker compose up -d # 停止容器不删除 docker compose stop # 停止并删除容器、网络保留数据卷 docker compose down # 停止并删除全部容器网络数据卷 docker compose down -v # 查看运行容器 docker compose ps # 实时日志 docker compose logs -f # 重启单个服务 docker compose restart nginx # 构建镜像本地Dockerfile docker compose build二、Docker Compose 应用案例1SpringBoot MySQL Redis Nginxversion: 3.8 services: # MySQL数据库 mysql: image: mysql:8.0 container_name: dev-mysql environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: demo_db volumes: - mysql_data:/var/lib/mysql ports: - 3306:3306 networks: dev-net: # Redis缓存 redis: image: redis:7-alpine container_name: dev-redis ports: - 6379:6379 volumes: - redis_data:/data networks: dev-net: # Java后端服务 backend: build: ./backend # 本地Dockerfile构建镜像 container_name: dev-backend ports: - 8080:8080 depends_on: - mysql - redis environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/demo_db SPRING_REDIS_HOST: redis networks: dev-net: # Nginx前端静态资源 nginx: image: nginx:alpine container_name: dev-nginx ports: - 80:80 volumes: - ./nginx/conf:/etc/nginx/conf.d - ./frontend/dist:/usr/share/nginx/html depends_on: - backend networks: dev-net: volumes: mysql_data: redis_data: networks: dev-net:操作命令# 启动整套开发环境 docker compose up -d # 查看日志 docker compose logs -f backend # 销毁所有容器保留数据卷 docker compose down # 销毁容器清空数据 docker compose down -v案例2ELK 日志收集栈Elasticsearch Logstash Kibanaversion: 3.8 services: es: image: elasticsearch:7.17.0 environment: discovery.type: single-node ES_JAVA_OPTS-Xms512m -Xmx512m ports: - 9200:9200 volumes: - es-data:/usr/share/elasticsearch/data logstash: image: logstash:7.17.0 volumes: - ./logstash/pipeline:/usr/share/logstash/pipeline depends_on: - es kibana: image: kibana:7.17.0 ports: - 5601:5601 environment: ELASTICSEARCH_HOSTS: http://es:9200 depends_on: - es volumes: es-data:案例3WordPress 博客NginxPHPMysqlversion: 3.8 services: db: image: mysql:5.7 volumes: - wp_db:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: wp123 MYSQL_DATABASE: wordpress wordpress: image: wordpress:apache ports: - 80:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: wp123 WORDPRESS_DB_NAME: wordpress volumes: - wp_html:/var/www/html volumes: wp_db: wp_html:案例4Prometheus Grafana 监控version: 3.8 services: prometheus: image: prom/prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml ports: - 9090:9090 grafana: image: grafana/grafana ports: - 3000:3000 volumes: - grafana-data:/var/lib/grafana volumes: grafana-data: