目录
[一、Docker Compose 简介](#一、Docker Compose 简介)
[1. 定义](#1. 定义)
[2. 核心作用](#2. 核心作用)
[3. 核心概念](#3. 核心概念)
[4. 常用核心命令](#4. 常用核心命令)
[二、Docker Compose 应用](#二、Docker Compose 应用)
[案例1:SpringBoot + MySQL + Redis + Nginx](#案例1:SpringBoot + MySQL + Redis + Nginx)
[案例2:ELK 日志收集栈(Elasticsearch + Logstash + Kibana)](#案例2:ELK 日志收集栈(Elasticsearch + Logstash + Kibana))
[案例3:WordPress 博客(Nginx+PHP+Mysql)](#案例3:WordPress 博客(Nginx+PHP+Mysql))
[案例4:Prometheus + Grafana 监控](#案例4:Prometheus + Grafana 监控)
1. 定义
Docker Compose 是官方推出的多容器编排工具,用于一次性管理一组关联服务(前端、后端、数据库、Redis、MQ 等)。
2. 核心作用
- 一键启停整套服务 :不用手动挨个
docker run,一条命令启动所有容器 - 统一配置 :所有容器参数写在
docker-compose.yml文件,可版本管理、复制部署 - 自动网络互通:同项目内容器默认加入同一网桥,服务名直接当域名互相访问
- 数据卷统一管理:统一挂载目录、持久化数据
- 环境隔离:支持多环境配置(开发 / 测试 / 生产)
3. 核心概念
docker-compose.yml:主配置文件,定义服务、镜像、端口、挂载、依赖、网络service:单个容器服务(mysql、nginx、api)volume:持久化存储卷network:自定义网络command:覆盖容器启动命令depends_on:容器启动依赖(先启动数据库再启动应用)
4. 常用核心命令
bash
# 前台启动(看日志)
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 应用
案例1:SpringBoot + MySQL + Redis + Nginx
bash
version: '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:
操作命令
bash
# 启动整套开发环境
docker compose up -d
# 查看日志
docker compose logs -f backend
# 销毁所有容器(保留数据卷)
docker compose down
# 销毁容器+清空数据
docker compose down -v
案例2:ELK 日志收集栈(Elasticsearch + Logstash + Kibana)
bash
version: '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:
案例3:WordPress 博客(Nginx+PHP+Mysql)
bash
version: '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:
案例4:Prometheus + Grafana 监控
bash
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: