news 2026/3/18 11:40:33

Docker中安装软件汇总(留存版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker中安装软件汇总(留存版)

目录

  • 前言
  • 1 Mysql
    • 1.1 挂载目录结构
    • 1.2 创建容器
      • 1.2.1 docker run
      • 1.2.2 compose
  • 2 Nginx
    • 2.1 挂载目录结构
    • 2.2 创建容器
      • 2.2.1 docker run
      • 2.2.2 compose
  • 3 Nacos
    • 3.1 挂载目录结构
    • 3.2 创建容器
      • 3.2.1 docker run
      • 3.2.2 compose
  • 4 Redis
    • 4.1 挂载目录结构
    • 4.2 创建容器
      • 4.2.1 docker run
      • 4.2.2 compose
  • 5 Sentinel
    • 5.1 创建容器
      • 5.2.1 docker run
      • 5.2.2 compose
  • 6 Seata
    • 6.1 挂载目录结构
    • 6.2 创建容器
      • 6.2.1 docker run
      • 6.2.2 compose
    • 6.2.3 拓展
    • 6.2.4 application.yml注释版
  • 7 RabbitMQ
    • 7.1 挂载目录结构
    • 7.2 创建容器
      • 7.2.1 先复制默认配置到本地
      • 7.2.2 docker run
      • 7.2.3 compose

前言

  • compose创建的时候。我填写的xxx 代表着你想要的自定义网络名。name指向的xxx是因为如果compose文件不与挂载文件在同一目录下网络名不会按照你写的xxx来创建。这三个xxx统一名字就可以。
  • ./作为相对路径,在 部分 Shell 环境(如 Windows CMD、部分老旧 Linux Shell) 中会解析失败,Docker 无法识别./对应的宿主机绝对路径;
    替换为$(pwd)(Linux/macOS)
    替换为%cd%(Windows CMD)
    或直接用绝对路径。
  • 如果网络已经存在了,在compose中可以这样指定:
    networks:xxx:# 网络名称必须和 services 中引用的一致external:true# 告诉 Docker Compose:该网络已存在,直接使用,不重复创建

1 Mysql

1.1 挂载目录结构

/root/ ├── docker-compose.yml # docker-compose.yml 所在的根目录 └── MySql/ # MySQL 挂载目录 ├── conf/ # MySQL 配置文件目录(自定义 my.cnf 等) │ └── xxx.cnf ├── data/ # MySQL 数据持久化目录(核心,存储数据库文件) └── init/ # MySQL 数据初始化目录(在创建数据库的时候运行创建库的文件,可以多个) ├── xxxxxxx.sql └── xxxxxxx.sql
  • cnf 文件模板
[client] default_character_set=utf8mb4 [mysql] default_character_set=utf8mb4 [mysqld] character_set_server=utf8mb4 collation_server=utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'

1.2 创建容器

1.2.1 docker run

# 创建自定义桥接网络(对应 Compose 中的 networks.xxx)# 这两个等效 效果一样 都是使用bridge网络驱动docker network create --driver bridge xxx docker network create xxx
# 启动 MySQL 容器docker run -d\--name mysql\--publish3306:3306\--envTZ=Asia/Shanghai\--envMYSQL_ROOT_PASSWORD=root\--volume ./MySql/conf:/etc/mysql/conf.d\--volume ./MySql/data:/var/lib/mysql\--volume ./MySql/init:/docker-entrypoint-initdb.d\--health-cmd"mysqladmin ping -h localhost -u root -p\$MYSQL_ROOT_PASSWORD"\--health-interval 5s\--health-timeout 5s\--health-retries5\--restart unless-stopped\--network xxx\mysql:8.0.40
# 简化版启动命令(核心参数简写)docker run -d\--name mysql\-p3306:3306\-eTZ=Asia/Shanghai\-eMYSQL_ROOT_PASSWORD=root\-v ./MySql/conf:/etc/mysql/conf.d\-v ./MySql/data:/var/lib/mysql\-v ./MySql/init:/docker-entrypoint-initdb.d\--health-cmd"mysqladmin ping -h localhost -u root -p\$MYSQL_ROOT_PASSWORD"\--health-interval 5s --health-timeout 5s --health-retries5\--restart unless-stopped\--network xxx\mysql:8.0.40

1.2.2 compose

version:'3.8'services:mysql:image:mysql:8.0.40container_name:mysqlports:-"3306:3306"environment:TZ:Asia/ShanghaiMYSQL_ROOT_PASSWORD:rootvolumes:-"./MySql/conf:/etc/mysql/conf.d"-"./MySql/data:/var/lib/mysql"-"./MySql/init:/docker-entrypoint-initdb.d"healthcheck:test:["CMD","mysqladmin","ping","-h","localhost","-u root","-p$$MYSQL_ROOT_PASSWORD"]interval:5stimeout:5sretries:5restart:unless-stoppednetworks:-xxxnetworks:xxx:driver:bridge# 创建自定义桥接网络name:xxx

2 Nginx

2.1 挂载目录结构

/root/ ├── docker-compose.yml # docker-compose.yml 所在的根目录 └── Nginx/ # Nginx主配置目录 ├── conf/ # MySQL 配置文件目录(自定义 my.cnf 等) │ ├── nginx.conf # Nginx核心配置文件(必填) │ └── conf.d # 虚拟主机配置目录(可选,推荐) │ └── default.conf # 站点配置文件(比如反向代理、静态站点) ├── html/ # 静态资源目录(默认站点根目录) │ └── index.html # 测试页面 ├── logs/ # 日志目录(access.log/error.log) └── ssl/ # 可选,存放HTTPS证书(如需要) ├── server.crt └── server.key

2.2 创建容器

2.2.1 docker run

docker network create xxx
docker run -d\--name nginx\-p80:80\-v ./Nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro\-v ./Nginx/html:/usr/share/nginx/html\-v ./Nginx/logs:/var/log/nginx\--restart unless-stopped\--network xxx\nginx:1.26.0

2.2.2 compose

version:'3.8'services:nginx:image:nginx:1.26.0container_name:nginxports:-"80:80"volumes:-./Nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro-./Nginx/html:/usr/share/nginx/html-./Nginx/logs:/var/log/nginxcommand:[nginx,-g,"daemon off;"]restart:unless-stoppednetworks:-xxx# 自定义网络(可选,隔离容器)networks:xxx:driver:bridgename:xxx

3 Nacos

3.1 挂载目录结构

/root/ ├── docker-compose.yml # docker-compose.yml 所在的根目录 └── Nacos/ # Nacos主配置目录 └── custom.env # 集中管理 Nacos 容器运行时的环境变量的核心配置文件
  • custom.env文件模板
PREFER_HOST_MODE=hostname MODE=standalone SPRING_DATASOURCE_PLATFORM=mysql MYSQL_SERVICE_HOST=mysql MYSQL_SERVICE_DB_NAME=nacos_config MYSQL_SERVICE_PORT=3306 MYSQL_SERVICE_USER=root MYSQL_SERVICE_PASSWORD=root MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai nacos.core.auth.enabled=true nacos.core.auth.server.identity.key=example nacos.core.auth.server.identity.value=example nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
  • nacos_config.sql文件
/* * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */DROPDATABASEIFEXISTS`nacos_config`;CREATEDATABASEIFNOTEXISTS`nacos_config`/*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci *//*!80016 DEFAULT ENCRYPTION='N' */;USE`nacos_config`;/******************************************//* 表名称 = config_info *//******************************************/CREATETABLE`config_info`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'id',`data_id`varchar(255)NOTNULLCOMMENT'data_id',`group_id`varchar(128)DEFAULTNULLCOMMENT'group_id',`content`longtextNOTNULLCOMMENT'content',`md5`varchar(32)DEFAULTNULLCOMMENT'md5',`gmt_create`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',`gmt_modified`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'修改时间',`src_user`textCOMMENT'source user',`src_ip`varchar(50)DEFAULTNULLCOMMENT'source ip',`app_name`varchar(128)DEFAULTNULLCOMMENT'app_name',`tenant_id`varchar(128)DEFAULT''COMMENT'租户字段',`c_desc`varchar(256)DEFAULTNULLCOMMENT'configuration description',`c_use`varchar(64)DEFAULTNULLCOMMENT'configuration usage',`effect`varchar(64)DEFAULTNULLCOMMENT'配置生效的描述',`type`varchar(64)DEFAULTNULLCOMMENT'配置的类型',`c_schema`textCOMMENT'配置的模式',`encrypted_data_key`varchar(1024)NOTNULLDEFAULT''COMMENT'密钥',PRIMARYKEY(`id`),UNIQUEKEY`uk_configinfo_datagrouptenant`(`data_id`,`group_id`,`tenant_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_binCOMMENT='config_info';/******************************************//* 表名称 = config_info_aggr *//******************************************/CREATETABLE`config_info_aggr`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'id',`data_id`varchar(255)NOTNULLCOMMENT'data_id',`group_id`varchar(128)NOTNULLCOMMENT'group_id',`datum_id`varchar(255)NOTNULLCOMMENT'datum_id',`content`longtextNOTNULLCOMMENT'内容',`gmt_modified`datetimeNOTNULLCOMMENT'修改时间',`app_name`varchar(128)DEFAULTNULLCOMMENT'app_name',`tenant_id`varchar(128)DEFAULT''COMMENT'租户字段',PRIMARYKEY(`id`),UNIQUEKEY`uk_configinfoaggr_datagrouptenantdatum`(`data_id`,`group_id`,`tenant_id`,`datum_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_binCOMMENT='增加租户字段';/******************************************//* 表名称 = config_info_beta *//******************************************/CREATETABLE`config_info_beta`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'id',`data_id`varchar(255)NOTNULLCOMMENT'data_id',`group_id`varchar(128)NOTNULLCOMMENT'group_id',`app_name`varchar(128)DEFAULTNULLCOMMENT'app_name',`content`longtextNOTNULLCOMMENT'content',`beta_ips`varchar(1024)DEFAULTNULLCOMMENT'betaIps',`md5`varchar(32)DEFAULTNULLCOMMENT'md5',`gmt_create`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',`gmt_modified`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'修改时间',`src_user`textCOMMENT'source user',`src_ip`varchar(50)DEFAULTNULLCOMMENT'source ip',`tenant_id`varchar(128)DEFAULT''COMMENT'租户字段',`encrypted_data_key`varchar(1024)NOTNULLDEFAULT''COMMENT'密钥',PRIMARYKEY(`id`),UNIQUEKEY`uk_configinfobeta_datagrouptenant`(`data_id`,`group_id`,`tenant_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_binCOMMENT='config_info_beta';/******************************************//* 表名称 = config_info_tag *//******************************************/CREATETABLE`config_info_tag`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'id',`data_id`varchar(255)NOTNULLCOMMENT'data_id',`group_id`varchar(128)NOTNULLCOMMENT'group_id',`tenant_id`varchar(128)DEFAULT''COMMENT'tenant_id',`tag_id`varchar(128)NOTNULLCOMMENT'tag_id',`app_name`varchar(128)DEFAULTNULLCOMMENT'app_name',`content`longtextNOTNULLCOMMENT'content',`md5`varchar(32)DEFAULTNULLCOMMENT'md5',`gmt_create`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',`gmt_modified`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'修改时间',`src_user`textCOMMENT'source user',`src_ip`varchar(50)DEFAULTNULLCOMMENT'source ip',PRIMARYKEY(`id`),UNIQUEKEY`uk_configinfotag_datagrouptenanttag`(`data_id`,`group_id`,`tenant_id`,`tag_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_binCOMMENT='config_info_tag';/******************************************//* 表名称 = config_tags_relation *//******************************************/CREATETABLE`config_tags_relation`(`id`bigint(20)NOTNULLCOMMENT'id',`tag_name`varchar(128)NOTNULLCOMMENT'tag_name',`tag_type`varchar(64)DEFAULTNULLCOMMENT'tag_type',`data_id`varchar(255)NOTNULLCOMMENT'data_id',`group_id`varchar(128)NOTNULLCOMMENT'group_id',`tenant_id`varchar(128)DEFAULT''COMMENT'tenant_id',`nid`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'nid, 自增长标识',PRIMARYKEY(`nid`),UNIQUEKEY`uk_configtagrelation_configidtag`(`id`,`tag_name`,`tag_type`),KEY`idx_tenant_id`(`tenant_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_binCOMMENT='config_tag_relation';/******************************************//* 表名称 = group_capacity *//******************************************/CREATETABLE`group_capacity`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENTCOMMENT'主键ID',`group_id`varchar(128)NOTNULLDEFAULT''COMMENT'Group ID,空字符表示整个集群',`quota`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'配额,0表示使用默认值',`usage`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'使用量',`max_size`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'单个配置大小上限,单位为字节,0表示使用默认值',`max_aggr_count`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'聚合子配置最大个数,,0表示使用默认值',`max_aggr_size`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',`max_history_count`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'最大变更历史数量',`gmt_create`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',`gmt_modified`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'修改时间',PRIMARYKEY(`id`),UNIQUEKEY`uk_group_id`(`group_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_binCOMMENT='集群、各Group容量信息表';/******************************************//* 表名称 = his_config_info *//******************************************/CREATETABLE`his_config_info`(`id`bigint(20)unsignedNOTNULLCOMMENT'id',`nid`bigint(20)unsignedNOTNULLAUTO_INCREMENTCOMMENT'nid, 自增标识',`data_id`varchar(255)NOTNULLCOMMENT'data_id',`group_id`varchar(128)NOTNULLCOMMENT'group_id',`app_name`varchar(128)DEFAULTNULLCOMMENT'app_name',`content`longtextNOTNULLCOMMENT'content',`md5`varchar(32)DEFAULTNULLCOMMENT'md5',`gmt_create`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',`gmt_modified`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'修改时间',`src_user`textCOMMENT'source user',`src_ip`varchar(50)DEFAULTNULLCOMMENT'source ip',`op_type`char(10)DEFAULTNULLCOMMENT'operation type',`tenant_id`varchar(128)DEFAULT''COMMENT'租户字段',`encrypted_data_key`varchar(1024)NOTNULLDEFAULT''COMMENT'密钥',PRIMARYKEY(`nid`),KEY`idx_gmt_create`(`gmt_create`),KEY`idx_gmt_modified`(`gmt_modified`),KEY`idx_did`(`data_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_binCOMMENT='多租户改造';/******************************************//* 表名称 = tenant_capacity *//******************************************/CREATETABLE`tenant_capacity`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENTCOMMENT'主键ID',`tenant_id`varchar(128)NOTNULLDEFAULT''COMMENT'Tenant ID',`quota`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'配额,0表示使用默认值',`usage`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'使用量',`max_size`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'单个配置大小上限,单位为字节,0表示使用默认值',`max_aggr_count`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'聚合子配置最大个数',`max_aggr_size`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',`max_history_count`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'最大变更历史数量',`gmt_create`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',`gmt_modified`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'修改时间',PRIMARYKEY(`id`),UNIQUEKEY`uk_tenant_id`(`tenant_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_binCOMMENT='租户容量信息表';CREATETABLE`tenant_info`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'id',`kp`varchar(128)NOTNULLCOMMENT'kp',`tenant_id`varchar(128)default''COMMENT'tenant_id',`tenant_name`varchar(128)default''COMMENT'tenant_name',`tenant_desc`varchar(256)DEFAULTNULLCOMMENT'tenant_desc',`create_source`varchar(32)DEFAULTNULLCOMMENT'create_source',`gmt_create`bigint(20)NOTNULLCOMMENT'创建时间',`gmt_modified`bigint(20)NOTNULLCOMMENT'修改时间',PRIMARYKEY(`id`),UNIQUEKEY`uk_tenant_info_kptenantid`(`kp`,`tenant_id`),KEY`idx_tenant_id`(`tenant_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_binCOMMENT='tenant_info';CREATETABLE`users`(`username`varchar(50)NOTNULLPRIMARYKEYCOMMENT'username',`password`varchar(500)NOTNULLCOMMENT'password',`enabled`booleanNOTNULLCOMMENT'enabled');CREATETABLE`roles`(`username`varchar(50)NOTNULLCOMMENT'username',`role`varchar(50)NOTNULLCOMMENT'role',UNIQUEINDEX`idx_user_role`(`username`ASC,`role`ASC)USINGBTREE);CREATETABLE`permissions`(`role`varchar(50)NOTNULLCOMMENT'role',`resource`varchar(128)NOTNULLCOMMENT'resource',`action`varchar(8)NOTNULLCOMMENT'action',UNIQUEINDEX`uk_role_permission`(`role`,`resource`,`action`)USINGBTREE);

3.2 创建容器

3.2.1 docker run

docker network create xxx
docker run -d\--name nacos\--network=xxx\--restart=unless-stopped\--health-cmd="nc -z localhost 8848"\--health-interval=3s\--health-timeout=5s\--health-retries=10\--health-start-period=10s\--depends-on mysql:service_healthy\-p8848:8848\-p9848:9848\-p9849:9849\--env-file=./Nacos/custom.env\nacos/nacos-server:v2.4.3

3.2.2 compose

version:'3.8'services:nacos:image:nacos/nacos-server:v2.4.3container_name:nacosenv_file:./Nacos/custom.envports:-"8848:8848"-"9848:9848"-"9849:9849"depends_on:mysql:condition:service_healthyhealthcheck:test:["CMD","nc","-z","localhost","8848"]interval:3stimeout:5sretries:10start_period:10snetworks:-xxxrestart:unless-stoppednetworks:xxx:driver:bridgename:xxx

4 Redis

4.1 挂载目录结构

/root/ ├── docker-compose.yml # docker-compose.yml 所在的根目录 └── Redis/ # Redis主配置目录 ├── data/ # 数据持久化目录(核心,存储数据库文件) └── redis.conf # 存放Redis配置
  • redis.conf文件模板
# 开启 AOF 持久化 appendonly yes # 设置持久化文件名 appendfilename "appendonly.aof" # 日志级别 loglevel notice # 数据文件存放位置 dir /data # 设置连接密码 requirepass 123456

4.2 创建容器

4.2.1 docker run

docker network create xxx
docker run -d\--name redis\-p6379:6379\-v ./Redis/data:/data\-v ./Redis/redis.conf:/usr/local/etc/redis/redis.conf\--restart unless-stopped\--network xxx\redis:7.2\redis-server /usr/local/etc/redis/redis.conf

4.2.2 compose

version:"3.8"services:redis:image:redis:7.2container_name:redisports:-"6379:6379"volumes:-"./Redis/data:/data"-"./Redis/redis.conf:/usr/local/etc/redis/redis.conf"command:["redis-server","/usr/local/etc/redis/redis.conf"]networks:-xxxrestart:unless-stoppednetworks:xxx:driver:bridgename:xxx

5 Sentinel

5.1 创建容器

5.2.1 docker run

docker network create xxx
docker run -d\--name sentinel\-p8858:8858\-p8719:8719\-eSENTINEL_DASHBOARD_USERNAME=sentinel\-eSENTINEL_DASHBOARD_PASSWORD=sentinel\-eJAVA_OPTS="-Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8858 -Dproject.name=sentinel-dashboard"\--restart unless-stopped\--network xxx\bladex/sentinel-dashboard:1.8.8

5.2.2 compose

version:'3.8'services:sentinel:image:bladex/sentinel-dashboard:1.8.8container_name:sentinelports:-"8858:8858"# 控制台访问端口映射(宿主机:容器,与原命令一致)-"8719:8719"# 客户端与控制台通信端口(必须映射,与原命令一致)environment:SENTINEL_DASHBOARD_USERNAME:sentinelSENTINEL_DASHBOARD_PASSWORD:sentinelJAVA_OPTS:>--Dserver.port=8858-Dcsp.sentinel.dashboard.server=localhost:8858-Dproject.name=sentinel-dashboardnetworks:-xxxrestart:unless-stoppednetworks:xxx:driver:bridgename:xxx

6 Seata

6.1 挂载目录结构

/root/ ├── docker-compose.yml # docker-compose.yml 所在的根目录 └── Seata/ # Seata主目录 └── resources/ # 资源目录 ├── logback/ # Logback日志框架的配置目录,拆分不同输出端的日志配置,便于维护 │ ├── console-appender.xml # 控制台日志输出配置(定义日志格式、级别、输出到控制台的规则) │ ├── file-appender.xml # 文件日志输出配置(定义日志落地到文件的路径、滚动策略、大小限制等) │ ├── kafka-appender.xml # 日志输出配置(将日志发送到Kafka消息队列 用于日志收集 / 分析) │ └── logstash-appender.xml # 日志输出配置(对接ELK栈 将日志发送到Logstash进行聚合分析) ├── lua/ # 存放 Seata 依赖的 Lua 脚本(主要用于 Redis 分布式锁场景) │ └── redislocker/ # Redis 分布式锁专用目录 │ └── rredislock.lua # Redis 分布式锁的 Lua 脚本(保证锁的加锁 / 解锁操作原子性 避免并发问题) ├── META-INF/ # JAR包/应用的元数据目录 Seata在此存放Spring集成 原生镜像 SPI配置等 │ ├── native-image/ # GraalVM原生镜像配置目录 用于将 Seata 编译为原生可执行文件 提升启动速度 │ │ └── io.seata │ │ └── server # Seata Server 模块的原生镜像配置。 │ │ └── reflect-config.json # 原生镜像反射配置(指定需要反射的类,避免原生编译后反射失效)。 │ │ └── resource-config.json # 原生镜像资源配置(指定需要加载的资源文件,保证原生编译后资源可访问)。 │ ├── services/ # Seata SPI(服务发现)配置目录,定义接口的实现类(Seata 自动加载这些配置实现功能扩展)。 │ │ └── io.seata.core.rpc.RegisterCheckAuthHandler # 注册中心鉴权处理器配置(指定鉴权逻辑的实现类,控制服务注册的权限)。 │ │ └── io.seata.core.store.db.DataSourceProvider # 数据库数据源提供器配置(指定 Seata 存储事务日志的数据源实现,支持不同数据库)。 │ │ └── io.seata.core.store.DistributedLocker # 分布式锁实现类配置(指定分布式锁的实现,如 Redis / 数据库锁)。 │ │ └── io.seata.server.coordinator.AbstractCore # 事务协调器核心实现配置(Seata 事务协调的核心逻辑扩展点)。 │ │ └── io.seata.server.lock.LockManager # 锁管理器配置(指定全局锁的管理实现,控制事务锁的获取 / 释放)。 │ │ └── io.seata.server.session.SessionManager # 会话管理器配置(管理 Seata 事务会话,控制事务状态的存储 / 恢复)。 │ ├── spring.factories # Spring Boot 自动配置文件(Seata 集成 Spring 时,指定自动配置类,实现开箱即用)。 │ └── spring-configuration-metadata.json # Spring 配置元数据文件(给 IDE 提供配置提示,如 application.yml 中 Seata 配置的注解 / 说明)。 ├── application.example.yml # Seata 应用配置示例文件(包含默认配置模板,可复制为 application.yml 后修改,避免直接改示例)。 ├── application.yml # Seata 核心应用配置文件(全局配置,如服务端口、注册中心类型、事务存储模式、数据库连接等)。 ├── banner.txt # Seata 启动时打印到控制台的 Logo / 标语(可自定义修改)。 ├── logback-spring.xml # Logback 核心配置文件(整合 logback/ 目录下的细分配置,指定默认日志级别、根配置等)。 ├── README.md # Seata 英文说明文档(包含快速启动、核心功能、配置说明等)。 └── README-zh.md # Seata 中文说明文档(面向中文用户的使用 / 配置指南)。
  • tc.sql
DROPDATABASEIFEXISTS`seata`;CREATEDATABASEIFNOTEXISTS`seata`/*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci *//*!80016 DEFAULT ENCRYPTION='N' */;USE`seata`;-- -------------------------------- The script used when storeMode is 'db' ---------------------------------- the table to store GlobalSession dataCREATETABLEIFNOTEXISTS`global_table`(`xid`VARCHAR(128)NOTNULL,`transaction_id`BIGINT,`status`TINYINTNOTNULL,`application_id`VARCHAR(32),`transaction_service_group`VARCHAR(32),`transaction_name`VARCHAR(128),`timeout`INT,`begin_time`BIGINT,`application_data`VARCHAR(2000),`gmt_create`DATETIME,`gmt_modified`DATETIME,PRIMARYKEY(`xid`),KEY`idx_status_gmt_modified`(`status`,`gmt_modified`),KEY`idx_transaction_id`(`transaction_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;-- the table to store BranchSession dataCREATETABLEIFNOTEXISTS`branch_table`(`branch_id`BIGINTNOTNULL,`xid`VARCHAR(128)NOTNULL,`transaction_id`BIGINT,`resource_group_id`VARCHAR(32),`resource_id`VARCHAR(256),`branch_type`VARCHAR(8),`status`TINYINT,`client_id`VARCHAR(64),`application_data`VARCHAR(2000),`gmt_create`DATETIME(6),`gmt_modified`DATETIME(6),PRIMARYKEY(`branch_id`),KEY`idx_xid`(`xid`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;-- the table to store lock dataCREATETABLEIFNOTEXISTS`lock_table`(`row_key`VARCHAR(128)NOTNULL,`xid`VARCHAR(128),`transaction_id`BIGINT,`branch_id`BIGINTNOTNULL,`resource_id`VARCHAR(256),`table_name`VARCHAR(32),`pk`VARCHAR(36),`status`TINYINTNOTNULLDEFAULT'0'COMMENT'0:locked ,1:rollbacking',`gmt_create`DATETIME,`gmt_modified`DATETIME,PRIMARYKEY(`row_key`),KEY`idx_status`(`status`),KEY`idx_branch_id`(`branch_id`),KEY`idx_xid`(`xid`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;CREATETABLEIFNOTEXISTS`distributed_lock`(`lock_key`CHAR(20)NOTNULL,`lock_value`VARCHAR(20)NOTNULL,`expire`BIGINT,primarykey(`lock_key`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;INSERTINTO`distributed_lock`(lock_key,lock_value,expire)VALUES('AsyncCommitting',' ',0);INSERTINTO`distributed_lock`(lock_key,lock_value,expire)VALUES('RetryCommitting',' ',0);INSERTINTO`distributed_lock`(lock_key,lock_value,expire)VALUES('RetryRollbacking',' ',0);INSERTINTO`distributed_lock`(lock_key,lock_value,expire)VALUES('TxTimeoutCheck',' ',0);
  • at.sql
-- for AT mode you must to init this sql for you business database. the seata server not need it.CREATETABLEIFNOTEXISTS`undo_log`(`branch_id`BIGINTNOTNULLCOMMENT'branch transaction id',`xid`VARCHAR(128)NOTNULLCOMMENT'global transaction id',`context`VARCHAR(128)NOTNULLCOMMENT'undo_log context,such as serialization',`rollback_info`LONGBLOBNOTNULLCOMMENT'rollback info',`log_status`INT(11)NOTNULLCOMMENT'0:normal status,1:defense status',`log_created`DATETIME(6)NOTNULLCOMMENT'create datetime',`log_modified`DATETIME(6)NOTNULLCOMMENT'modify datetime',UNIQUEKEY`ux_undo_log`(`xid`,`branch_id`))ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8mb4COMMENT='AT transaction mode undo table';ALTERTABLE`undo_log`ADDINDEX`ix_log_created`(`log_created`);

6.2 创建容器

6.2.1 docker run

docker network create xxx
  • 这两行健康检查可加可不加,加上最好
    • –depends-on mysql:service_healthy \
    • –depends-on nacos:service_healthy \
docker run -d\--name seata\--privileged=true\--restart=unless-stopped\--network=xxx\--network-alias=seata-server\-p8099:8099\-p7099:7099\-eSEATA_IP=192.168.18.168\-eSEATA_CONFIG_NAME=file:/seata-server/config/application\-eSERVER_PORT=7099\-eSEATA_SERVICE_PORT=8099\-v ./Seata/resources:/seata-server/config\--depends-on mysql:service_healthy\--depends-on nacos:service_healthy\seataio/seata-server:1.7.1\/seata-server/bin/seata-server.sh

6.2.2 compose

version:'3.8'services:seata-server:container_name:seataimage:seataio/seata-server:1.7.1ports:-"8099:8099"-"7099:7099"environment:-SEATA_IP=192.168.18.168-SEATA_CONFIG_NAME=file:/seata-server/config/application-SERVER_PORT=7099-SEATA_SERVICE_PORT=8099volumes:-./Seata/resources:/seata-server/configprivileged:truedepends_on:mysql:condition:service_healthynacos:condition:service_healthynetworks:-xxxrestart:unless-stoppedcommand:["/seata-server/bin/seata-server.sh"]networks:xxx:driver:bridgename:xxx

6.2.3 拓展

基于nacos存储的配置如下

  • 在nacos中添加seataServer.properties,配置如下:
# 保留原有分组(兼容历史)+ 新增客户端用的hmall分组 service.vgroupMapping.my_test_tx_group=default service.vgroupMapping.hmall=default # 核心:grouplist指向Seata RPC端口8099(7099+1000) service.default.grouplist=192.168.18.168:8099 # 其余默认配置保留 client.rm.asyncCommitBufferLimit=10000 client.rm.lock.retryInterval=10 client.rm.lock.retryTimes=30 client.rm.lock.retryPolicyBranchRollbackOnConflict=true client.rm.reportRetryCount=5 client.rm.tableMetaCheckEnable=false client.rm.sqlParserType=druid client.rm.reportSuccessEnable=false client.tm.commitRetryCount=5 client.tm.rollbackRetryCount=5 server.undo.logSaveDays=7 server.undo.logDeletePeriod=86400000 serializer=jackson metrics.enabled=false metrics.registryType=compact metrics.exporterList=prometheus metrics.exporterPrometheusPort=9898

在微服务项目中的bootstrap中引入shared-seata.yaml,即可使用seata

  • 在nacos中添加shared-seata.yaml,配置如下:
seata:registry:type:nacosnacos:server-addr:192.168.18.168:8848namespace:""group:DEFAULT_GROUPapplication:seata-serverusername:nacospassword:nacostx-service-group:hmall# 事务组名称(和Seata Server侧一致)service:vgroup-mapping:hmall:"default"# 事务组映射TC集群(和Seata Server侧一致)# 新增:数据源代理配置(必须,否则无法拦截SQL)data-source-proxy-mode:AT# Seata默认AT模式# 新增:undo日志配置(AT模式必需)undo:log-table:undo_log# 业务库中需要创建此表only-care-update-columns:true# 仅记录更新的字段# 可选:客户端超时配置client:rm:lock:retry-times:30# 锁重试次数retry-interval:10# 锁重试间隔async-commit-buffer-limit:10000# 异步提交缓冲区大小tm:commit-retry-count:5# 提交重试次数rollback-retry-count:5# 回滚重试次数

以上我是使用的1.7.1版本,像使用1.5.2版本的话。都不用在nacos中添加seataServer.properties。直接添加shared-seata.yaml让项目就可以了(不引用的话就直接写在项目里的配置文件就行)

seata:registry:# TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址type:nacos# 注册中心类型 nacosnacos:server-addr:192.168.18.168:8848# nacos地址namespace:""# namespace,默认为空group:DEFAULT_GROUP# 分组,默认是DEFAULT_GROUPapplication:seata-server# seata服务名称username:nacospassword:nacostx-service-group:hmall# 事务组名称service:vgroup-mapping:# 事务组与tc集群的映射关系hmall:"default"

6.2.4 application.yml注释版

# 版权声明:Seata 官方开源协议声明(无需修改)# 遵循 Apache License 2.0 协议,具体权益可查阅 http://www.apache.org/licenses/LICENSE-2.0Copyright 1999-2019 Seata.io Group. Licensed under the Apache License,Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing,software distributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,either express or implied. See the License for the specific language governing permissions and limitations under the License.# ========================== Spring Boot 服务器基础配置 ==========================server:port:7091# Seata Server 的 HTTP 端口(默认 7091),用于接收管理请求、健康检查等# 注意:RPC 服务端口默认是该端口 + 1000(即 8091,可通过 seata.server.service-port 自定义)# ========================== Spring 应用基础配置 ==========================spring:application:name:seata-server# 应用名称,将作为 Seata Server 在注册中心的服务名(核心,注册发现依赖)# ========================== 日志配置 ==========================logging:config:classpath:logback-spring.xml# 日志配置文件路径(默认使用 Seata 内置的 logback 配置)file:path:${log.home:${user.home}/logs/seata}# 日志存储根路径:优先读取 log.home 环境变量,默认用户目录下的 logs/seataextend:# 扩展日志输出器(可选,用于日志收集)logstash-appender:# Logstash 日志输出器(需额外依赖 logstash 相关包)destination:127.0.0.1:4560# Logstash 服务地址(IP:端口)kafka-appender:# Kafka 日志输出器(需额外依赖 kafka 相关包)bootstrap-servers:127.0.0.1:9092# Kafka 集群地址topic:logback_to_logstash# 日志发送到的 Kafka 主题名# ========================== Seata 核心配置(重点)==========================seata:# -------------------------- 配置中心配置(Seata 自身配置的获取来源)--------------------------config:type:file# 配置中心类型:支持 file(本地文件)、nacos、consul、apollo、zk、etcd3# 开发环境用 file 便捷;生产环境推荐 nacos/apollo(支持动态配置更新)# 以下是各配置中心的具体参数(仅 type 对应时生效,其余不生效)nacos:# 当 type=nacos 时启用server-addr:127.0.0.1:8848# Nacos 服务地址namespace:# Nacos 命名空间(默认 public,需提前创建)group:SEATA_GROUP# 配置分组(默认 SEATA_GROUP,需与 Nacos 中配置一致)username:# Nacos 登录用户名(Nacos 开启认证时必填)password:# Nacos 登录密码(Nacos 开启认证时必填)context-path:# Nacos 上下文路径(默认空,Nacos 集群部署时可能需要配置,如 /nacos)# access-key: # MSE Nacos 专属:访问密钥(与 username/password 互斥,开启 MSE 认证时使用)# secret-key: # MSE Nacos 专属:密钥data-id:seataServer.properties# Nacos 中存储 Seata 配置的 DataID(配置文件名)consul:# 当 type=consul 时启用server-addr:127.0.0.1:8500# Consul 服务地址acl-token:# Consul ACL 令牌(Consul 开启 ACL 时必填)key:seata.properties# Consul 中存储配置的 Keyapollo:# 当 type=apollo 时启用appId:seata-server# Apollo 应用 IDapollo-meta:http://192.168.1.204:8801# Apollo Meta Server 地址apollo-config-service:http://192.168.1.204:8080# Apollo Config Service 地址namespace:application# 配置命名空间apollo-access-key-secret:# Apollo 访问密钥(开启认证时必填)cluster:seata# 集群名zk:# 当 type=zk 时启用server-addr:127.0.0.1:2181# ZooKeeper 服务地址(集群用逗号分隔)session-timeout:6000# 会话超时时间(ms)connect-timeout:2000# 连接超时时间(ms)username:# ZooKeeper 登录用户名(ZooKeeper 开启 SASL 认证时必填)password:# ZooKeeper 登录密码(ZooKeeper 开启 SASL 认证时必填)node-path:/seata/seata.properties# ZooKeeper 中存储配置的节点路径etcd3:# 当 type=etcd3 时启用server-addr:http://localhost:2379# etcd3 服务地址key:seata.properties# etcd3 中存储配置的 Key# -------------------------- 注册中心配置(Seata Server 注册到哪里,供客户端发现)--------------------------registry:type:file# 注册中心类型:支持 file(本地文件,仅单机可用)、nacos、eureka、redis、zk、consul、etcd3、sofa# 生产环境必须用 nacos/zk 等集群化注册中心(支持高可用)preferred-networks:30.240.*# 优先使用的网卡网段(多网卡环境下指定,避免客户端连接错误IP)# 以下是各注册中心的具体参数(仅 type 对应时生效)nacos:# 当 type=nacos 时启用application:seata-server# 注册到 Nacos 的服务名(需与客户端配置的服务名一致)server-addr:127.0.0.1:8848# Nacos 服务地址group:SEATA_GROUP# 服务分组(需与客户端配置一致)namespace:# Nacos 命名空间(需与配置中心一致)cluster:default# 集群名(默认 default,可自定义,如 seata-cluster)username:# Nacos 登录用户名(开启认证时必填)password:# Nacos 登录密码(开启认证时必填)context-path:# Nacos 上下文路径# access-key: # MSE Nacos 专属访问密钥# secret-key: # MSE Nacos 专属密钥eureka:# 当 type=eureka 时启用service-url:http://localhost:8761/eureka# Eureka 服务地址application:default# 注册到 Eureka 的应用名weight:1# 服务权重redis:# 当 type=redis 时启用server-addr:localhost:6379# Redis 服务地址db:0# Redis 数据库索引password:# Redis 密码(开启认证时必填)cluster:default# 集群名timeout:0# 连接超时时间(ms,0 表示无超时)zk:# 当 type=zk 时启用cluster:default# 集群名server-addr:127.0.0.1:2181# ZooKeeper 服务地址session-timeout:6000# 会话超时时间connect-timeout:2000# 连接超时时间username:# ZooKeeper 登录用户名(开启认证时必填)password:# ZooKeeper 登录密码(开启认证时必填)consul:# 当 type=consul 时启用cluster:default# 集群名server-addr:127.0.0.1:8500# Consul 服务地址acl-token:# Consul ACL 令牌(开启 ACL 时必填)etcd3:# 当 type=etcd3 时启用cluster:default# 集群名server-addr:http://localhost:2379# etcd3 服务地址sofa:# 当 type=sofa 时启用(蚂蚁金服 SOFA 注册中心)server-addr:127.0.0.1:9603# SOFA 服务地址application:default# 应用名region:DEFAULT_ZONE# 区域datacenter:DefaultDataCenter# 数据中心cluster:default# 集群名group:SEATA_GROUP# 分组address-wait-time:3000# 地址等待时间(ms)# -------------------------- Seata Server 核心运行参数 --------------------------server:service-port:8091# RPC 服务端口(客户端与 Server 通信的核心端口)# 默认值:${server.port} + 1000(即 7091+1000=8091),可自定义max-commit-retry-timeout:-1# 全局事务提交重试超时时间(ms):-1 表示无限重试(直到成功或事务过期)max-rollback-retry-timeout:-1# 全局事务回滚重试超时时间(ms):-1 表示无限重试rollback-retry-timeout-unlock-enable:false# 回滚重试超时后是否解锁资源(默认 false,避免误解锁)enable-check-auth:true# 是否启用权限校验(默认 true,客户端需携带 token 才能连接)enable-parallel-request-handle:true# 是否启用并行请求处理(默认 true,提升并发性能)retry-dead-threshold:130000# 重试死亡阈值(ms):超过该时间的事务不再重试xaer-nota-retry-timeout:60000# XA 模式下 NOTA(未准备好)状态的重试超时时间(ms)# 事务恢复相关配置(处理悬挂、超时事务)recovery:committing-retry-period:1000# 提交中事务的重试周期(ms)async-committing-retry-period:1000# 异步提交事务的重试周期(ms)rollbacking-retry-period:1000# 回滚中事务的重试周期(ms)timeout-retry-period:1000# 超时事务的重试周期(ms)# Undo 日志相关配置(用于 AT 模式的事务回滚)undo:log-save-days:7# Undo 日志保存天数(默认 7 天,过期自动删除)log-delete-period:86400000# Undo 日志删除周期(ms):默认 24 小时(86400000ms)# 会话相关配置(管理全局事务、分支事务会话)session:branch-async-queue-size:5000# 分支会话异步删除队列大小(默认 5000,控制异步删除并发)enable-branch-async-remove:false# 是否启用分支会话异步删除(默认 false,同步删除更安全;高并发场景可开启提升性能)# -------------------------- 存储配置(事务会话、锁、Undo 日志的存储方式)--------------------------store:mode:file# 存储模式:支持 file(本地文件,默认)、db(数据库)、redis(Redis)# 开发/测试用 file 便捷;生产环境推荐 db(稳定性高)或 redis(性能高)session:mode:file# 会话存储模式(默认与 store.mode 一致,可单独指定)lock:mode:file# 锁存储模式(默认与 store.mode 一致,可单独指定)# 本地文件存储配置(当 mode=file 时生效)file:dir:sessionStore# 存储目录(默认在 Seata 工作目录下的 sessionStore 文件夹)max-branch-session-size:16384# 最大分支会话数(默认 16384,超出后会清理过期会话)max-global-session-size:512# 最大全局会话数(默认 512)file-write-buffer-cache-size:16384# 文件写缓存大小(默认 16384 字节)session-reload-read-size:100# 重启时读取会话的批量大小(默认 100)flush-disk-mode:async# 刷盘模式:async(异步,性能高)、sync(同步,数据安全)# 数据库存储配置(当 mode=db 时生效,需提前创建数据库和表)db:datasource:druid# 数据源类型:支持 druid(默认)、hikaridb-type:mysql# 数据库类型:支持 mysql、oracle、postgresql 等driver-class-name:com.mysql.jdbc.Driver# 数据库驱动类名(MySQL 5.x 用该类;MySQL 8.x 需改为 com.mysql.cj.jdbc.Driver)url:jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true# 数据库连接地址(seata 为数据库名,需提前创建)user:mysql# 数据库用户名password:mysql# 数据库密码min-conn:10# 最小连接数(默认 10)max-conn:100# 最大连接数(默认 100)global-table:global_table# 全局事务表名(默认,需与数据库中表名一致)branch-table:branch_table# 分支事务表名(默认)lock-table:lock_table# 锁表名(默认)distributed-lock-table:distributed_lock# 分布式锁表名(默认,用于数据库存储的并发控制)query-limit:1000# 查询分页大小(默认 1000)max-wait:5000# 数据库连接最大等待时间(ms,默认 5000)# Redis 存储配置(当 mode=redis 时生效)redis:mode:single# Redis 模式:single(单机)、sentinel(哨兵)、cluster(集群)database:0# Redis 数据库索引(默认 0)min-conn:10# 最小连接数max-conn:100# 最大连接数password:# Redis 密码(开启认证时必填)max-total:100# 最大连接池大小(默认 100)query-limit:1000# 查询分页大小(默认 1000)single:# 单机模式配置host:127.0.0.1# Redis 主机地址port:6379# Redis 端口sentinel:# 哨兵模式配置(mode=sentinel 时生效)master-name:# 哨兵主节点名称sentinel-hosts:# 哨兵节点地址(逗号分隔,如 127.0.0.1:26379,127.0.0.1:26380)# -------------------------- 监控指标配置(Prometheus 监控)--------------------------metrics:enabled:false# 是否启用监控指标(默认 false,生产环境可开启)registry-type:compact# 指标注册类型:compact(默认,轻量级)、hierarchical(层级式)exporter-list:prometheus# 指标暴露方式:支持 prometheus(默认)、jmx 等exporter-prometheus-port:9898# Prometheus 暴露端口(默认 9898,客户端通过该端口拉取指标)# -------------------------- 传输层配置(Netty 通信相关)--------------------------transport:rpc-tc-request-timeout:15000# RPC 请求超时时间(ms,默认 15000,避免长时间阻塞)enable-tc-server-batch-send-response:false# TC 服务是否批量发送响应(默认 false,高并发场景可开启提升性能)shutdown:wait:3# 服务关闭时的等待时间(s,默认 3,确保未完成的请求正常处理)thread-factory:# Netty 线程池配置boss-thread-prefix:NettyBoss# Boss 线程名前缀(用于接收客户端连接)worker-thread-prefix:NettyServerNIOWorker# Worker 线程名前缀(用于处理 IO 读写)boss-thread-size:1# Boss 线程数(默认 1,无需修改,Netty 推荐配置)

7 RabbitMQ

7.1 挂载目录结构

/root/ ├── docker-compose.yml # docker-compose.yml 所在的根目录 └── RabbitMQ/ # RabbitMQ主配置目录 ├── config/ # 配置文件目录 │ ├── conf.d/ │ │ └── enabled_plugins │ └── enabled_plugins ├── data/ # 数据持久化目录(核心,存储队列、消息等数据) ├── logs/ # 日志目录(存储RabbitMQ运行日志) └── plugins # 自定义插件目录(可选,如需额外插件)
  • 常用配置文件模板
# 监听所有IP listeners.tcp.default = 5672 # 最大连接数 tcp_listen_options.backlog = 1024 # 日志级别 log.level = info # 开启镜像队列(高可用) queue_master_locator = min-masters # 内存阈值(超过则分页) vm_memory_high_watermark.relative = 0.7 # 磁盘阈值(低于10%时拒绝写入,避免磁盘满) disk_free_limit.relative = 0.1
配置项默认值是否必须自定义适用场景
listeners.tcp.default = 56725672(监听所有 IP)不需要默认已监听所有网卡的 5672 端口,除非你要修改端口 / 限制 IP
tcp_listen_options.backlog = 1024128(Linux)/ 2048(Windows)可选高并发场景(如每秒上千连接)需调大,普通场景默认值足够
log.level = infoinfo不需要默认就是 info 级别,除非你要调试(debug)或减少日志(warn/error)
queue_master_locator = min-mastersclient-local仅集群需要单节点部署无意义;集群场景需配置,优化队列主节点分布(提升高可用)
vm_memory_high_watermark.relative = 0.70.4(40%)建议配置默认阈值过低(仅用 40% 内存),生产环境可调至 60%-70%(充分利用服务器内存)
  • 以下场景必须自定义配置文件,否则无法满足需求:
    • 修改默认端口:如不想用 5672,需配置 listeners.tcp.default = 5673;
    • 限制访问 IP:如仅允许内网访问,配置 listeners.tcp.default = 192.168.1.100:5672;
    • 调整资源限制:如服务器内存 32G,需调大内存阈值(避免频繁分页导致性能下降);
    • 集群 / 高可用配置:如镜像队列、节点通信、权限控制;
    • SSL 加密连接:生产环境需配置 listeners.ssl.default = 5671 及证书路径;
    • 自定义日志策略:如日志输出到文件、按大小切割、指定日志存储路径。

7.2 创建容器

7.2.1 先复制默认配置到本地

  • 启动临时 RabbitMQ 容器(仅用于拷贝文件)
docker run -d --name rabbitmq rabbitmq:3.12.14-management
  • 步骤 1:拷贝容器内配置文件到宿主机 /root/RabbitMQ/config
# 宿主机(root)执行:创建 config 目录(确保目录存在,避免拷贝失败)mkdir-p /root/RabbitMQ/config# 宿主机执行:从容器拷贝配置文件到宿主机 /root/RabbitMQ/configdockercprabbitmq:/etc/rabbitmq/. /root/RabbitMQ/config/# 验证拷贝结果(关键!确认文件已到本地)ls-l /root/RabbitMQ/config/
  • 步骤 2:拷贝容器内插件文件到宿主机 /root/RabbitMQ/plugins
# 宿主机(root)执行:创建 plugins 目录mkdir-p /root/RabbitMQ/plugins# 宿主机执行:从容器拷贝所有插件到宿主机 /root/RabbitMQ/pluginsdockercprabbitmq:/opt/rabbitmq/plugins/. /root/RabbitMQ/plugins/# 验证拷贝结果(核心插件存在即成功)ls-l /root/RabbitMQ/plugins/|greprabbitmq_management
  • 步骤 3:验证拷贝完整性(必做)
# 1. 检查配置子目录(确保 10-defaults.conf 存在)ls-l /root/RabbitMQ/config/conf.d/# 必须看到:-rw-r--r-- 1 root root xxx Dec 10 xx:xx 10-defaults.conf# 2. 检查延迟队列插件(3.12 版本内置)ls-l /root/RabbitMQ/plugins/|grepdelayed_message# 预期输出:-rw-r--r-- 1 root root xxx Dec 10 xx:xx rabbitmq_delayed_message_exchange.ez
  • 步骤 4:清理临时容器(拷贝完成后删除)
# 宿主机执行:停止并删除临时容器docker stop rabbitmq&&dockerrmrabbitmq# 验证容器已删除dockerps-a|greprabbitmq# 无输出即成功

7.2.2 docker run

docker network create xxx
docker run -d\--name rabbitmq\-p5672:5672\# AMQP协议端口(业务连接)-p15672:15672\# 管理界面端口-p25672:25672\# 集群通信端口(可选)-eRABBITMQ_DEFAULT_USER=admin\# 默认用户名-eRABBITMQ_DEFAULT_PASS=123456\# 默认密码--hostname mq\-v ./RabbitMQ/config:/etc/rabbitmq\# 配置文件挂载-v ./RabbitMQ/data:/var/lib/rabbitmq\# 数据挂载-v ./RabbitMQ/logs:/var/log/rabbitmq\# 日志挂载-v ./RabbitMQ/plugins:/opt/rabbitmq/plugins\# 插件挂载--restart=unless-stopped\--network=xxx\rabbitmq:3.12.14-management# 带管理界面的镜像(必选,否则无15672端口)

7.2.3 compose

version:'3.8'services:rabbitmq:container_name:rabbitmqimage:rabbitmq:3.12.14-managementhostname:mqports:-"5672:5672"# AMQP协议端口(业务连接)-"15672:15672"# 管理界面端口-"25672:25672"# 集群通信端口(可选)environment:-RABBITMQ_DEFAULT_USER=admin-RABBITMQ_DEFAULT_PASS=123456volumes:-./RabbitMQ/config:/etc/rabbitmq-./RabbitMQ/data:/var/lib/rabbitmq-./RabbitMQ/logs:/var/log/rabbitmq-./RabbitMQ/plugins:/opt/rabbitmq/pluginsrestart:unless-stoppednetworks:-xxxnetworks:xxx:driver:bridgename:xxx
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!