seata是阿里巴巴的一款开源的分布式事务框架,官方已经支持docker了,但是因为业务的需要,需要自己定制。

制作docker镜像

官方的Dockerfile下载seata-server-1.1.0

导入seata需要的sql脚本到mysql,创建seata数据库

-- 每个业务库中都要创建undo_log表
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- -------------------------------- 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(64),
`transaction_name` VARCHAR(128),
`timeout` INT,
`begin_time` BIGINT,
`application_data` VARCHAR(2000),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`xid`),
KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8; -- 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 = utf8; -- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
`row_key` VARCHAR(128) NOT NULL,
`xid` VARCHAR(96),
`transaction_id` BIGINT,
`branch_id` BIGINT NOT NULL,
`resource_id` VARCHAR(256),
`table_name` VARCHAR(32),
`pk` VARCHAR(36),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`row_key`),
KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;

因为运行的脚本seata-server.sh中一些虚拟机参数是写死的,而且给的很大,需要修改脚本,通过环境变量来获得参数值:

准备工作:

# 解压缩 seata-server-1.1.0.zip
[root@VM_0_16_centos seata]# tree seata
seata
|-- bin
| |-- seata-server.bat
| `-- seata-server.sh
|-- conf
| |-- file.conf
| |-- file.conf.example
| |-- logback.xml
| |-- META-INF
| | `-- services
| | |-- io.seata.core.lock.Locker
| | |-- io.seata.core.store.db.DataSourceGenerator
| | |-- io.seata.server.coordinator.AbstractCore
| | |-- io.seata.server.session.SessionManager
| | `-- io.seata.server.store.TransactionStoreManager
| |-- README.md
| |-- README-zh.md
| `-- registry.conf
|-- lib
| |-- animal-sniffer-annotations-1.17.jar
。。。

vim seata-server.sh

#====================   修改前
exec "$JAVACMD" $JAVA_OPTS -server -Xmx2048m -Xms2048m -Xmn1024m -Xss512k -XX:SurvivorRatio=10 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=1024m -XX:-OmitStackTraceInFastThrow -XX:-UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="$BASEDIR"/logs/java_heapdump.hprof -XX:+DisableExplicitGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -Xloggc:"$BASEDIR"/logs/seata_gc.log -verbose:gc -Dio.netty.leakDetectionLevel=advanced \
-classpath "$CLASSPATH" \
-Dapp.name="seata-server" \
-Dapp.pid="$$" \
-Dapp.repo="$REPO" \
-Dapp.home="$BASEDIR" \
-Dbasedir="$BASEDIR" \
io.seata.server.Server \
"$@"
#==================== 修改后
# -Xmx${JVM_XMX:-2048m} 表示当JVM_XMX为null或者空字符串的时候赋值2048m
exec "$JAVACMD" $JAVA_OPTS -server -Xmx${JVM_XMX:-2048m} -Xms${JVM_XMS:-2048m} -Xmn${JVM_XMN:-1024m} -Xss${JVM_XSS:-512k} -XX:SurvivorRatio=10 -XX:MetaspaceSize=${JVM_MS:-128m} -XX:MaxMetaspaceSize=${JVM_MMS:-256m} -XX:MaxDirectMemorySize=${JVM_MDMS:-1024m} -XX:-OmitStackTraceInFastThrow -XX:-UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="$BASEDIR"/logs/java_heapdump.hprof -XX:+DisableExplicitGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -Xloggc:"$BASEDIR"/logs/seata_gc.log -verbose:gc -Dio.netty.leakDetectionLevel=advanced \
-classpath "$CLASSPATH" \
-Dapp.name="seata-server" \
-Dapp.pid="$$" \
-Dapp.repo="$REPO" \
-Dapp.home="$BASEDIR" \
-Dbasedir="$BASEDIR" \
io.seata.server.Server \
"$@"

vim Dockerfile

FROM centos:7
MAINTAINER pader "bartggg@163.com" RUN set -x \
&& ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo '$TIME_ZONE' > /etc/timezone
# 允许挂载该目录
VOLUME /opt/seata/conf
VOLUME /opt/seata/logs # 添加jdk
ADD jdk-8u144-linux-x64.tar.gz /opt
ADD seata /opt/seata # set environment
ENV SEATA_USER="seata" \
BASE_DIR=/opt/seata \
JAVA_HOME="/opt/jdk1.8.0_144" \
JAVA="/opt/jdk1.8.0_144/bin/java" \
TIME_ZONE="Asia/Shanghai" \
SERVER_PORT="8091" \
CLUSTER_NUM=1
# 设置额外参数
ENV JVM_XMX=1024m \
JVM_XMS=1024m \
JVM_XMN=512m \
JVM_XSS=256K \
JVM_MS=64m \
JVM_MMS=128m \
JVM_MDMS=512m WORKDIR $BASE_DIR
EXPOSE 9411
ENTRYPOINT ["sh", "-c", "/opt/seata/bin/seata-server.sh"]

构建镜像:

docker build -t bart/seata:1.1.0 .

运行:

