目录

安装portainer

安装mysql单机版

安装mysql主从复制

安装redis单机版

安装redis集群(3主3从)

安装ES

docker安装kafka

docker安装nacos

docker安装canal-server

docker安装Sentinel

docker安装Skywalking

docker安装Kibana

docker安装seata

docker安装sqlserver


安装portainer

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /docker/portainer/data:/data --restart=always --name portainer portainer/portainer

安装mysql单机版

新建my.cnf

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
default_authentication_plugin=mysql_native_password 

log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
max_allowed_packet = 100M

lower_case_table_names = 1

安装mysql

docker run -d -p 3306:3306 --restart always --name mysql8.0 --network=bridge  -m 500m --privileged=true -v /docker/mysql/log:/var/log/mysql -v /docker/mysql/data:/var/lib/mysql -v /docker/mysql/conf:/etc/mysql/conf.d  -e MYSQL_ROOT_PASSWORD=jy@123456 -e TZ=Asia/Shanghai mysql:8.0.21 --lower_case_table_names=1

安装mysql主从复制

新建主服务器容器实例3307

docker run -d -p 3307:3306 --name mysql-master --net=host -m 500m --privileged=true -v /usr/docker/mysql/log:/var/log/mysql -v /usr/docker/mysql/data:/var/lib/mysql -v /usr/docker/mysql/conf:/etc/mysql/conf.d  -e MYSQL_ROOT_PASSWORD=jy@123456 -e TZ=Asia/Shanghai mysql:8.0.21 --lower_case_table_names=1

配置master的配置文件my.cnf

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

 修改完配置后重启master实例

docker restart mysql-master

进入mysql-master容器

docker exec -it mysql-master /bin/bash

mysql -uroot -p

安装redis单机版

docker run -d -p 6379:6379 --restart always --name redis --network=bridge --privileged=true  -v /docker/redis/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data  redis:6.0.8 --cluster-enabled no --appendonly yes

安装redis集群(3主3从)

新建6个docker容器redis实例

docker run -d --restart always --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --restart always --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382 
docker run -d --restart always --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --restart always --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --restart always --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --restart always --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

进入容器redis-node-1并为6台机器构建集群关系

docker exec -it redis-node-1 /bin/bash

//注意,进入docker容器后才能执行一下命令,且注意自己的真实IP地址
--cluster-replicas 1 表示为每个master创建一个slave节点

redis-cli --cluster create 192.168.1.200:6381 192.168.1.200:6382 192.168.1.200:6383 192.168.1.200:6384 192.168.1.200:6385 192.168.1.200:6386 --cluster-replicas 1

链接进入6381作为切入点,查看集群状态

redis-cli -p 6381

cluster info

cluster nodes

redis-cli --cluster check 192.168.1.200:6381

安装ES

docker pull elasticsearch:7.13.2

创建docker容器挂在的目录:
mkdir -p /docker/elasticsearch/config
mkdir -p /docker/elasticsearch/data
mkdir -p /docker/elasticsearch/plugins

配置文件:
echo "http.host: 0.0.0.0" >> /docker/elasticsearch/config/elasticsearch.yml

保证挂载文件权限:
chmod -R 777 /docker/elasticsearch/

创建容器:
docker run -d --name elasticsearch -p 9200:9200  -p 9300:9300 \
 -e "discovery.type=single-node" \
 -e ES_JAVA_OPTS="-Xms84m -Xmx512m" \
 -v /docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
 -v /docker/elasticsearch/data:/usr/share/elasticsearch/data \
 -v /docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
 -d elasticsearch:7.13.2

docker安装kafka

先安装zookeeper
docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper

安装kafka
docker run  -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.1.200:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.200:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka

docker安装nacos

拉取镜像
docker pull nacos/nacos-server

挂载目录
mkdir -p /docker/nacos/logs/                      
mkdir -p /docker/nacos/init.d/          
vim /docker/nacos/init.d/custom.properties       

mysql新建nacos的数据库,并执行脚本
https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql

修改配置文件custom.properties
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.1.200:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true

启动容器
docker  run \
--name nacos -d \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /docker/nacos/logs:/home/nacos/logs \
-v /docker/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
nacos/nacos-server

docker安装canal-server

创建用户

create user canal identified by 'canal';
grant select,replication slave, replication client on *.* to 'canal'@'%';
flush privileges;

# 查看bin-log是否开启 on: 开启 off: 关闭
show variables like 'log_bin';

启动canal-server

docker run  \
-d  \
-e canal.instance.master.address=192.168.1.200:3306 \
-e canal.instance.dbUsername=root \
-e canal.instance.dbPassword=root \
--name canal-server  \
-p 11111:11111 \
 canal/canal-server:v1.1.5

#进入容器 查看配置文件路径
docker exec -it canal-server bash

# 复制容器中的配置文件到本地
docker cp canal-server:/home/admin/canal-server/conf/canal.properties /opt/canal
docker cp canal-server:/home/admin/canal-server/conf/example/instance.properties /opt/canal

 修改修改外部配置文件canal.properties 配置文件

# 默认端口 11111
# 默认输出model为tcp, 这里根据使用的mq类型进行修改
# tcp, kafka, RocketMQ
canal.serverMode = kafka
kafka.bootstrap.servers=192.168.1.200:9092
 
