docker中安装seata,以nacos为配置中心

本文详细介绍了如何在Docker环境下,通过nacos作为配置中心,拉取和管理seata的镜像,创建数据库,配置seata服务,以及在nacos中设置相关配置。步骤包括查看镜像、删除旧镜像、拉取新版本或指定版本,以及配置seata服务器和客户端连接信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、环境

docker23.0.3
nacos2.2.1

二、拉取seata镜像

1、查看seata有哪些镜像

使用如下命令查看seata有哪些镜像:

docker search seata

在这里插入图片描述

可以看到有很多seata镜像,一般选择stars最高的那个,就是seataio/seata-server。

2、查看原来有没有seata镜像

使用如下命令查看本地镜像:

docker images

在这里插入图片描述

可以看到我这里是有一份seata镜像的,使用如下命令删除:

docker rmi -f "IMAGE ID"

这是我的

docker rmi -f 67a654ca2e05

在这里插入图片描述

3、拉取最新版本

拉取最新版本的镜像直接使用如下命令:

docker pull seataio/seata-server

在这里插入图片描述

拉取的过程需要点时间,耐心等待即可。

结束后可以看看拉取的结果,命令如下:

docker images

在这里插入图片描述

4、拉取指定版本

假如我想要拉取 1.6.1 版本的seata,可以使用如下命令:

docker pull seataio/seata-server:1.6.1

在这里插入图片描述

同样,查看一下拉取成功没有:

docker images

在这里插入图片描述

拉取成功,后面就用 1.6.1 版本的镜像。

三、配置seata

1、创建seata相关的数据库

数据库脚本地址:

https://github.com/apache/incubator-seata/tree/master/script/server/db

在这里插入图片描述

用的是哪个数据库就选择哪个数据库的脚本,我这里用的mysql的。

创建一个数据库,执行脚本即可,我的数据库名为 cj-seata 。

在这里插入图片描述

2、创建seata配置文件目录

我目录为 /www/wwwroot/changjing/docker/seata ,命令如下:

mkdir -p /www/wwwroot/changjing/docker/seata

在这里插入图片描述

3、启动seata容器

这里只是简单启动,为了获得seata容器最初的配置文件,后面经过修改后从宿主机挂载到容器,命令如下:

docker run -d --name seata -p 7091:7091 seataio/seata-server:1.6.1

在这里插入图片描述

4、复制seata容器下的配置文件到宿主机

复制配置文件的命令如下:

docker cp seata:/seata-server/resources /www/wwwroot/changjing/docker/seata

在这里插入图片描述

到宿主机的配置文件目录看一下

在这里插入图片描述

可以看到配置文件已经拿下来了,主要修改的就是这个配置文件。

为了防止操作失误,可以先备份一份,命令如下:

cp application.yml application_bk.yml

在这里插入图片描述

5、配置yml文件

