赞
踩
本文档为在Centos 7.9下安装Docker及常用镜像的指导文件。
操作系统版本为centos 7.9,内核版本需要在3.10以上,需要保障能够连通互联网,为了避免安装过程中出现网络异常建议关闭linux的防火墙(生产环境下不要关闭防火墙,可根据实际情况设置防火墙出入站规则)。
#查看内核版本
sudo uname -r
#查看系统版本
sudo cat /etc/redhat-release
#关闭防火墙
sudo systemctl stop firewalld
#禁用防火墙开机自启
sudo systemctl disable firewalld
#卸载Docker相关依赖
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
#安装工具包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#设置yum仓库
sudo yum-config-manager
--add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#通过yum安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io
#启动Docker
sudo systemctl start docker
#设置Docker开机自启
sudo systemctl enable docker
#查看Docker版本
sudo docker version
Docker 从 Docker Hub 拉取镜像,因为是从国外获取,所以速度较慢,有时会出现无法拉取镜像的情况,可以通过配置国内镜像源的方式,从国内获取镜像,提高拉取速度。这里介绍中国科学技术大学(LUG@USTC)的开源镜像:https://docker.mirrors.ustc.edu.cn和网易的开源镜像:http://hub-mirror.c.163.com。
USTC 是老牌的 Linux 镜像服务提供者了,USTC 的 Docker 镜像加速服务速度很快。USTC 和网易的优势之一就是不需要注册,属于真正的公共服务。(也可以使用阿里等其他服务商的镜像加速服务)
#编辑文件
sudo vi /etc/docker/daemon.json
#在文件中输入以下内容并保存
{
"registry-mirrors": ["http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"]
}
# 重新加载某个服务的配置文件
sudo systemctl daemon-reload
# 重新启动 Docker
sudo systemctl restart docker
编辑Docker服务器上对应的配置文件
vi /usr/lib/systemd/system/docker.service
找到以ExecStart开头的行,在该行的末尾添加内容 -H tcp://0.0.0.0:2375 添加完成后保存文件。
重启Docker
sudo systemctl daemon-reload
sudo service docker restart
重启完成后可通过浏览器访问http://Docker主机IP:2375/version将输出Docker版本信息,若无法访问请检查防火墙设置。
# 拉取 mysql 5.7 如果不写后面的版本号则会自动拉取最新版
sudo docker pull mysql:5.7
创建文件夹,用于存放MYSQL配置文件、日志以及数据。
sudo mkdir -p /home/docker/mysql/conf /home/docker/mysql/logs /home/docker/mysql/data
创建并编辑配置文件
sudo vi /home/docker/mysql/conf/my.conf
my.conf配置文件内容如下,可根据实际情况做适当调整。
[mysqld] character-set-server=utf8 #绑定IPv4和3306端口 bind-address = 0.0.0.0 port = 3306 sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" default_storage_engine=innodb innodb_buffer_pool_size=1000M innodb_log_file_size=50M # 允许最大连接数 max_connections=1000 # 时区 default-time-zone = '+8:00' [mysql] default-character-set=utf8 [mysql.server] default-character-set=utf8 [mysql_safe] default-character-set=utf8
创建容器并挂载目录
sudo docker run -p 3306:3306 --name mysql --restart always --privileged=true -v /home/docker/mysql/conf:/etc/mysql -v /home/docker/mysql/logs:/var/log/mysql -v /home/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root@12580 -d mysql:5.7 #参数说明 -p 3306:3306 映射端口 --name mysql 容器名称 --restart always 自动启动容器 --privileged=true 提升容器内权限 -v /home/docker/mysql/conf:/etc/mysql 映射配置文件目录 -v /home/docker/mysql/logs:/var/log/mysql 映射日志目录 -v /home/docker/mysql/data:/var/lib/mysql 映射数据目录 -e MYSQL_ROOT_PASSWORD=root@12580 root用户密码 -d mysql:5.7 后台运行-镜像名称
进入Docker终端通过mysql客户端访问Mysql
sudo docker exec -it mysql /bin/bash
sudo mysql -uroot -proot@12580
远程连接MYSQL时连接信息如下:
host:127.0.0.1 #安装Docker的主机IP
port:3306
user:root
password:root@12580
如果容器运行正常,但是无法访问到MySQL,一般有以下几个可能的原因:
#开放端口
sudo systemctl status firewalld
sudo firewall-cmd --zone=public --add-port=3306/tcp -permanent
sudo firewall-cmd --reload
#关闭并禁用防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo docker exec -it mysql /bin/bash
sudo mysql -uroot -proot@12580
mysql> grant all privileges on *.* to root@'%' identified by "root@12580";
# 拉取 redis 6 如果不写后面的版本号则会自动拉取最新版
sudo docker pull redis:6
创建文件夹,用于存放Redis配置文件及数据。
sudo mkdir -p /home/docker/redis/conf /home/docker/redis/data
从官网下载配置文件并修改默认配置项,修改完成后将redis.conf文件复制到/home/docker/redis/conf目录。
bind 127.0.0.1 -::1 #注释掉这部分,允许所有IP访问Redis
protected-mode no #默认yes,开启保护模式,限制为本地访问,改为no,取消限制
databases 16 #数据库个数(可选)
appendonly yes #redis持久化(可选)
requirepass redis@12580 #开启访问认证并配置redis访问密码
创建容器并挂载目录
sudo docker run -p 6379:6379 --name redis --restart always --privileged=true -v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/docker/redis/data:/data -d redis:6 redis-server /etc/redis/redis.conf --appendonly yes #参数说明 -p 6379:6379 映射端口 --name redis 容器名称 --restart always 自动启动容器 --privileged=true 提升容器内权限 -v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf 映射配置文件 -v /home/docker/redis/data:/data 映射数据目录 -d redis:6 后台运行-镜像名称 redis-server /etc/redis/redis.conf 让redis按照这个redis.conf的配置启动 --appendonly yes redis启动后数据持久化
进入Docker终端通过redis-cli访问redis。
sudo docker exec -it redis /bin/bash
sudo redis-cli
127.0.0.1:6379> auth redis@12580
也可通过redis-desktop-manager图形化工具连接redis。
远程连接Redis时连接信息如下:
host:127.0.0.1 #安装Docker的主机IP
port:6379
password:redis@12580
如果容器运行正常,但是无法访问到Redis,请检查防火墙设置。
#开放端口
sudo systemctl status firewalld
sudo firewall-cmd --zone=public --add-port=6379/tcp -permanent
sudo firewall-cmd --reload
#关闭并禁用防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 拉取 mongo 4 如果不写后面的版本号则会自动拉取最新版
sudo docker pull mongo:4
创建文件夹,用于存放MongoDB配置文件、日志及数据。
sudo mkdir -p /home/docker/mongo/conf /home/docker/mongo/logs /home/docker/mongo/data
sudo chmod 777 /home/docker/mongo/data
sudo touch /home/docker/mongo/logs/mongod.log
sudo chmod 777 /home/docker/mongo/logs/mongod.log
sudo touch /home/docker/mongo/conf/mongod.conf
sudo chmod 766 /home/docker/mongo/conf/mongod.conf
编辑配置文件
sudo vim /home/docker/mongo/conf/mongod.conf
mongod.conf配置文件内容如下,可根据实际情况做适当调整
# 数据库文件存储位置 dbpath = /data/db # log文件存储位置 logpath = /data/log/mongod.log # 使用追加的方式写日志 logappend = true # 是否以守护进程方式运行 # fork = true # 全部ip可以访问 bind_ip = 0.0.0.0 # 端口号 port = 27017 # 是否启用认证 auth = true # 设置oplog的大小(MB) oplogSize=2048
创建容器并挂载目录
sudo docker run -p 27017:27017 --name mongodb --restart=always --privileged=true -v /home/docker/mongo/data:/data/db -v /home/docker/mongo/conf:/data/configdb -v /home/docker/mongo/logs:/data/log -d mongo:4 -f /data/configdb/mongod.conf --auth #参数说明 -p 27017:27017 映射端口 --name mongodb 容器名称 --restart always 自动启动容器 --privileged=true 提升容器内权限 -v /home/docker/mongo/conf:/data/configdb 映射配置文件目录 -v /home/docker/mongo/data:/data/db 映射数据目录 -v /home/docker/mongo/logs:/data/log 映射日志目录 -d mongo:4 后台运行-镜像名称 -f /data/configdb/mongod.conf 让mongo按照这个mongod.conf的配置启动 --auth 开启认证
进入Docker终端通过mongo命令访问MongoDB。
sudo docker exec -it mongodb /bin/bash
sudo mongo
#创建管理员账号
>use admin
>db.createUser({user:"root",pwd:"root@12580",roles:[{role:'root',db:'admin'}]})
>exit
远程连接MongoDB时连接信息如下:
host:127.0.0.1 #安装Docker的主机IP
port:27017
username:root
password:root@12580
如果容器运行正常,但是无法访问到Redis,请检查防火墙设置。
#开放端口
sudo systemctl status firewalld
sudo firewall-cmd --zone=public --add-port=27017/tcp -permanent
sudo firewall-cmd --reload
#关闭并禁用防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 拉取 rabbitmq 3 如果不写后面的版本号则会自动拉取最新版
sudo docker pull rabbitmq:3-management
创建文件夹,用于存放RabbitMQ数据。
sudo mkdir -p /home/docker/rabbit/data
创建容器并挂载目录
sudo docker run -p 15672:15672 -p 5672:5672 --name rabbitmq --restart=always --privileged=true -v /home/docker/rabbit/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=rabbit -e RABBITMQ_DEFAULT_PASS=rabbit@12580 -d rabbitmq:3-management #参数说明 -p 15672:15672 -p 5672:5672 映射端口 --name rabbitmq 容器名称 --restart always 自动启动容器 --privileged=true 提升容器内权限 -v /home/docker/rabbit/data:/var/lib/rabbitmq 映射数据目录 -e RABBITMQ_DEFAULT_USER=rabbit 默认用户名 -e RABBITMQ_DEFAULT_PASS=rabbit@12580 默认密码 -d rabbitmq:3-management 后台运行-镜像名称
容器启动后可通过控制台对RabbitMQ进行管理,控制台访问地址:http://Docker主机IP:15672/,输入默认的用户名和密码即可登录。
远程连接RabbitMQ时连接信息如下:
host:127.0.0.1 #安装Docker的主机IP
port:5672
username:rabbit
password:rabbit@12580
virtual-host: / #默认虚拟主机
如果容器运行正常,但是无法访问到RabbitMQ,请检查防火墙设置。
#开放端口
sudo systemctl status firewalld
sudo firewall-cmd --zone=public --add-port=15672/tcp -permanent
sudo firewall-cmd --zone=public --add-port=5672/tcp -permanent
sudo firewall-cmd --reload
#关闭并禁用防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
在RabbitMQ中,我们可以通过消息的过期时间TTL和死信队列DLX来实现延迟队列,虽说这种实现的方式可以用,但是并不推荐,因为比较复杂,还有许多问题。RabbitMQ官方提供了延迟队列插件rabbitmq-delayed-message-exchange,使我们的使用延迟队列更加简单。
首先从官网上下载插件(因为我们安装的RabbitMQ版本是3.8.X,所以需要下载此版本对应的插件),下载链接:https://www.rabbitmq.com/community-plugins.html
将刚下载下来的rabbitmq_delayed_message_exchange-3.8.0.ez文件上传到Docker所在服务器,此处我上传到了服务器/home/docker/rabbit目录下。
将该文件拷贝到rabbitmq容器内部。
sudo docker cp /home/docker/rabbit/rabbitmq_delayed_message_exchange-3.8.0.ez
rabbitmq:/plugins
查看是否拷贝成功
sudo docker exec -it rabbitmq /bin/bash
sudo cd /plugins
sudo ls -l
启用插件
#在容器内的plugins目录下执行
sudo rabbitmq-plugins enable rabbitmq_delayed_message_exchange
退出容器内部并重启容器后插件生效。
#容器内部执行
sudo exit
#重启容器
sudo docker restart rabbitmq
# 拉取 nacos:1.4.1 如果不写后面的版本号则会自动拉取最新版
sudo docker pull nacos/nacos-server:1.4.1
创建nacos数据库,并创建表。
#创建数据库 nacos_config create schema nacos_config default character set utf8 collate utf8_general_ci; #创建用户 nacos 密码 nacos_12580 create user 'nacos'@'%' identified by 'nacos_12580'; #用户授权 grant select,insert,update,delete,create on nacos_config.* to nacos; #刷新权限 flush privileges; #创建数据库完毕后在nacos_config下执行以下SQL use nacos_config; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = config_info */ /******************************************/ CREATE TABLE `config_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255) NOT NULL COMMENT 'data_id', `group_id` varchar(255) DEFAULT NULL, `content` longtext NOT NULL COMMENT 'content', `md5` varchar(32) DEFAULT NULL COMMENT 'md5', `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `src_user` text COMMENT 'source user', `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', `app_name` varchar(128) DEFAULT NULL, `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', `c_desc` varchar(256) DEFAULT NULL, `c_use` varchar(64) DEFAULT NULL, `effect` varchar(64) DEFAULT NULL, `type` varchar(64) DEFAULT NULL, `c_schema` text, PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = config_info_aggr */ /******************************************/ CREATE TABLE `config_info_aggr` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255) NOT NULL COMMENT 'data_id', `group_id` varchar(255) NOT NULL COMMENT 'group_id', `datum_id` varchar(255) NOT NULL COMMENT 'datum_id', `content` longtext NOT NULL COMMENT '内容', `gmt_modified` datetime NOT NULL COMMENT '修改时间', `app_name` varchar(128) DEFAULT NULL, `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = config_info_beta */ /******************************************/ CREATE TABLE `config_info_beta` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255) NOT NULL COMMENT 'data_id', `group_id` varchar(128) NOT NULL COMMENT 'group_id', `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', `content` longtext NOT NULL COMMENT 'content', `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps', `md5` varchar(32) DEFAULT NULL COMMENT 'md5', `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `src_user` text COMMENT 'source user', `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = config_info_tag */ /******************************************/ CREATE TABLE `config_info_tag` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255) NOT NULL COMMENT 'data_id', `group_id` varchar(128) NOT NULL COMMENT 'group_id', `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', `tag_id` varchar(128) NOT NULL COMMENT 'tag_id', `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', `content` longtext NOT NULL COMMENT 'content', `md5` varchar(32) DEFAULT NULL COMMENT 'md5', `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', `src_user` text COMMENT 'source user', `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = config_tags_relation */ /******************************************/ CREATE TABLE `config_tags_relation` ( `id` bigint(20) NOT NULL COMMENT 'id', `tag_name` varchar(128) NOT NULL COMMENT 'tag_name', `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type', `data_id` varchar(255) NOT NULL COMMENT 'data_id', `group_id` varchar(128) NOT NULL COMMENT 'group_id', `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', `nid` bigint(20) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`nid`), UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`), KEY `idx_tenant_id` (`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = group_capacity */ /******************************************/ CREATE TABLE `group_capacity` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群', `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值', `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_group_id` (`group_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = his_config_info */ /******************************************/ CREATE TABLE `his_config_info` ( `id` bigint(64) unsigned NOT NULL, `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `data_id` varchar(255) NOT NULL, `group_id` varchar(128) NOT NULL, `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', `content` longtext NOT NULL, `md5` varchar(32) DEFAULT NULL, `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `src_user` text, `src_ip` varchar(50) DEFAULT NULL, `op_type` char(10) DEFAULT NULL, `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', PRIMARY KEY (`nid`), KEY `idx_gmt_create` (`gmt_create`), KEY `idx_gmt_modified` (`gmt_modified`), KEY `idx_did` (`data_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = tenant_capacity */ /******************************************/ CREATE TABLE `tenant_capacity` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID', `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数', `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_tenant_id` (`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表'; CREATE TABLE `tenant_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `kp` varchar(128) NOT NULL COMMENT 'kp', `tenant_id` varchar(128) default '' COMMENT 'tenant_id', `tenant_name` varchar(128) default '' COMMENT 'tenant_name', `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc', `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source', `gmt_create` bigint(20) NOT NULL COMMENT '创建时间', `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`), KEY `idx_tenant_id` (`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info'; CREATE TABLE `users` ( `username` varchar(50) NOT NULL PRIMARY KEY, `password` varchar(500) NOT NULL, `enabled` boolean NOT NULL ); CREATE TABLE `roles` ( `username` varchar(50) NOT NULL, `role` varchar(50) NOT NULL, UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE ); CREATE TABLE `permissions` ( `role` varchar(50) NOT NULL, `resource` varchar(255) NOT NULL, `action` varchar(8) NOT NULL, UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE ); INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE); INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
sudo docker run -p 8848:8848 --name nacos-server --restart=always --privileged=true -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=127.0.0.1 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_USER=nacos -e MYSQL_SERVICE_PASSWORD=nacos_12580 -e MYSQL_SERVICE_DB_NAME=nacos_config -e MYSQL_DATABASE_NUM=1 -e JVM_XMS=256m -e JVM_XMX=256m -d nacos/nacos-server:1.4.1 #参数说明 -p 8848:8848 映射端口 --name nacos-server 容器名称 --restart always 自动启动容器 --privileged=true 提升容器内权限 -d nacos/nacos-server:1.4.1 后台运行-镜像名称 #其他参数为nacos参数,请将数据库配置参数改为自己的环境,具体详见 https://nacos.io/zh-cn/docs/quick-start-docker.html
容器启动后可通过控制台对Nacos进行管理,控制台访问地址:http://Docker主机IP:8848/nacos,输入默认的用户名和密码即可登录,默认用户名和密码都为nacos,建议第一次登录后及时修改。
# 拉取 sentinel 1.8.0 如果不写后面的版本号则会自动拉取最新版
sudo docker pull bladex/sentinel-dashboard:1.8.0
sudo docker run -p 8858:8858 --name sentinel
--restart always
--privileged=true
-d bladex/sentinel-dashboard:1.8.0
#参数说明
-p 8858:8858 映射端口
--name sentinel 容器名称
--restart always 自动启动容器
--privileged=true 提升容器内权限
-d bladex/sentinel-dashboard:1.8.0 后台运行-镜像名称
容器启动后可通过控制台对Sentinel进行管理,控制台访问地址:http://Docker主机IP:8858,输入默认的用户名和密码即可登录,默认用户名和密码都为sentinel。
# 拉取 seata-server 1.3.0 如果不写后面的版本号则会自动拉取最新版
sudo docker pull seataio/seata-server:1.3.0
#创建数据库 seata create schema seata default character set utf8 collate utf8_general_ci; #创建用户 seata 密码 seata_12580 create user 'seata'@'%' identified by 'seata_12580'; #用户授权 grant select,insert,update,delete,create on seata.* to seata; #刷新权限 flush privileges; #创建数据库完毕后在seata下执行以下SQL use seata; -- 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_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;
注:客户端也需要创建对应的数据库表,SQL如下:
-- 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(20) NOT NULL COMMENT 'branch transaction id',
`xid` VARCHAR(100) 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 = utf8 COMMENT ='AT transaction mode undo table';
创建文件夹,用于存放Seata本地配置文件。
sudo mkdir -p /home/docker/seata/conf
创建并编辑本地配置文件。
sudo vim /home/docker/seata/conf/registry.conf
registry.conf本地配置文件内容如下,可根据实际情况做适当调整。
registry { type = "nacos" nacos { application = "seata-server" serverAddr = "192.168.1.198:8848" #注意registry和config需要在同一个组下 group = "SEATA_GROUP" namespace = "dev" # 需要和nacos配置中事务组配置保持一致 cluster = "default" username = "nacos" password = "nacos" } } config { type = "nacos" nacos { serverAddr = "192.168.1.198:8848" namespace = "dev" #注意registry和config需要在同一个组下 group = "SEATA_GROUP" username = "nacos" password = "nacos" } }
将seata配置项推送到nacos配置中心,需要先创建config.txt文件,该文件内容为seata各个配置项,再通过官方提供的推送脚本读取该文件并将配置项推送到配置中心。
创建config.txt文件
sudo vim /home/docker/seata/config.txt
config.txt文件链接地址:https://github.com/seata/seata/blob/develop/script/config-center/config.txt
内容如下:
service.vgroupMapping.westar_tx_group=default
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://192.168.1.198:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=seata
store.db.password=seata_12580
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
注:westar_tx_group需要与客户端保持一致 default需要跟客户端和registry.conf中registry中的cluster保持一致,数据库连接信息需要根据实际环境进行调整。上述配置都可以先推送到nacos再通过控制台进行管理。
创建nacos-config.sh推送脚本
sudo mkdir -p /home/docker/seata/script
sudo vim /home/docker/seata/script/nacos-config.sh
nacos-config.sh脚本链接地址:https://github.com/seata/seata/blob/develop/script/config-center/nacos/nacos-config.sh
内容如下:
while getopts ":h:p:g:t:u:w:" opt do case $opt in h) host=$OPTARG ;; p) port=$OPTARG ;; g) group=$OPTARG ;; t) tenant=$OPTARG ;; u) username=$OPTARG ;; w) password=$OPTARG ;; ?) echo " USAGE OPTION: $0 [-h host] [-p port] [-g group] [-t tenant] [-u username] [-w password] " exit 1 ;; esac done urlencode() { for ((i=0; i < ${#1}; i++)) do char="${1:$i:1}" case $char in [a-zA-Z0-9.~_-]) printf $char ;; *) printf '%%%02X' "'$char" ;; esac done } if [[ -z ${host} ]]; then host=localhost fi if [[ -z ${port} ]]; then port=8848 fi if [[ -z ${group} ]]; then group="SEATA_GROUP" fi if [[ -z ${tenant} ]]; then tenant="" fi if [[ -z ${username} ]]; then username="" fi if [[ -z ${password} ]]; then password="" fi nacosAddr=$host:$port contentType="content-type:application/json;charset=UTF-8" echo "set nacosAddr=$nacosAddr" echo "set group=$group" failCount=0 tempLog=$(mktemp -u) function addConfig() { curl -X POST -H "${contentType}" "http://$nacosAddr/nacos/v1/cs/configs?dataId=$(urlencode $1)&group=$group&content=$(urlencode $2)&tenant=$tenant&username=$username&password=$password" >"${tempLog}" 2>/dev/null if [[ -z $(cat "${tempLog}") ]]; then echo " Please check the cluster status. " exit 1 fi if [[ $(cat "${tempLog}") =~ "true" ]]; then echo "Set $1=$2 successfully " else echo "Set $1=$2 failure " (( failCount++ )) fi } count=0 for line in $(cat $(dirname "$PWD")/config.txt | sed s/[[:space:]]//g); do (( count++ )) key=${line%%=*} value=${line#*=} addConfig "${key}" "${value}" done echo "=========================================================================" echo " Complete initialization parameters, total-count:$count , failure-count:$failCount " echo "=========================================================================" if [[ ${failCount} -eq 0 ]]; then echo " Init nacos config finished, please start seata-server. " else echo " init nacos config fail. " fi
执行推送脚本,参数请根据实际环境调整。
sudo cd /home/docker/seata/script
sh nacos-config.sh -h 192.168.1.198 -p 8848 -username nacos -password nacos -g SEATA_GROUP -t dev
创建容器并挂载目录
sudo docker run -p 8091:8091 --name seata-server --restart always --privileged=true -e SEATA_IP=192.168.1.198 -e SEATA_CONFIG_NAME=file:/root/seata-config/registry -v /home/docker/seata/conf:/root/seata-config -d seataio/seata-server:1.3.0 #参数说明 -p 8091:8091 映射端口 --name seata-server 容器名称 --restart always 自动启动容器 --privileged=true 提升容器内权限 -e SEATA_IP=192.168.1.198 seata-server IP地址 -v /home/docker/seata/conf:/root/seata-config 映射配置文件目录 -d seataio/seata-server:1.3.0 后台运行-镜像名称
${value}"
done
echo “="
echo " Complete initialization parameters, total-count:
c
o
u
n
t
,
f
a
i
l
u
r
e
−
c
o
u
n
t
:
count , failure-count:
count,failure−count:failCount "
echo "=”
if [[ ${failCount} -eq 0 ]]; then
echo " Init nacos config finished, please start seata-server. "
else
echo " init nacos config fail. "
fi
执行推送脚本,参数请根据实际环境调整。
sudo cd /home/docker/seata/script
sh nacos-config.sh -h 192.168.1.198 -p 8848 -username nacos -password nacos -g SEATA_GROUP -t dev
[外链图片转存中...(img-B5NzjsEf-1627349359715)]
创建容器并挂载目录
sudo docker run -p 8091:8091 --name seata-server
–restart always
–privileged=true
-e SEATA_IP=192.168.1.198
-e SEATA_CONFIG_NAME=file:/root/seata-config/registry
-v /home/docker/seata/conf:/root/seata-config
-d seataio/seata-server:1.3.0
#参数说明
-p 8091:8091 映射端口
–name seata-server 容器名称
–restart always 自动启动容器
–privileged=true 提升容器内权限
-e SEATA_IP=192.168.1.198 seata-server IP地址
-v /home/docker/seata/conf:/root/seata-config 映射配置文件目录
-d seataio/seata-server:1.3.0 后台运行-镜像名称
[外链图片转存中...(img-ScR7BVAB-1627349359716)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。