一、docker 在线安装 :CentOS Docker 安装 | 菜鸟教程
#安装
curl -fsSL https://get.docker.com | bash -s docker --mirror aliyun
#启动
systemctl start docker
#关闭
systemctl stop docker
#重启
systemctl restart docker
#卸载
#删除安装包:
yum remove docker-ce
#删除镜像、容器、配置文件等内容:
rm -rf /var/lib/docker
二、docker 安装 mysql 8 版本 Docker 安装 MySQL | 菜鸟教程
# docker 中下载 mysql
docker pull mysql
#启动
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
#进入容器
docker exec -it mysql /bin/bash
#登录mysql
mysql -u root -p
#查看用户信息
select host,user,plugin,authentication_string from mysql.user;
#添加远程登录用户
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
docker中修改mysql8.0密码
1.进入mysql8.0容器
docker exec -it mysql8.0 /bin/bash
2.进入mysql
mysql -u root -p
3.先进入 mysql 数据库
use mysql;
4.修改密码
ALTER USER 'root'@'%' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER;
5.修改本地密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';
6.退出
exit;
三、Docker安装Zookeeper
docker pull zookeeper
##存储配置文件和数据
## mkdir -p /root/dev/zookeeper/conf
mkdir -p /root/dev/docker/zookeeper/data
# 启动
docker run -d \
-p 2181:2181 \
-v /root/dev/docker/zookeeper/data/:/data/ \
--name=zookeeper \
--privileged zookeeper
#zoo.cfg
## admin.serverPort=9999
## 进入zookeeper
docker exec -it 6ccc990d22b6 /bin/bash
## 客户端启动
./bin/zkCli.sh
##查看当前节点列表
ls /
##创建节点
create /test "test"
##设置节点数据
set /test "666666"
##查看节点数据
get /test
##删除节点
delete /test
问题:
./zkServer.sh启动报错,看不到原因:
Using config: /conf/zoo.cfg Starting zookeeper ... FAILED TO START
使用下列命令启动,查看报错原因
./zkServer.sh start-foreground
问题:
2021-07-14 15:33:43,745 [myid:1] - INFO [main:NIOServerCnxnFactory@660] - binding to port /0.0.0.0:2181
2021-07-14 15:33:43,746 [myid:1] - ERROR [main:ZooKeeperServerMain@91] - Unexpected exception, exiting abnormally
java.net.BindException: Address already in use
at java.base/sun.nio.ch.Net.bind0(Native Method)
at java.base/sun.nio.ch.Net.bind(Unknown Source)
at java.base/sun.nio.ch.Net.bind(Unknown Source)
at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
at java.base/sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
at java.base/sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:662)
at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:160)
at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:113)
at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:68)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:141)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:91)
从错误信息来看,是端口被使用了,但我用netstat -lntup|grep 2181 是没被使用的,再用 lsof -i:2181,发现了2181端口果然被占用了
在zoo.cfg 中更改2181的端口为2281
四、docker 安装 consul
docker pull consul
##启动第一个节点,叫 consul1
docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect=1 -ui -bind=0.0.0.0 -client=0.0.0.0
#端口详解:
#8500 : http 端口,用于 http 接口和 web ui访问;
#8300 : server rpc 端口,同一数据中心 consul server 之间通过该端口通信;
#8301 : serf lan 端口,同一数据中心 consul client 通过该端口通信; 用于处理当前datacenter中LAN的#gossip通信;
#8302 : serf wan 端口,不同数据中心 consul server 通过该端口通信; agent Server使用,处理与其他#datacenter的gossip通信;
#8600 : dns 端口,用于已注册的服务发现;
#查看consul集群信息
docker exec -it consul1 consul members
#开浏览器: http://localhost:8500 来查看整个集群的信息
五、docker 安装 rabbitmq
#1
docker pull rabbitmq
#2
#方式一:默认guest 用户,密码也是 guest
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq
#方式二:设置用户名和密码
docker run -di --name rabbitmq -e RABBITMQ_DEFAULT_USER=daniel -e RABBITMQ_DEFAULT_PASS=daniel -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq
说明:
-d 后台运行容器;
--name 指定容器名;
-p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);
-v 映射目录或文件;
--hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
-e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)
#3 启动rabbitmq_management
docker exec -it rabbit rabbitmq-plugins enable rabbitmq_management
或者
docker exec -it 镜像ID /bin/bash
rabbitmq-plugins enable rabbitmq_management
#4 开启防火墙15672端口,浏览器打开web管理端:http://ip:15672
#5 遇到问题:我使用chrome 浏览器无法登陆,换个浏览器就可以,神奇
六、docker 安装 zipkin
docker search zipkin
docker pull openzipkin/zipkin
docker run -d --restart always -p 9411:9411 --name zipkin openzipkin/zipkin
七、docker 安装单机版Nacos
docker pull nacos/nacos-server
docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server
# 登录密码默认nacos/nacos
# standalone代表着单机模式运行,非集群模式
docker nacos+mysql :
nacos-mysql :nacos/nacos-db.sql at master · alibaba/nacos · GitHub
docker run -d \
--name nacos-mysql \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=106.15.38.88 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=nacos \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--restart=always \
nacos/nacos-server
八、docker 安装 Sentinel
docker pull bladex/sentinel-dashboard
docker run --name sentinel -d -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -p 8858:8858 -d bladex/sentinel-dashboard
## 默认账号密码 sentinel
## -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime 加入时区,让容器与宿主机时间一致
九、docker 安装 seata
官网下载地址:下载中心 查看各版本
docker pull seataio/seata-server:1.4.2
创建配置文件目录,位置自定
mkdir /root/dev/docker/seata/seata-config
mkdir /root/dev/docker/seata/logs
目录seata-config下创建注册文件 registry.conf(以下使用nacos做demo)和file.conf 两个配置文件
自定义配置文件需要通过挂载文件的方式实现,将宿主机上的 registry.conf 和 file.conf 挂载到容器中相应的目录
指定 registry.conf
使用自定义配置文件时必须指定环境变量 SEATA_CONFIG_NAME, 并且值需要以file:开始, 如: file:/root/seata-config/registry
$ docker run --name seata-server \
-p 8091:8091 \
-e SEATA_CONFIG_NAME=file:/root/seata-config/registry \
-v /User/seata/config:/root/seata-config \
seataio/seata-server
其中 -e 用于配置环境变量, -v 用于挂载宿主机的目录
指定 file.conf
如果需要同时指定 file.conf 配置文件,则需要在 registry.conf 文件中将 config 配置改为以下内容,name 的值为容器中对应的路径
config {
type = "file"
file {
name = "file:/root/seata-config/file.conf"
}
}
registry.conf:
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
nacos {
application = "seata-server"
serverAddr = "192.168.1.23:8848"
group = "SEATA_GROUP"
namespace = ""
cluster = "default"
username = "nacos"
password = "nacos"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "file"
file {
name = "file:/root/dev/docker/seata/seata-config/file.conf"
}
}
file.conf:
## transaction log store, only used in seata-server
store {
## store mode: file、db、redis
mode = "db" ## 原来为file
## file store property
file {
## store location dir
dir = "sessionStore"
# branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
maxBranchSessionSize = 16384
# globe session size , if exceeded throws exceptions
maxGlobalSessionSize = 512
# file buffer size , if exceeded allocate new buffer
fileWriteBufferCacheSize = 16384
# when recover batch read size
sessionReloadReadSize = 100
# async, sync
flushDiskMode = async
}
## database store property
db {
## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
datasource = "druid"
## mysql/oracle/postgresql/h2/oceanbase etc.
dbType = "mysql"
driverClassName = "com.mysql.jdbc.Driver"
## 因为设置为db,所以需要选择数据库,这里设置数据库及密码,seata是需要创建的,默认的表是通过脚本运行得到的
url = "jdbc:mysql://106.15.38.88:3306/seata"
user = "root"
password = "123456"
minConn = 5
maxConn = 30
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 100
maxWait = 5000
}
}
创建数据库和表,全局事务会话信息由3块内容构成,全局事务-->分支事务-->全局锁,对应表global_table、branch_table、lock_table,库名自定,与file.conf的mysql 配置信息要一致
-- -------------------------------- 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(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;
启动:
docker run -it -d -p 8091:8091 \
-v /root/dev/docker/seata/seata-config/registry.conf:/seata-server/resources/registry.conf \
-v /root/dev/docker/seata/seata-config/file.conf:/seata-server/resources/file.conf \
-v /root/dev/docker/seata/logs:/root/logs \
--restart=always \
--name seata1.4.2 seataio/seata-server:1.4.2