zoukankan      html  css  js  c++  java
  • 制作seata docker镜像

    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 
    
    
  • 相关阅读:
    程序怎么才能把自己的删除掉?
    Winsock编程入门1.初始化Winsock
    关于83版射雕英雄传
    一个感人的爱情故事(中英对照)
    NT系统的命令
    Delphi小巧的Windows NT服务程序源码
    更改Windows 登录屏幕保护程序
    画鬼最易
    濮水垂钓
    现代工作观
  • 原文地址:https://www.cnblogs.com/bartggg/p/12982063.html
Copyright © 2011-2022 走看看