当前位置: 首页 > news >正文

【Docker】summary

基础命令

# 查看容器状态
docker ps

# 查看容器日志(排错神器)
docker logs 容器名称

# 进入容器内部
docker exec -it 容器名称 bash

# 停止容器
docker stop 容器名称

# 启动容器
docker start 容器名称

# 删除容器(不会删有 -v 挂载的数据)
docker rm 容器名称

# 查询 windows docker 下载的镜像所在路径

docker info | findstr "Docker Root Dir"

redis 环境

基础信息(1 主 2 从 3 哨兵)

  • 密码:123456
  • 主节点:127.0.0.1:6379
  • 从节点:6380、6381
  • 哨兵节点:63791、63792、63793
  • 哨兵主名称:mymaster
  • 适用:Windows PowerShell

1. 一键创建 1 主 2 从 3 哨兵(全新创建)

powershell

docker 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.conf"

2. 一键清空所有容器(删除重建)

powershell

docker rm -f $(docker ps -a -q --filter "name=redis") docker rm -f $(docker ps -a -q --filter "name=sentinel")

3. 【最关键】哨兵配置文件修改(必须按顺序)

重要规则

修改前 → 必须关闭哨兵容器修改后 → 必须重启哨兵容器

步骤 1:关闭所有哨兵(必须做)

powershell

docker 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:重启所有哨兵(必须做)

powershell

docker start sentinel1 sentinel2 sentinel3

4. 一键关闭所有(仅停止,保留容器)

Windows 专用

powershell

docker stop $(docker ps -a --filter "name=redis" --filter "name=sentinel" -q)

5. 一键启动所有(恢复原有容器)

Windows 专用

powershell

docker start $(docker ps -a --filter "name=redis" --filter "name=sentinel" -q)

6. 常用命令

查看所有容器状态

powershell

docker ps -a

查看哨兵日志

powershell

docker logs sentinel1

rocketmq 环境

  • 停止docker stop rmqnamesrv rmqbroker rmqdashboard
  • 启动docker start rmqnamesrv rmqbroker rmqdashboard

使用 docker 安装 rocketmq 环境

下面给出一套单节点、可直接复制运行的 Docker 部署 RocketMQ 5.x(含 NameServer、Broker+Proxy、可视化控制台)完整步骤,适合开发 / 测试环境。


1. 环境准备

  • 已安装 Docker(建议 20.10+)
  • 防火墙放行端口:9876、10909、10911、10912、8080

2. 拉取镜像(官方 5.3.2)

bash

运行

# 核心镜像(NameServer + Broker + Proxy) docker pull apache/rocketmq:5.3.2 # 可视化控制台 docker pull styletang/rocketmq-console-ng:latest

3. 创建网络(容器互通)

bash

运行

docker network create rocketmq

4. 启动 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_ADDR=rmqnamesrv: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.addr=rmqnamesrv:9876 -Dcom.rocketmq.console.config.path=/tmp" \ styletang/rocketmq-console-ng:latest

访问:

plaintext

http://localhost:8082

7. 测试发送 / 消费消息

进入 Broker 容器测试:

bash

运行

docker exec -it rmqbroker bash # 发送消息 sh tools.sh org.apache.rocketmq.example.quickstart.Producer # 消费消息 sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

8. 常用端口说明

  • 9876:NameServer
  • 10909:Broker 对外服务端口
  • 10911:Broker VIP 端口
  • 10912:Broker 高可用端口
  • 8080/8081:Proxy 端口(5.x 新架构)
  • 8082:可视化控制台

9. (可选)Docker Compose 一键启动

新建docker-compose.yml

yaml

version: '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.addr=rmqnamesrv:9876" networks: rocketmq: driver: bridge

启动:

bash

运行

docker-compose up -d

如需,我可以帮你写一份Windows 环境下的启动脚本(含自动创建目录),直接双击即可运行。

将上述换行的命令改成不换行的形式

我把所有多行换行的 docker run 命令全部改成一行不换行版本,直接复制粘贴就能用,非常方便:

1. 创建网络

docker network create rocketmq

2. 启动 NameServer

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

3. 启动 Broker

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_ADDR=rmqnamesrv:9876" -e "JAVA_OPT_EXT=-Xms512m -Xmx512m" apache/rocketmq:5.3.2 sh mqbroker -n rmqnamesrv:9876

4. 启动控制台

docker run -d --name rmqconsole --network rocketmq --restart always -p 8082:8080 -e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.console.config.path=/tmp" styletang/rocketmq-console-ng:latest