# canal可以有多个instance,每个实例有独立的配置文件,默认只有一个example实例。
# 如果需要处理多个mysql数据的话,可以复制出多个example,对其重新命名,
# 命令和配置文件中指定的名称一致。然后修改canal.properties 中的 canal.destinations
# canal.destinations=实例 1,实例 2,实例 3
canal.destinations = example

修改修改外部配置文件instance.properties配置文件

# 不能和mysql重复
canal.instance.mysql.slaveId=2
# 使用mysql的虚拟ip和端口
canal.instance.master.address=192.168.1.200:3306
# 使用已创建的canal用户
canal.instance.dbUsername=root
canal.instance.dbPassword=root
canal.instance.connectionCharset = UTF-8
 
# 问题:(只同步test库)
# canal.instance.filter.regex=.*\..*
# canal.instance.defaultDatabaseName =test
 
# 注掉上面,然后添加,同步所有的库。
# .*\\..*:  表示匹配所有的库所有的表
canal.instance.filter.regex =.*\\..*
 
# 目的地,可以认识一个消息队列,不需要更改。与canal.properties文件一致
canal.mq.topic=example

停止并且移除刚才的canal容器,并使用挂载配置文件的方式启动canal

docker run --name canal
-p 11111:11111
-v /opt/canal/instance.properties:/home/admin/canal-server/conf/example/instance.properties
-v /opt/canal/canal.properties:/home/admin/canal-server/conf/canal.properties
-d canal/canal-server:v1.1.5

docker安装Sentinel

docker run --name sentinel --restart=always  -d -p 8858:8858 -d bladex/sentinel-dashboard:1.8.2

访问路径
http://192.168.1.200:8858

docker安装Skywalking

skywalking-oap-server:Skywalking服务器
skywalking-ui :Skywalking的UI界面
docker pull apache/skywalking-oap-server:8.9.1
docker pull apache/skywalking-ui:8.9.1
 
持久化启动 skywalking-oap
 
docker run  -itd \
--name skywalking-oap \
--restart=always \
-e TZ=Asia/Shanghai \
--privileged=true \
-p 12800:12800 \
-p 11800:11800 \
--link elasticsearch:elasticsearch \
-e SW_STORAGE=elasticsearch \
-e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 \
apache/skywalking-oap-server:8.9.1
-------------------------------------------------------------------------------------------
-e TZ=Asia/Shanghai:指定时区。
--link elasticsearch:elasticsearch:关联elasticsearch容器,通过容器名字来解决ip会发生变更的问题。
-e SW_STORAGE=elasticsearch:设置环境变量,指定存储方式。
-e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200:设置环境变量,指定ES的地址
===========================================================================================
 
持久化启动 skywalking-ui
 
docker run -itd --name skywalking-ui \
--restart=always \
-e TZ=Asia/Shanghai \
-p 8980:8080 \
--privileged=true \
--link skywalking-oap:skywalking-oap \
-e SW_OAP_ADDRESS=skywalking-oap:12800 \
apache/skywalking-ui:8.9.1
 
浏览器验证
访问UI:http://192.168.1.200:8980/

docker安装Kibana

docker pull kibana:7.12.0
临时启动
docker run -d --name=kibana -p 5601:5601 kibana:7.12.0

复制目录
docker cp kibana:/usr/share/kibana/config /docker/kibana/
docker cp kibana:/usr/share/kibana/data /docker/kibana/

编辑配置文件
vi /docker/kibana/config/kibana.yml

server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://192.168.1.200:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true

先删除临时的
docker rm -f kibana

重新启动
docker run -d \
  --name=kibana \
  --restart=always \
  -p 5601:5601 \
  -v /docker/kibana/config:/usr/share/kibana/config \
  -v /docker/kibana/data:/usr/share/kibana/data \
  kibana:7.12.0

docker安装seata

docker run -d --name seata-server -p 8091:8091 -p 7091:7091  seataio/seata-server

这时进入seata 容器内部查看配置
docker exec -it seata-server sh

先在宿主机中创建一个存放配置文件的目录
mkdir -p /docker/seata/resources/

拷贝容器中配置信息
docker cp seata-server:/seata-server/resources /docker/seata/
cd /usr/docker/seata/resources/
修改application.yml 配置自己的注册中心和配置文件中心
seata-server.properties 配置信息



删除容器重新启动
docker run --name seata-server \
		-itd \
        -p 8091:8091 \
        -p 7091:7091 \
        -e STORE_MODE=db \
        -e SEATA_IP="192.168.1.200" \
        -e SEATA_PORT=8091 \
        -v "/docker/seata/resources/application.yml:/seata-server/resources/application.yml" \
        seataio/seata-server

docker安装sqlserver

docker pull mcr.microsoft.com/mssql/server:2017-latest

mkdir /usr/docker/sqlserver/data

sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=jy@19911001" \
-p 1433:1433 --name sqlserver2017 \
-v /usr/docker/sqlserver/data:/var/opt/mssql \
-d mcr.microsoft.com/mssql/server:2017-latest

Docker安装aerospike

docker run -tid   \

-v /opt/aerospike/data:/opt/aerospike/data \

-v /opt/aerospike/usr/lua:/opt/aerospike/usr/udf/lua \

-v /opt/aerospike/config:/opt/aerospike/etc \

--name aerospike1  \

-p 3000:3000 \

-p 3001:3001 \ 

-p 3002:3002 \ 

aerospike/aerospike-server /usr/bin/asd --foreground \

--config-file /opt/aerospike/etc/aerospike.conf