Docker Compose 简介及应用

目录

[一、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:
相关推荐
机核研创社8 小时前
睡裤明橡筋自动化选型指南与落地四步走
运维·自动化
志栋智能8 小时前
超自动化运维,告别复杂系统的新范式
运维·自动化
零基础1238 小时前
Ubuntu 常用命令汇总
linux·运维·开发语言
Android系统攻城狮8 小时前
Linux Gstreamer深度解析之gst_audio_sink_get_type调用流程与实战(六十五)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
元Y亨H9 小时前
基于 Jenkins + Docker 的前端(Vben Admin)CI/CD 踩坑
docker·jenkins
云贝贝贝10 小时前
PostgreSQL 分区表:从设计到运维,大表不再卡
运维·数据库·postgresql
wzq11_66610 小时前
kubernetes集群——灰度发布
云原生·容器·kubernetes
白兰地空瓶10 小时前
项目要上线了,我连夜学完 Docker:从底层原理到容器化部署全记录
docker·全栈
fengkai454511 小时前
十二、Redis -1
运维·数据库·redis
甜到心里的蛋糕11 小时前
Playwright 无头浏览器自动发布 CSDN 图文草稿的实践(持久化 profile + 图床直传)
运维·python·playwright·爬虫自动化·博客运营