基础命令# 查看容器状态docker ps# 查看容器日志排错神器docker logs 容器名称# 进入容器内部docker exec -it 容器名称 bash# 停止容器docker stop 容器名称# 启动容器docker start 容器名称# 删除容器不会删有 -v 挂载的数据docker rm 容器名称# 查询 windows docker 下载的镜像所在路径docker info | findstr Docker Root Dirredis 环境基础信息1 主 2 从 3 哨兵密码123456主节点127.0.0.1:6379从节点6380、6381哨兵节点63791、63792、63793哨兵主名称mymaster适用Windows PowerShell1. 一键创建 1 主 2 从 3 哨兵全新创建powershelldocker run -d --name redis-master -p 6379:6379 redis redis-server --requirepass 123456; docker run -d --name redis-slave1 -p 6380:6379 redis redis-server --slaveof 127.0.0.1 6379 --masterauth 123456 --requirepass 123456; docker run -d --name redis-slave2 -p 6381:6379 redis redis-server --slaveof 127.0.0.1 6379 --masterauth 123456 --requirepass 123456; docker run -d --name sentinel1 -p 63791:26379 redis sh -c mkdir -p /tmp echo sentinel monitor mymaster 127.0.0.1 6379 2 /tmp/sentinel.conf echo sentinel auth-pass mymaster 123456 /tmp/sentinel.conf redis-sentinel /tmp/sentinel.conf; docker run -d --name sentinel2 -p 63792:26379 redis sh -c mkdir -p /tmp echo sentinel monitor mymaster 127.0.0.1 6379 2 /tmp/sentinel.conf echo sentinel auth-pass mymaster 123456 /tmp/sentinel.conf redis-sentinel /tmp/sentinel.conf; docker run -d --name sentinel3 -p 63793:26379 redis sh -c mkdir -p /tmp echo sentinel monitor mymaster 127.0.0.1 6379 2 /tmp/sentinel.conf echo sentinel auth-pass mymaster 123456 /tmp/sentinel.conf redis-sentinel /tmp/sentinel.conf2. 一键清空所有容器删除重建powershelldocker rm -f $(docker ps -a -q --filter nameredis) docker rm -f $(docker ps -a -q --filter namesentinel)3. 【最关键】哨兵配置文件修改必须按顺序重要规则修改前 → 必须关闭哨兵容器修改后 → 必须重启哨兵容器步骤 1关闭所有哨兵必须做powershelldocker stop sentinel1 sentinel2 sentinel3步骤 2修改配置文件覆盖写入powershell# 修改 sentinel1 docker exec sentinel1 sh -c echo sentinel monitor mymaster 127.0.0.1 6379 2 /tmp/sentinel.conf docker exec sentinel1 sh -c echo sentinel auth-pass mymaster 123456 /tmp/sentinel.conf # 修改 sentinel2 docker exec sentinel2 sh -c echo sentinel monitor mymaster 127.0.0.1 6379 2 /tmp/sentinel.conf docker exec sentinel2 sh -c echo sentinel auth-pass mymaster 123456 /tmp/sentinel.conf # 修改 sentinel3 docker exec sentinel3 sh -c echo sentinel monitor mymaster 127.0.0.1 6379 2 /tmp/sentinel.conf docker exec sentinel3 sh -c echo sentinel auth-pass mymaster 123456 /tmp/sentinel.conf步骤 3重启所有哨兵必须做powershelldocker start sentinel1 sentinel2 sentinel34. 一键关闭所有仅停止保留容器Windows 专用powershelldocker stop $(docker ps -a --filter nameredis --filter namesentinel -q)5. 一键启动所有恢复原有容器Windows 专用powershelldocker start $(docker ps -a --filter nameredis --filter namesentinel -q)6. 常用命令查看所有容器状态powershelldocker ps -a查看哨兵日志powershelldocker logs sentinel1rocketmq 环境停止docker stop rmqnamesrv rmqbroker rmqdashboard启动docker start rmqnamesrv rmqbroker rmqdashboard使用 docker 安装 rocketmq 环境下面给出一套单节点、可直接复制运行的 Docker 部署 RocketMQ 5.x含 NameServer、BrokerProxy、可视化控制台完整步骤适合开发 / 测试环境。1. 环境准备已安装 Docker建议 20.10防火墙放行端口9876、10909、10911、10912、80802. 拉取镜像官方 5.3.2bash运行# 核心镜像NameServer Broker Proxy docker pull apache/rocketmq:5.3.2 # 可视化控制台 docker pull styletang/rocketmq-console-ng:latest3. 创建网络容器互通bash运行docker network create rocketmq4. 启动 NameServer注册中心bash运行docker run -d \ --name rmqnamesrv \ --network rocketmq \ --restart always \ -p 9876:9876 \ -e JAVA_OPT_EXT-Xms256m -Xmx256m \ apache/rocketmq:5.3.2 \ sh mqnamesrv验证bash运行docker logs -f rmqnamesrv # 看到 The Name Server boot success 即可5. 启动 Broker Proxy消息核心bash运行docker run -d \ --name rmqbroker \ --network rocketmq \ --restart always \ -p 10909:10909 -p 10911:10911 -p 10912:10912 \ -p 8080:8080 -p 8081:8081 \ -e NAMESRV_ADDRrmqnamesrv:9876 \ -e JAVA_OPT_EXT-Xms512m -Xmx512m \ apache/rocketmq:5.3.2 \ sh mqbroker -n rmqnamesrv:9876验证bash运行docker logs -f rmqbroker # 看到 broker boot success 即可6. 启动可视化控制台Web 管理bash运行docker run -d \ --name rmqconsole \ --network rocketmq \ --restart always \ -p 8082:8080 \ -e JAVA_OPTS-Drocketmq.namesrv.addrrmqnamesrv:9876 -Dcom.rocketmq.console.config.path/tmp \ styletang/rocketmq-console-ng:latest访问plaintexthttp://localhost:80827. 测试发送 / 消费消息进入 Broker 容器测试bash运行docker exec -it rmqbroker bash # 发送消息 sh tools.sh org.apache.rocketmq.example.quickstart.Producer # 消费消息 sh tools.sh org.apache.rocketmq.example.quickstart.Consumer8. 常用端口说明9876NameServer10909Broker 对外服务端口10911Broker VIP 端口10912Broker 高可用端口8080/8081Proxy 端口5.x 新架构8082可视化控制台9. 可选Docker Compose 一键启动新建docker-compose.ymlyamlversion: 3.8 services: namesrv: image: apache/rocketmq:5.3.2 container_name: rmqnamesrv ports: - 9876:9876 networks: - rocketmq command: sh mqnamesrv environment: JAVA_OPT_EXT: -Xms256m -Xmx256m broker: image: apache/rocketmq:5.3.2 container_name: rmqbroker ports: - 10909:10909 - 10911:10911 - 10912:10912 - 8080:8080 - 8081:8081 networks: - rocketmq depends_on: - namesrv environment: NAMESRV_ADDR: rmqnamesrv:9876 JAVA_OPT_EXT: -Xms512m -Xmx512m command: sh mqbroker -n rmqnamesrv:9876 console: image: styletang/rocketmq-console-ng:latest container_name: rmqconsole ports: - 8082:8080 networks: - rocketmq depends_on: - namesrv environment: JAVA_OPTS: -Drocketmq.namesrv.addrrmqnamesrv:9876 networks: rocketmq: driver: bridge启动bash运行docker-compose up -d如需我可以帮你写一份Windows 环境下的启动脚本含自动创建目录直接双击即可运行。将上述换行的命令改成不换行的形式我把所有多行换行的 docker run 命令全部改成一行不换行版本直接复制粘贴就能用非常方便1. 创建网络docker network create rocketmq2. 启动 NameServerdocker run -d --name rmqnamesrv --network rocketmq --restart always -p 9876:9876 -e JAVA_OPT_EXT-Xms256m -Xmx256m apache/rocketmq:5.3.2 sh mqnamesrv3. 启动 Brokerdocker run -d --name rmqbroker --network rocketmq --restart always -p 10909:10909 -p 10911:10911 -p 10912:10912 -p 8080:8080 -p 8081:8081 -e NAMESRV_ADDRrmqnamesrv:9876 -e JAVA_OPT_EXT-Xms512m -Xmx512m apache/rocketmq:5.3.2 sh mqbroker -n rmqnamesrv:98764. 启动控制台docker run -d --name rmqconsole --network rocketmq --restart always -p 8082:8080 -e JAVA_OPTS-Drocketmq.namesrv.addrrmqnamesrv:9876 -Dcom.rocketmq.console.config.path/tmp styletang/rocketmq-console-ng:latest5. 测试命令docker exec -it rmqbroker bash完整一键执行顺序复制全部一起运行docker network create rocketmq docker run -d --name rmqnamesrv --network rocketmq --restart always -p 9876:9876 -e JAVA_OPT_EXT-Xms256m -Xmx256m apache/rocketmq:5.3.2 sh mqnamesrv docker run -d --name rmqbroker --network rocketmq --restart always -p 10909:10909 -p 10911:10911 -p 10912:10912 -p 8080:8080 -p 8081:8081 -e NAMESRV_ADDRrmqnamesrv:9876 -e JAVA_OPT_EXT-Xms512m -Xmx512m apache/rocketmq:5.3.2 sh mqbroker -n rmqnamesrv:9876 docker run -d --name rmqconsole --network rocketmq --restart always -p 8082:8080 -e JAVA_OPTS-Drocketmq.namesrv.addrrmqnamesrv:9876 -Dcom.rocketmq.console.config.path/tmp styletang/rocketmq-console-ng:latest总结所有命令都已压缩为单行无换行、无转义符直接复制即可在 Windows/Linux/Mac 终端运行启动完成后访问控制台http://localhost:8082MySQLdocker run -d --name mysql8 -p 3306:3306 ^# docker run : 创建并启动一个新的容器# -d : 后台运行容器守护进程模式detached# --name mysql8 : 给容器指定一个名字叫 mysql8方便后续管理如 start/stop/rm# -p 3306:3306 : 端口映射# 宿主机端口:容器内部端口# 即访问本机 3306 端口 访问容器里的 MySQL 3306 端口-v D:/Environment/docker/mysql8/data:/var/lib/mysql ^# -v : 数据卷挂载Volume# D:/Environment/docker/mysql8/data# Windows 宿主机的目录用于持久化数据# /var/lib/mysql# MySQL 容器内部存放数据库文件的目录# 作用即使容器删除数据库数据也不会丢失非常重要-e MYSQL_ROOT_PASSWORD123456 ^# -e : 设置环境变量# MYSQL_ROOT_PASSWORD# MySQL 官方镜像要求的变量# 用于设置 root 用户的密码# 这里密码设置为123456生产环境请勿使用弱密码--restartalways mysql:8.0# --restartalways# Docker 重启或宿主机重启时自动启动该容器# mysql:8.0 : 使用的镜像名称和版本# 如果不写版本默认是 mysql:latestdocker run -d --name mysql8 -p 3306:3306 ^-v D:/Environment/docker/mysql8/data:/var/lib/mysql ^-e MYSQL_ROOT_PASSWORD123456 ^--restartalways mysql:8.0既然你运行容器时使用了-v D:/Environment/docker/mysql8/data:/var/lib/mysql进行数据卷挂载那么删除容器并不会删除你主机上的数据。恢复实际上是“重建”非常简单直接重新执行原来那条docker run命令即可相关命令docker run -d --name rocketmq-namesrv -p 9876:9876 -v D:/Environment/docker/rocketmq/namesrv/logs:/home/rocketmq/logs -v D:/Environment/docker/rocketmq/namesrv/store:/home/rocketmq/store -e JAVA_OPTS-Xms512m -Xmx512m apache/rocketmq:5.1.0 sh mqnamesrvdocker run -d --name rocketmq-broker -p 10909:10909 -p 10911:10911 -p 10912:10912 -v D:/Environment/docker/rocketmq/broker/conf/broker.conf:/home/rocketmq/conf/broker.conf -v D:/Environment/docker/rocketmq/broker/logs:/home/rocketmq/logs -v D:/Environment/docker/rocketmq/broker/store:/home/rocketmq/store -e JAVA_OPTS-Xms1g -Xmx1g apache/rocketmq:5.1.0 sh mqbroker -n 10.8.57.188:9876 -c /home/rocketmq/conf/broker.confdocker run -d --name rocketmq-dashboard -p 8086:8080 -e JAVA_OPTS-Drocketmq.namesrv.addr10.8.57.188:9876 apacherocketmq/rocketmq-dashboard:latestdocker run -d --name rocketmq-dashboard -e JAVA_OPTS-Xmx512m -Xms512m -Drocketmq.namesrv.addr10.8.57.188:9876 -p 8086:8080 apacherocketmq/rocketmq-dashboard:latestdocker stop rocketmq-namesrv rocketmq-broker rocketmq-dashboarddocker rm rocketmq-namesrv rocketmq-broker rocketmq-dashboard首次启动 / 重建启动​docker compose up -d --build查看运行状态​docker compose ps查看 Broker 日志​docker compose logs -f broker停止但不删除数据​docker compose down停止并删除所有数据(慎用)​docker compose down -v#查看配置Get-Content D:/Environment/docker/rocketmq/broker/conf/broker.confDocker Composedev / test / prod 配置不同 Docker Compose 本身并没有“模块化”语法所以它不适合“单体巨石文件”。二、工程实践中正确的解决思路非常重要✅ 核心原则一个 docker-compose 一个“关注点”​而不是 一个 docker-compose 整个系统三、推荐方案Compose 拆分 合并加载工业级✅ 方案一docker-compose.yml 多个 override / fragment目录结构强烈推荐deploy/├── docker-compose.yml # 公共基础├── redis.yml # Redis 主从 Sentinel├── mysql.yml # MySQL├── mq.yml # RocketMQ / Kafka└── dev.env # 环境变量#启动后台docker compose up -d#查看日志docker compose logs -f 容器名#停止但不删容器docker compose stop#停止并删除容器数据不会丢docker compose down启动方式docker compose \-f docker-compose.yml \-f redis.yml \-f mysql.yml \-f mq.yml \up -d# 启动各组件docker compose -f docker-compose.yml \-f redis/docker-compose.redis.yml \-f mysql/docker-compose.mysql.yml \-f mq/docker-compose.kafka.yml \up -ddocker run -d --name mysql8 -p 3306:3306 ^# docker run : 创建并启动一个新的容器# -d : 后台运行容器守护进程模式detached# --name mysql8 : 给容器指定一个名字叫 mysql8方便后续管理如 start/stop/rm# -p 3306:3306 : 端口映射# 宿主机端口:容器内部端口# 即访问本机 3306 端口 访问容器里的 MySQL 3306 端口-v D:/Environment/docker/mysql8/data:/var/lib/mysql ^# -v : 数据卷挂载Volume# D:/Environment/docker/mysql8/data# Windows 宿主机的目录用于持久化数据# /var/lib/mysql# MySQL 容器内部存放数据库文件的目录# 作用即使容器删除数据库数据也不会丢失非常重要-e MYSQL_ROOT_PASSWORD123456 ^# -e : 设置环境变量# MYSQL_ROOT_PASSWORD# MySQL 官方镜像要求的变量# 用于设置 root 用户的密码# 这里密码设置为123456生产环境请勿使用弱密码--restartalways mysql:8.0# --restartalways# Docker 重启或宿主机重启时自动启动该容器# mysql:8.0 : 使用的镜像名称和版本# 如果不写版本默认是 mysql:latestdocker run -d --name mysql8 -p 3306:3306 ^-v D:/Environment/docker/mysql8/data:/var/lib/mysql ^-e MYSQL_ROOT_PASSWORD123456 ^--restartalways mysql:8.0