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

QQ截图20210518163315.png

2、卸载依赖(若未安装过Docker可跳过此步骤)

#卸载Docker相关依赖
sudo yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine

image.png

3、安装工具包并设置仓库。

#安装工具包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

image.png

#设置yum仓库
sudo yum-config-manager 
    --add-repo 
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

image.png

4、安装Docker

#通过yum安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io

image.png

#启动Docker
sudo systemctl start docker
#设置Docker开机自启
sudo systemctl enable docker
#查看Docker版本
sudo docker version

image.png

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

image.png

6、开启远程访问

编辑Docker服务器上对应的配置文件

vi /usr/lib/systemd/system/docker.service

找到以ExecStart开头的行,在该行的末尾添加内容 -H tcp://0.0.0.0:2375 添加完成后保存文件。

image.png

重启Docker

sudo systemctl daemon-reload
sudo service docker restart

重启完成后可通过浏览器访问http://Docker主机IP:2375/version将输出Docker版本信息,若无法访问请检查防火墙设置。

image.png

二、安装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 后台运行-镜像名称

image.png

3、连接MYSQL

进入Docker终端通过mysql客户端访问Mysql

sudo docker exec -it  mysql  /bin/bash
sudo mysql -uroot -proot@12580

image.png

远程连接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启动后数据持久化

image.png

3、连接Redis服务

进入Docker终端通过redis-cli访问redis。

sudo docker exec -it  redis  /bin/bash
sudo redis-cli
127.0.0.1:6379> auth redis@12580

image.png

也可通过redis-desktop-manager图形化工具连接redis。

image.png

远程连接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 开启认证

image.png

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

image.png

image.png

远程连接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 后台运行-镜像名称

image.png

3、访问RabbitMQ

容器启动后可通过控制台对RabbitMQ进行管理,控制台访问地址:http://Docker主机IP:15672/,输入默认的用户名和密码即可登录。

image.png

image.png

远程连接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

image.png

image.png

将刚下载下来的rabbitmq_delayed_message_exchange-3.8.0.ez文件上传到Docker所在服务器,此处我上传到了服务器/home/docker/rabbit目录下。

image.png

将该文件拷贝到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

image.png

启用插件

#在容器内的plugins目录下执行
sudo rabbitmq-plugins enable rabbitmq_delayed_message_exchange

image.png

退出容器内部并重启容器后插件生效。

#容器内部执行
sudo exit
#重启容器
sudo docker restart rabbitmq

image.png

六、安装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,建议第一次登录后及时修改。

image.png

image.png

七、安装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。

image.png

image.png

八、安装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

image.png

创建容器并挂载目录

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 后台运行-镜像名称

image.png

${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,failurecount: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)]

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