docker-compose安装seata
·
整体结构:
seata-docker/
├── Dockerfile # Seata服务镜像构建
├── application.yml # Seata服务配置(注册nacos、db存储)
├── docker-compose.yml
└── sql/
└── seata_init.sql # TC全局事务表初始化SQL
1. 编写 Dockerfile(seata 服务镜像)
# 基础镜像 seata 1.6.1
FROM seataio/seata-server:1.6.1
# 复制自定义配置文件到容器配置目录
COPY application.yml /seata/conf/application.yml
# 暴露Seata默认端口
EXPOSE 8091
2. Seata 服务配置文件 application.yml
server:
port: 8091
seata:
# 注册中心 nacos
registry:
type: nacos
nacos:
server-addr: nacos:8848
namespace: public
group: SEATA_GROUP
application: seata-server
# 配置中心 nacos
config:
type: nacos
nacos:
server-addr: nacos:8848
namespace: public
group: SEATA_GROUP
# 存储模式 db(mysql)
store:
mode: db
db:
datasource: druid
db-type: mysql
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql:3306/seata_server?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
user: root
password: root123456
min-conn: 5
max-conn: 30
3. 初始化 SQL seata_init.sql
CREATE DATABASE IF NOT EXISTS seata_server DEFAULT CHARACTER SET utf8mb4;
USE seata_server;
-- 全局事务表
CREATE TABLE IF NOT EXISTS `global_table` (
`xid` varchar(128) NOT NULL COMMENT '全局事务ID',
`transaction_id` bigint DEFAULT NULL,
`status` tinyint NOT NULL COMMENT '事务状态',
`application_id` varchar(32) DEFAULT NULL,
`transaction_service_group` varchar(32) DEFAULT NULL,
`transaction_name` varchar(128) DEFAULT NULL,
`timeout` int DEFAULT NULL,
`begin_time` bigint DEFAULT NULL,
`commit_time` bigint DEFAULT NULL,
`rollback_time` bigint DEFAULT NULL,
PRIMARY KEY (`xid`),
KEY `idx_status` (`status`),
KEY `idx_transaction_service_group` (`transaction_service_group`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 分支事务表
CREATE TABLE IF NOT EXISTS `branch_table` (
`branch_id` bigint NOT NULL,
`xid` varchar(128) NOT NULL,
`transaction_id` bigint DEFAULT NULL,
`resource_group_id` varchar(32) DEFAULT NULL,
`resource_id` varchar(256) DEFAULT NULL,
`branch_type` varchar(8) DEFAULT NULL,
`status` tinyint DEFAULT NULL,
`client_id` varchar(64) DEFAULT NULL,
`application_data` varchar(2000) DEFAULT NULL,
`create_time` bigint DEFAULT NULL,
`update_time` bigint DEFAULT NULL,
PRIMARY KEY (`branch_id`),
KEY `idx_xid` (`xid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 锁表
CREATE TABLE IF NOT EXISTS `lock_table` (
`row_key` varchar(128) NOT NULL,
`xid` varchar(96) DEFAULT NULL,
`transaction_id` bigint DEFAULT NULL,
`branch_id` bigint NOT NULL,
`resource_id` varchar(256) DEFAULT NULL,
`table_name` varchar(32) DEFAULT NULL,
`pk` varchar(36) DEFAULT NULL,
`gmt_create` datetime DEFAULT NULL,
`gmt_modified` datetime DEFAULT NULL,
PRIMARY KEY (`row_key`),
KEY `idx_xid` (`xid`),
KEY `idx_branch_id` (`branch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
4. docker-compose.yml(整合 mysql + nacos + seata)
version: '3.8'
services:
# Mysql 存储seata事务表
mysql:
image: mysql:8.0
container_name: seata-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root123456
volumes:
- ./sql/seata_init.sql:/docker-entrypoint-initdb.d/seata_init.sql
- mysql-data:/var/lib/mysql
ports:
- "3306:3306"
networks:
seata-net:
aliases:
- mysql
# Nacos 注册配置中心
nacos:
image: nacos/nacos-server:2.2.3
container_name: seata-nacos
restart: always
environment:
MODE: standalone
ports:
- "8848:8848"
- "9848:9848"
volumes:
- nacos-data:/home/nacos/data
networks:
seata-net:
aliases:
- nacos
# Seata TC 协调服务(基于本地Dockerfile构建)
seata-server:
build:
context: ./
dockerfile: Dockerfile
container_name: seata-server
restart: always
ports:
- "8091:8091"
depends_on:
- mysql
- nacos
networks:
seata-net:
aliases:
- seata-server
volumes:
mysql-data:
nacos-data:
networks:
seata-net:
driver: bridge
5. 启动与验证步骤
5.1 目录结构确认
seata-docker/
├── Dockerfile
├── application.yml
├── docker-compose.yml
└── sql/
└── seata_init.sql
5.2 一键启动
# 后台启动
docker-compose up -d
# 查看日志(观察seata是否成功注册nacos、连接mysql)
docker-compose logs -f seata-server
5.3 验证成功标志
- 打开 Nacos 控制台
http://localhost:8848/nacos,服务列表出现seata-server; - MySQL 数据库自动创建
seata_server库,包含 global_table /branch_table/lock_table; - seata 日志无报错,正常监听 8091 端口。
6. 微服务客户端配置(SpringCloud Alibaba)
业务项目 application.yml 连接容器内 Seata
spring:
cloud:
alibaba:
seata:
tx-service-group: my_tx_group
seata:
registry:
type: nacos
nacos:
server-addr: 127.0.0.1:8848
config:
type: nacos
nacos:
server-addr: 127.0.0.1:8848
7. 常用操作命令
# 停止服务
docker-compose down
# 停止并清空数据卷(重置所有数据)
docker-compose down -v
# 重新构建seata镜像并启动
docker-compose up -d --build
补充说明
- 版本可替换:
seataio/seata-server:1.7.1、nacos 2.3.2; - 密码、端口、nacos namespace、mysql 库名可自行修改;
- 业务库必须手动执行
undo_log建表语句(仅 TC 库由 docker 自动初始化); - 容器内部服务互通使用服务名
nacos/mysql,宿主机客户端使用127.0.0.1。
更多推荐
所有评论(0)