如何在docker中安装seata

 更新时间:2025年11月25日 09:47:56   作者:亦安✘  
文章介绍了如何在Docker中安装Seata,包括下载镜像、运行容器、配置数据库、修改配置文件、启动Seata以及在微服务项目中使用Seata的步骤,感兴趣的朋友跟随小编一起看看吧

在docker中安装seata

1. 下载镜像

#不加 :2.0.0下载的是最新版本的seata
docker pull seataio/seata-server:2.0.0

查看镜像

docker images

2. 运行容器

运行seata-server,将配置拷贝到宿主机中,删除之前配置并通过宿主机运行容器

#运行容器
docker run --name seata -p 8091:8091 -d  seataio/seata-server:2.0.0

#将容器中的配置拷贝到/data/seata
docker cp seata:/seata-server /data
#删除
docker rm -f seata

3.新建数据库

建库

CREATE DATABASE seata;
USE seata;

在上一步的seata库里建表

-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
    `xid`                       VARCHAR(128) NOT NULL,
    `transaction_id`            BIGINT,
    `status`                    TINYINT      NOT NULL,
    `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,
    PRIMARY KEY (`xid`),
    KEY `idx_status_gmt_modified` (`status` , `gmt_modified`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;
-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
    `branch_id`         BIGINT       NOT NULL,
    `xid`               VARCHAR(128) NOT NULL,
    `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),
    PRIMARY KEY (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;
-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
    `row_key`        VARCHAR(128) NOT NULL,
    `xid`            VARCHAR(128),
    `transaction_id` BIGINT,
    `branch_id`      BIGINT       NOT NULL,
    `resource_id`    VARCHAR(256),
    `table_name`     VARCHAR(32),
    `pk`             VARCHAR(36),
    `status`         TINYINT      NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_status` (`status`),
    KEY `idx_branch_id` (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;
CREATE TABLE IF NOT EXISTS `distributed_lock`
(
    `lock_key`       CHAR(20) NOT NULL,
    `lock_value`     VARCHAR(20) NOT NULL,
    `expire`         BIGINT,
    primary key (`lock_key`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);

4.修改配置文件

找到宿主机上的/data/seata-server/resources 里的application.yml文件

打开后主要修改这几个

下面是我修改后的

#  Copyright 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.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.
server:
  port: 7091
spring:
  application:
    name: seata-server
logging:
  config: classpath:logback-spring.xml
  file:
    path: ${log.home:${user.home}/logs/seata}
  extend:
    logstash-appender:
      destination: 127.0.0.1:4560
    kafka-appender:
      bootstrap-servers: 127.0.0.1:9092
      topic: logback_to_logstash
console:
  user:
    username: seata
    password: seata
seata:
  config:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      namespace:
      group: SEATA_GROUP #后续自己在nacos里面新建,不想新建SEATA_GROUP,就写DEFAULT_GROUP
      username: nacos
      password: nacos
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP #后续自己在nacos里面新建,不想新建SEATA_GROUP,就写DEFAULT_GROUP
      namespace:
      cluster: default
      username: nacos
      password: nacos    
  store:
    mode: db
    db:
      datasource: druid
      db-type: mysql
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/seata?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
      user: root
      password: 123456
      min-conn: 10
      max-conn: 100
      global-table: global_table
      branch-table: branch_table
      lock-table: lock_table
      distributed-lock-table: distributed_lock
      query-limit: 1000
      max-wait: 5000
  #  server:
  #    service-port: 8091 #If not configured, the default is '${server.port} + 1000'
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login,/metadata/v1/**

5.启动

docker run -d --restart=always  --name  seata -p 8091:8091 -p 7091:7091 -v /data/seata-server:/seata-server  seataio/seata-server:2.0.0

PS: 8091是注册进nacos的默认端口, 7091是访问客户端的端口

6. 验证

http://localhost:7091/#/login

初始密码是配置文件中的

7.在微服务项目中使用 (每个用到seata的项目都要添加)

首先要配置pom

 <!-- Alibaba Seata 配置 -->
 <dependency>
     <groupId>io.seata</groupId>
     <artifactId>seata-spring-boot-starter</artifactId>
     <version>2.0.0</version>
 </dependency>

在application.yml中添加seata的配置

# ========================seata===================
seata:
  tx-service-group: default_tx_group
  service:
    vgroup-mapping:
      default_tx_group: default #要和seata配置中的registry.nacos.cluster一致
    grouplist:
      default: 127.0.0.1:8091
  registry:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      namespace: 
      group: SEATA_GROUP
      application: seata-server
      username: nacos
      password: nacos
  data-source-proxy-mode: AT
logging:
  level:
    io:
      seata: info

在用到的库中添加undo_log日志回滚表 (AT模式专用,其他模式不需要)

-- for AT mode you must to init this sql for you business database. the seata server not need it.
CREATE TABLE IF NOT EXISTS `undo_log`
(
    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',
    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',
    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',
    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT ='AT transaction mode undo table';
ALTER TABLE `undo_log` ADD INDEX `ix_log_created` (`log_created`);

到此这篇关于在docker中安装seata的文章就介绍到这了,更多相关docker安装seata内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何修改docker容器中MySQL的用户密码

    如何修改docker容器中MySQL的用户密码

    本文主要介绍了如何修改docker容器中MySQL的用户密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Docker使用阿里加速器安装centos教程

    Docker使用阿里加速器安装centos教程

    这篇文章主要介绍了Docker使用阿里加速器安装centos教程,需要的朋友可以参考下
    2017-04-04
  • 理解Docker(2):Docker 镜像详细介绍

    理解Docker(2):Docker 镜像详细介绍

    这篇文章主要介绍了理解Docker(2):Docker 镜像详细介绍, 镜像(image)是动态的容器的静态表,有需要的可以了解下。
    2016-11-11
  • 关于Dockerfile镜像制作完整实例

    关于Dockerfile镜像制作完整实例

    本文详细介绍了如何使用Docker制作镜像,并通过实际应用发版展示了制作过程,主要内容包括创建和启动Docker容器的脚本(init.sh、start.sh、stop.sh、restart.sh),以及配置目录,文章还讨论了Docker容器IP地址的作用,并总结了制作新镜像的基本步骤
    2024-11-11
  • docker官方镜像下载及使用Dockerfile创建镜像的方法

    docker官方镜像下载及使用Dockerfile创建镜像的方法

    这篇文章主要介绍了docker官方镜像下载及使用Dockerfile创建镜像的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • 使用Docker快速部署Gitlab的方法

    使用Docker快速部署Gitlab的方法

    这篇文章主要介绍了使用Docker快速部署Gitlab的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • docker部署项目/var/lib/docker/overlay2目录满了该如何清理

    docker部署项目/var/lib/docker/overlay2目录满了该如何清理

    Docker中的/var/lib/docker/overlay2目录是用于存储Docker容器的数据层和镜像层的,使用Docker一段时间后这个目录可能会变得非常大,这篇文章主要给大家介绍了关于docker部署项目/var/lib/docker/overlay2目录满了该如何清理的相关资料,需要的朋友可以参考下
    2024-04-04
  • Docker 修改docker存储位置 修改容器镜像大小限制操作

    Docker 修改docker存储位置 修改容器镜像大小限制操作

    这篇文章主要介绍了Docker 修改docker存储位置 修改容器镜像大小限制操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Linux下Docker安装和使用教程

    Linux下Docker安装和使用教程

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。这篇文章主要介绍了Linux下Docker安装和使用教程的相关资料,需要的朋友可以参考下
    2016-10-10
  • Docker容器实战之镜像仓库

    Docker容器实战之镜像仓库

    这篇文章主要介绍了Docker容器实战之镜像仓库,文章通过Docker Hub为例,讲解关于镜像仓库的使用,需要的小伙伴可以参考一下
    2022-05-05

最新评论