CentOS 7.9下安装Docker及常用镜像
CentOS 7.9下安装Docker及常用镜像本文档为在Centos 7.9下安装Docker及常用镜像的指导文件。一、安装Docker1、环境准备操作系统版本为centos 7.9,内核版本需要在3.10以上,需要保障能够连通互联网,为了避免安装过程中出现网络异常建议关闭linux的防火墙(生产环境下不要关闭防火墙,可根据实际情况设置防火墙出入站规则)。#查看内核版本sudo uname -r
CentOS 7.9下安装Docker及常用镜像
本文档为在Centos 7.9下安装Docker及常用镜像的指导文件。
一、安装Docker
1、环境准备
操作系统版本为centos 7.9,内核版本需要在3.10以上,需要保障能够连通互联网,为了避免安装过程中出现网络异常建议关闭linux的防火墙(生产环境下不要关闭防火墙,可根据实际情况设置防火墙出入站规则)。
#查看内核版本
sudo uname -r
#查看系统版本
sudo cat /etc/redhat-release
#关闭防火墙
sudo systemctl stop firewalld
#禁用防火墙开机自启
sudo systemctl disable firewalld
2、卸载依赖(若未安装过Docker可跳过此步骤)
#卸载Docker相关依赖
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
3、安装工具包并设置仓库。
#安装工具包
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
4、安装Docker
#通过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
5、配置镜像加速
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
6、开启远程访问
编辑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
1、拉取官方镜像
# 拉取 mysql 5.7 如果不写后面的版本号则会自动拉取最新版
sudo docker pull mysql:5.7
2、创建并启动容器
创建文件夹,用于存放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 后台运行-镜像名称
3、连接MYSQL
进入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
- MYSQL未设置远程访问权限
sudo docker exec -it mysql /bin/bash
sudo mysql -uroot -proot@12580
mysql> grant all privileges on *.* to root@'%' identified by "root@12580";
三、安装Redis
1、拉取官方镜像
# 拉取 redis 6 如果不写后面的版本号则会自动拉取最新版
sudo docker pull redis:6
2、创建并启动容器
创建文件夹,用于存放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启动后数据持久化
3、连接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
四、安装MongoDB
1、拉取官方镜像
# 拉取 mongo 4 如果不写后面的版本号则会自动拉取最新版
sudo docker pull mongo:4
2、创建并启动容器
创建文件夹,用于存放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 开启认证
3、连接MongoDB
进入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
1、拉取官方镜像
# 拉取 rabbitmq 3 如果不写后面的版本号则会自动拉取最新版
sudo docker pull rabbitmq:3-management
2、创建并启动容器
创建文件夹,用于存放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 后台运行-镜像名称
3、访问RabbitMQ
容器启动后可通过控制台对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
4、安装延迟消息插件
在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
六、安装Nacos1.4.1
1、拉取官方镜像
# 拉取 nacos:1.4.1 如果不写后面的版本号则会自动拉取最新版
sudo docker pull nacos/nacos-server:1.4.1
2、创建Nacos数据库
创建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');
3、创建并启动容器
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
4、访问Nacos控制台
容器启动后可通过控制台对Nacos进行管理,控制台访问地址:http://Docker主机IP:8848/nacos,输入默认的用户名和密码即可登录,默认用户名和密码都为nacos,建议第一次登录后及时修改。
七、安装sentinel1.8.0
1、拉取官方镜像
# 拉取 sentinel 1.8.0 如果不写后面的版本号则会自动拉取最新版
sudo docker pull bladex/sentinel-dashboard:1.8.0
2、创建并启动容器
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 后台运行-镜像名称
3、访问Sentinel控制台
容器启动后可通过控制台对Sentinel进行管理,控制台访问地址:http://Docker主机IP:8858,输入默认的用户名和密码即可登录,默认用户名和密码都为sentinel。
八、安装Seata1.3.0
1、拉取官方镜像
# 拉取 seata-server 1.3.0 如果不写后面的版本号则会自动拉取最新版
sudo docker pull seataio/seata-server:1.3.0
2、创建Seata数据库
#创建数据库 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';
3、创建并启动容器
创建文件夹,用于存放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)]
更多推荐
所有评论(0)