# 如果需要使用自己的配置文件的话
mkdir -p /home/seata/conf
mkdir -p /home/seata/logs # 将默认配置文件放到conf中
# file.conf 、 registry.conf 参考官网配置
# https://seata.io/zh-cn/blog/seata-quick-start.html# # 默认启动
docker run -d \
--name seata01 \
--restart always \
-p 19411:9411 \
bart/seata:1.1.0

制作seata docker镜像的更多相关文章

  1. 制作 leanote docker 镜像 并运行

    # 1.制作基础镜像 leanote 使用 mongodb 存储数据,如果把 mongodb 单独做成一个镜像,初始化数据时比较麻烦,所以最后还是决定把 mongodb 和 leanote 放到同一个 ...

  2. 制作一个docker镜像:mysql-8-x64-linux

    因为个人学习需要,为软件系统的虚拟容器化,以下将mysql制作为docker镜像,并记录下详细步骤. 欢迎大家学习交流和转载,同时写作不易,如果各位觉得不错,请点赞支持. 备注:以下代码和文章,欢迎复 ...

  3. 制作zipkin docker镜像

    这里使用的zipkin知识基于内存的版本,没有接入外部存储 https://zipkin.io/ https://github.com/openzipkin/zipkin https://github ...

  4. 制作sentinel docker镜像

    在sentinel官方下载jar包即可运行,但是在部署的时候一个一个的启动jar包很不方便,制作成镜像方便部署和管理. 1)直接运行 # 修改端口号,默认是8080 java -jar sentine ...

  5. 制作 leanote docker 镜像

    leanote 使用 mongodb 存储数据,如果把 mongodb 单独做成一个镜像,初始化数据时比较麻烦,所以最后还是决定把 mongodb 和 leanote 放到同一个镜像里边. docke ...

  6. 【玩转开源】制作Docker镜像

    做嵌入式方向经常会遇到的一个问题,就是编译环境安装,如果换电脑,再重新安装环境是一个比较费时的事情,这个时候可以自己制作一个Docker镜像,然后把编译环境在Docker镜像里面配置好,以后同步环境就 ...

  7. docker制作jdk+tomcat镜像

    docker部署TOMCAT项目 一.内核升级 [root@test01 ~]# uname -r   #内核查看确认 2.6.32-696.16.1.el6.x86_64 [root@test01 ...

  8. DOCKER学习_011:使用Dockerfile制作docker镜像

    前面使用commit的方式,制作一个docker镜像,本次介绍使用Dockerfile制作一个dockers镜像 [root@docker-server3 ~]# mkdir /openssh [ro ...

  9. Docker容器打包成镜像 - OpenDaylight官方 SDN Hub Tutorial VM 的docker镜像

    由于工作需要,在看OpenDaylight (一个SDN的开源控制器) 官方Tutorial有一个比较基础且介绍比较详细的文档(http://sdnhub.org/tutorials/opendayl ...

随机推荐

  1. ql的python学习之路-day1

    写在前面的话:万事开头难,算是系统学习python的一个月了吧,总该写点什么来记录一下,之前看老男孩day1的视频没有开通博客,这次给补上,对于学python还是要好好努力,不能半途而废,还是那句老话 ...

  2. Zabbix-部署

    目录 一. apt安装 Zabbix 部署结构图和主机环境 1.1 Zabbix-server 安装配置 1.1.1 安装zabbix仓库 1.1.2 安装Zabbix server.web前端.ag ...

  3. Template模式C++实现

    #include <iostream> using namespace std; class AbstractClass { public: void TemplateMethod() { ...

  4. 数据分析之Numpy、Matplotlib库

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 菜鸟教程:https://www.run ...

  5. Centos7访问Win7/Win10系统中的共享文件

    服务器挂在U盘: 1.先将U盘格式化为Fat格式或其他服务器能识别的格式. 2.使用fdisk -l,找到自己的U盘(根据盘大小) 3.新建一个文件夹(mkdir /mnt/usb)用于挂在数据 4. ...

  6. ThreadLocal必知必会

    前言 自从被各大互联网公司的"造火箭"级面试难度吊打之后,痛定思痛,遂收拾心神,从基础的知识点开始展开地毯式学习.每一个非天才程序猿都有一个对35岁的恐惧,而消除恐惧最好的方式就是 ...

  7. PAT-1132 Cut Integer (整数分割)

    Cutting an integer means to cut a K digits long integer Z into two integers of (K/2) digits long int ...

  8. poj3687拓扑排序

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14749   Accepted: 4325 D ...

  9. Redis学习笔记(十五)Sentinel(哨兵)(中)

    上一篇 我们模拟了单机器下哨兵模式的搭建,那么接下来我们看下哨兵模式的实现与工作. 为什么又分成两篇呢?因为篇幅太长(偷懒),再一个这篇主要说的是Sentinel的初始化以及信息交换,下一篇着重说下状 ...

  10. vue-cli中的index.html ,main.js , App.vue的关系

    ###发现不少小伙伴才刚开始接触到这个结构都被绕的迷糊,而发现很多人说的也不是那么准确,那么下面我来说一下是怎么回事### 1.首先我们来看看原生Vue中组件的写法, 我们按照vue-cli的结构按照 ...