Skip to content

Docker Compose 一键部署

作者:唐亚峰 | battcn
字数统计:1.2k 字

学习目标

使用 Docker Compose 一键部署 Wemirr Platform 所需的全部中间件环境

什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件配置所有服务,然后一条命令即可创建并启动所有服务。

快速开始

0. 先准备 Docker 网络(必做)

Wemirr 仓库提供的 docker-compose.yml 默认使用外部网络 wemirr,因此需要提前创建:

bash
docker network create wemirr

1. 创建项目目录

bash
mkdir -p ~/wemirr/docker
cd ~/wemirr/docker

2. 直接使用仓库自带 docker-compose.yml(推荐)

Wemirr 后端仓库已经提供了可用的中间件编排文件(并且与项目配置保持一致):

  • 文件路径:wemirr-platform/附件/docker/docker-compose.yml

你可以直接复制到本机某个目录运行,也可以在仓库目录直接运行。

版本对齐(非常重要)

该编排文件当前使用的镜像版本:

组件镜像版本
MySQLmysql8.0.19
Redisredis5.0
Nacosnacos/nacos-server2.4.2
RabbitMQdocker.io/macintoshplus/rabbitmq-management镜像未固定 tag(以仓库为准)

文档后续所有示例均以此为准,避免出现“文档能跑,代码跑不了 / 代码能跑,文档版本不对”的问题。

3. 启动服务

bash
# 启动所有服务(后台运行)
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看服务日志
docker-compose logs -f

# 查看指定服务日志
docker-compose logs -f nacos

4. 初始化数据与配置

  • 数据库初始化脚本wemirr-platform/附件/mysql/
  • Nacos 配置包wemirr-platform/附件/nacos/

数据库初始化与 Nacos 导入在 快速上手 已给出操作步骤,此处不重复。

5. 验证服务

服务地址账号/密码
MySQLlocalhost:3306root / 123456
Redislocalhost:6379默认无密码(以 附件/docker/docker-compose.yml 为准)
Nacoshttp://localhost:8848/nacosnacos / nacos
RabbitMQhttp://localhost:15672镜像默认账号密码(以镜像说明为准)

常用命令

服务管理

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

# 停止所有服务
docker-compose stop

# 停止并删除所有服务
docker-compose down

# 停止并删除服务+数据卷(危险!会删除数据)
docker-compose down -v

# 重启所有服务
docker-compose restart

# 重启指定服务
docker-compose restart nacos

# 重新构建并启动
docker-compose up -d --build

端口与健康检查(建议你自己先核对)

组件端口说明
MySQL3306root/123456
Redis6379默认无密码(以仓库 compose 为准)
Nacos8848/9848/9849控制台/GRPC
RabbitMQ5671/5672/15672/25672AMQP/管理台

日志查看

bash
# 查看所有服务日志
docker-compose logs

# 实时查看日志
docker-compose logs -f

# 查看指定服务日志
docker-compose logs -f mysql nacos

# 查看最近100行日志
docker-compose logs --tail=100 mysql

服务扩缩容

bash
# 扩展服务实例数
docker-compose up -d --scale service-name=3

开发环境配置

最小配置(必需)

仅包含必需的中间件:

yaml
version: '3.8'

networks:
  wemirr:
    driver: bridge

services:
  mysql:
    image: mysql:8.0
    container_name: wemirr-mysql
    networks:
      - wemirr
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
    restart: always

  redis:
    image: redis:7-alpine
    container_name: wemirr-redis
    networks:
      - wemirr
    ports:
      - "6379:6379"
    restart: always

  nacos:
    image: nacos/nacos-server:v2.3.0
    container_name: wemirr-nacos
    networks:
      - wemirr
    ports:
      - "8848:8848"
      - "9848:9848"
    environment:
      - MODE=standalone
    restart: always

完整配置(推荐)

包含所有可选中间件,参考上面的完整 docker-compose.yml

环境变量配置

创建 .env 文件管理环境变量:

bash
# .env
MYSQL_ROOT_PASSWORD=your_secure_password
REDIS_PASSWORD=your_redis_password
NACOS_AUTH_TOKEN=your_secure_token_at_least_32_chars
MINIO_ROOT_USER=minio_admin
MINIO_ROOT_PASSWORD=minio_secure_password
RABBITMQ_USER=rabbit_admin
RABBITMQ_PASSWORD=rabbit_secure_password

docker-compose.yml 中引用:

yaml
services:
  mysql:
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}

数据持久化

使用命名卷(推荐)

yaml
volumes:
  mysql-data:
  redis-data:

services:
  mysql:
    volumes:
      - mysql-data:/var/lib/mysql

仓库自带 compose 目前未挂载 Volume

wemirr-platform/附件/docker/docker-compose.yml 以“开箱即用”为主,默认未挂载数据卷。

如果你用于长期开发环境,建议你在本地 copy 一份 compose 并增加 volume 挂载,避免容器删除导致数据丢失。

使用本地目录

yaml
services:
  mysql:
    volumes:
      - ./data/mysql:/var/lib/mysql

故障排查

服务启动失败

bash
# 查看失败原因
docker-compose logs service-name

# 检查容器状态
docker-compose ps -a

# 进入容器调试
docker-compose exec service-name sh

经典错误:network wemirr not found

原因:未创建外部网络 wemirr

解决:

bash
docker network create wemirr
docker-compose up -d

Nacos 启动失败

常见原因:MySQL 未就绪

bash
# 先单独启动 MySQL
docker-compose up -d mysql

# 等待 MySQL 就绪后再启动 Nacos
docker-compose up -d nacos

端口冲突

bash
# 检查端口占用
lsof -i:3306
lsof -i:8848

# 修改 docker-compose.yml 中的端口映射
ports:
  - "13306:3306"  # 改为 13306

下一步