修改的是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: ${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:
    # support: nacos, consul, apollo, zk, etcd3
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848   # nacos的访问地址,因为是在docker中,ip地址改为宿主机地址
      namespace:
      group: SEATA_GROUP  # nacos的分组
      username: nacos     # nacos的用户名
      password: nacos     # nacos的密码
      context-path:
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key:
      #secret-key:
      data-id: seata.properties  # nacos中的配置文件名称
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    type: nacos
    nacos:
      application: seata-server       # seata启动后在nacos的服务名
      server-addr: 127.0.0.1:8848  # nacos的访问地址,因为是在docker中,ip地址改为宿主机地址
      group: SEATA_GROUP   # nacos的分组
      namespace:
      cluster: default     # 这个歌参数在每个微服务seata时会用到
      username: nacos      # nacos的用户名
      password: nacos      # nacos的密码
      context-path:
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key:
      #secret-key:
  store:    
    # support: file 、 db 、 redis
    mode: db
    db:
      datasource: druid
      db-type: mysql
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/cj-seata?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false
      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,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

6、在nacos中增加seata配置

在这里插入图片描述

完整内容如下:

service.vgroupMapping.ruoyi-system-group=default   # 这个在微服务版的若依中使用seata的服务中会用到
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/cj-seata?useUnicode=true
store.db.user=root
store.db.password=123456
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

7、重启seata

前面为了拿到配置文件,简单启动了一下seata容器,需要把前面那个停止并删除。

在这里插入图片描述

停止seata命令如下:

docker stop "容器ID或者容器名称"

这是我的:

docker stop seata

在这里插入图片描述

删除命令如下:

docker rm -f "容器ID或者容器名称"

这是我的:

docker rm -f seata

在这里插入图片描述

启动命令如下:

docker run -d --name seata \
-p 8091:8091 \
-p 7091:7091 \
-e SEATA_IP=127.0.0.1 \
-v /www/wwwroot/changjing/docker/seata/resources:/seata-server/resources \
seataio/seata-server:1.6.1

解释:

docker run -d --name seata \                                                       -d 表示运行在后台,--name 指定名称为seata
-p 8091:8091 \                                                                     这是后面需要注册到nacos的seata服务端口号
-p 7091:7091 \                                                                     这是seata的客户端端口号
-e SEATA_IP=127.0.0.1 \                                                            这是seata注册到nacos中的 IP ,可以解决Java程序连不上seata客户端的问题,默认为运行docker容器的内网地址
-v /www/wwwroot/changjing/docker/seata/resources:/seata-server/resources \         seata 配置文件目录,“:”前为服务器目录,“:”后为seata容器中的目录
seataio/seata-server:1.6.1                                                         指定 docker seata 版本,这里是1.6.1版本

在这里插入图片描述

然后就可以在项目中使用seata了。

### 使用 Docker 安装 Seata 分布式事务中间件 #### 单节点安装 可以通过 `docker run` 命令快速启动单节点的 Seata Server。以下是具体的命令: ```bash docker run --name seata-server -p 8091:8091 -d \ -e SEATA_IP=192.168.200.200 \ -e SEATA_PORT=8091 \ --restart=on-failure \ seataio/seata-server:1.3.0 ``` 上述命令中: - `-p 8091:8091` 将容器内的 8091 端口映射到主机的 8091 端口。 - `-e SEATA_IP=192.168.200.200` 设置 Seata Server 的 IP 地址。 - `-e SEATA_PORT=8091` 设置 Seata Server 的端口号。 - `--restart=on-failure` 表示当容器失败时自动重启。 此方法适用于测试环境,但在生产环境中不推荐使用单节点部署[^2]。 --- #### 高可用集群安装 为了提高系统的高可用性和性能,在生产环境中通常采用多节点集群的方式部署 Seata Server。具体步骤如下: ##### 准备工作 1. **选择会话共享模式** 默认情况下,Seata Server 使用文件存储 (`file`) 来保存会话数据。然而,这种模式不适合集群场景。可以选择 Redis 或数据库来实现会话共享。这里以 Redis 为例说明配置过程[^3]。 2. **修改配置文件** 编辑 Seata Server 的 `file.conf` 文件,将存储模式改为 Redis 并设置相关参数: ```properties store { mode = "redis" redis { host = "192.168.211.145" port = "6379" password = "" database = "0" minConn = 1 maxConn = 10 queryLimit = 100 } } ``` 如果选择数据库作为存储方式,则需要执行官方提供的 SQL 脚本来初始化数据库表结构。SQL 脚本位于 `\seata-server-1.6.0\seata\script\server\db` 目录下[^4]。 ##### 启动多个 Seata Server 实例 可以运行两个或更多 Seata Server 容器实例,并确保它们连接到同一个 Redis 数据库或其他共享存储介质上。例如: ```bash docker run --name seata-server-1 -p 8091:8091 -d \ -e SEATA_IP=192.168.200.201 \ -e SEATA_PORT=8091 \ -e STORE_MODE="redis" \ -e REDIS_HOST="192.168.211.145" \ -e REDIS_PORT="6379" \ --restart=on-failure \ seataio/seata-server:1.3.0 docker run --name seata-server-2 -p 8092:8091 -d \ -e SEATA_IP=192.168.200.202 \ -e SEATA_PORT=8091 \ -e STORE_MODE="redis" \ -e REDIS_HOST="192.168.211.145" \ -e REDIS_PORT="6379" \ --restart=on-failure \ seataio/seata-server:1.3.0 ``` 注意:每个容器的宿主机端口应不同(如第一个绑定 8091,第二个绑定 8092),但内部服务监听端口保持一致(默认为 8091)。这样客户端可以根据负载均衡策略访问任意一个 Seata Server 实例。 --- #### 关键组件介绍 Seata 是分布式事务解决方案的核心框架,其主要由以下三个部分组成: 1. **TC (Transaction Coordinator)** - 事务协调者,负责维护全局和分支事务的状态,驱动全局事务提交或回滚。 2. **TM (Transaction Manager)** - 事务管理器,定义全局事务的范围,控制全局事务的生命周期。 3. **RM (Resource Manager)** - 资源管理器,管理和注册分支事务,与 TC 进行通信以完成事务状态同步[^5]。 了解这些核心概念有助于更好地设计和调试基于 Seata 的分布式系统架构。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值