目录
安装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