5. 测试命令

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_ADDR=rmqnamesrv: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.addr=rmqnamesrv:9876 -Dcom.rocketmq.console.config.path=/tmp" styletang/rocketmq-console-ng:latest

总结

  • 所有命令都已压缩为单行,无换行、无转义符
  • 直接复制即可在 Windows/Linux/Mac 终端运行
  • 启动完成后访问控制台:http://localhost:8082

MySQL

docker 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_PASSWORD=123456 ^
# -e : 设置环境变量
# MYSQL_ROOT_PASSWORD
# 👉 MySQL 官方镜像要求的变量
# 用于设置 root 用户的密码
# 这里密码设置为:123456(生产环境请勿使用弱密码)

--restart=always mysql:8.0
# --restart=always
# 👉 Docker 重启或宿主机重启时,自动启动该容器
# mysql:8.0 : 使用的镜像名称和版本
# 👉 如果不写版本,默认是 mysql:latest

docker run -d --name mysql8 -p 3306:3306 ^
-v D:/Environment/docker/mysql8/data:/var/lib/mysql ^
-e MYSQL_ROOT_PASSWORD=123456 ^
--restart=always 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 mqnamesrv

docker 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.conf

docker run -d `
--name rocketmq-dashboard `
-p 8086:8080 `
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=10.8.57.188:9876" `
apacherocketmq/rocketmq-dashboard:latest


docker run -d --name rocketmq-dashboard `
-e "JAVA_OPTS=-Xmx512m -Xms512m -Drocketmq.namesrv.addr=10.8.57.188:9876" `
-p 8086:8080 `
apacherocketmq/rocketmq-dashboard:latest

docker stop rocketmq-namesrv rocketmq-broker rocketmq-dashboard
docker 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.conf

Docker Compose


dev / 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 -d

docker 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_PASSWORD=123456 ^
# -e : 设置环境变量
# MYSQL_ROOT_PASSWORD
# 👉 MySQL 官方镜像要求的变量
# 用于设置 root 用户的密码
# 这里密码设置为:123456(生产环境请勿使用弱密码)

--restart=always mysql:8.0
# --restart=always
# 👉 Docker 重启或宿主机重启时,自动启动该容器
# mysql:8.0 : 使用的镜像名称和版本
# 👉 如果不写版本,默认是 mysql:latest

docker run -d --name mysql8 -p 3306:3306 ^
-v D:/Environment/docker/mysql8/data:/var/lib/mysql ^
-e MYSQL_ROOT_PASSWORD=123456 ^
--restart=always mysql:8.0

http://www.jsqmd.com/news/867390/

相关文章:

  • Bean 为什么需要生命周期?90%的人只会背流程
  • 【YOLO全系列架构演进史】6 YOLOv12:Area Attention与R-ELAN的注意力中心化设计
  • 2026年5月最新哈尔滨呼兰黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • 2026年5月最新抚州临川黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • 2026年5月最新大理漾濞黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • 一套为硬件加速设计的经典边缘检测流水线(三)----方向估算原理
  • 3个关键策略彻底解决BT下载速度慢问题:trackerslist完整配置手册
  • 2026年5月最新泉州南安黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 诚信金利回收
  • 2026年5月最新泸州江阳黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 诚信金利回收
  • 【YOLO全系列架构演进史】8 YOLOv1-v3:从网格预测到Anchor机制的奠基
  • 高性能DNS转发器mosdns终极部署指南:三分钟快速搭建企业级DNS服务
  • 2026年5月最新开封通许黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 五金回收
  • Taotoken的TokenPlan套餐如何为个人开发者节省成本
  • 2026年5月最新大理永平黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • 2026年5月最新青岛平度黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 诚信金利回收
  • 【YOLO全系列架构演进史】9 YOLOv4:CSPDarknet53 + PANet + SPP 的集大成设计
  • 【Linux】基本指令3
  • 2026年5月最新滨州惠民黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • 字幕编辑的终极革命:如何用Subtitle Edit解决你的三大创作痛点
  • 2026年5月最新贺州昭平黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 五金回收
  • 2026年5月最新衡阳祁东黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 五金回收
  • Pandas 数据处理进阶:缺失值、合并、分组聚合与透视表
  • 2026年5月最新哈尔滨木兰黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • public function getAttribute(string $key): mixed {的庖丁解牛
  • 秒懂伺服电机
  • 定时器的输出比较
  • 2026年5月最新甘孜德格黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • 进程管理器大横评:从 PM2 到 Systemd 的选型与实战
  • 2026年5月最新龙岩上杭黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 诚信金利回收
  • 2026年5月最新洛阳宜阳黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 诚信金利回收