1. Mysql-持久化数据
- 拉取mysql:
docker pull mysql:8.0.33
- 创建临时容器:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.33
- 复制配置文件和日志文件到本地
mkdir -p /data/mysql/data mkdir -p /data/mysql/conf mkdir -p /data/mysql/log docker cp mysql:/etc/mysql/conf.d /data/mysql/conf docker cp mysql:/var/log /data/mysql/log
- 删除临时容器
docker stop mysql
docker rm mysql
- 创建容器
docker run -d \ --name mysql \ --restart=always \ -p 3306:3306 \ -v /data/mysql/data:/var/lib/mysql \ -v /data/mysql/conf:/etc/mysql/conf.d \ -v /data/mysql/log:/var/log \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:8.0.33
- 创建数据库nacos,
create database nacos;
将Nacos下的conf文件下的mysql-schema.sql导入nacos数据库 - 创建数据库xxl_job,
create database xxl_job;
将tables_xxl-job.sql导入xxl-job数据库 - 对外开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload
- 所需依赖
<!-- Mysql --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> </dependency>
- 配置文件
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.47.129:3306/database username: root password: 123456
2. Nacos-配置管理中心
- 拉取nacos:
docker pull nacos/nacos-server:v2.2.3
- 创建临时容器:
docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:v2.2.3
- 复制配置文件到本地
mkdir -p /data/nacos/data mkdir -p /data/nacos/conf mkdir -p /data/nacos/logs docker cp nacos:/home/nacos/data /data/nacos docker cp nacos:/home/nacos/conf /data/nacos docker cp nacos:/home/nacos/logs /data/nacos
- 删除临时容器:
docker stop nacos
docker rm nacos
- 创建容器并关联数据库,访问http://192.168.47.129:8848/nacos
docker run -d \ --name nacos \ --restart=always \ -p 8848:8848 \ -v /data/nacos/conf:/home/nacos/conf \ -v /data/nacos/logs:/home/nacos/logs \ -v /data/nacos/data:/home/nacos/data \ -e MODE=standalone \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=192.168.47.129 \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=123456 \ -e MYSQL_SERVICE_DB_NAME=nacos \ -e TIME_ZONE='Asia/Shanghai' \ nacos/nacos-server:v2.2.3
- 或者修改/data/nacos/conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://192.168.47.129:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=123456
- 对外开放8848端口
firewall-cmd --zone=public --add-port=8848/tcp --permanent firewall-cmd --reload
- 所需依赖
<!-- Nacos注册中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- Nacos配置中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!-- Bootstrap(使用bootstrap.yml配置文件时) --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <!-- LoadBalancer(Gateway用到负载均衡时) --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>
- 配置文件
spring: application: name: service-name # 服务名称 cloud: nacos: server-addr: 192.168.47.129:8848 # nacos地址 discovery: # nacos注册中心 namespace: ${spring.profiles.active} group: group-name config: # nacos配置中心 namespace: ${spring.profiles.active} # 主配置,data-id为service-name-${spring.profiles.active}.yaml group: group-name file-extension: yaml refresh-enabled: true extension-configs: # 扩展配置 - data-id: extension-service-${spring.profiles.active}.yaml # 三部分组成:服务名-开发环境.后缀 group: group-name refresh: true shared-configs: # 共享配置 - data-id: swagger-${spring.profiles.active}.yaml group: group-common refresh: true profiles: # 开发环境,默认为dev active: dev
bootstrap.yml(父上下文对象) > nacos(主配置 > 扩展配置 > 共享配置)> 本地配置(命令行参数 > application.properties > application.yml > application.yaml)
可以在nacos中设置本地配置优先:spring: cloud: config: override-none: true # 配置本地文件配置优先
![](https://img-blog.csdnimg.cn/faa6ee67b4b14d079cc085989735ee15.png#pic_center)
3. Minio-分布式文件系统
- 拉取minio:
docker pull bitnami/minio:latest
- 创建挂载目录,并更改权限
mkdir -p /data/minio/data chmod 777 /data/minio/data
- 运行并挂载minio:9000端口用于接口调用,9001用于浏览器访问
docker run -d \ --name minio \ --restart=always \ -p 9000:9000 \ -p 9001:9001 \ -v /data/minio/data:/data \ -v /etc/localtime:/etc/localtime \ -e MINIO_ROOT_USER="minio_root" \ -e MINIO_ROOT_PASSWORD="minio_123456" \ bitnami/minio:latest
- 对外开放9000、9001端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent firewall-cmd --zone=public --add-port=9001/tcp --permanent firewall-cmd --reload
- 所需依赖
<!-- minio --> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.5.3</version> </dependency>
- 配置文件
minio: endpoint: http://192.168.47.129:9000 accessKey: minio_root secretKey: minio_123456 bucket: files: mediafiles # 桶1,可通过@Value("${minio.bucket.files}")获取 videofiles: video
- SDK官网示例
4. XXL-JOB 分布式任务调度
- 拉取xxl-job:
docker pull xuxueli/xxl-job-admin:2.4.0
- 运行容器,默认用户名和密码:admin/123456
docker run -d \ --name xxl-job-admin \ --restart=always \ -p 8080:8080 \ -e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.47.129:3306/xxl_job \ --spring.datasource.username=root \ --spring.datasource.password=123456 \ --xxl.job.accessToken=default_token" \ xuxueli/xxl-job-admin:2.4.0
- 对外开放8088端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload
- 所需依赖
<!-- xxl-job --> <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.4.0</version> </dependency>
- 配置文件
xxl: job: admin: addresses: http://192.168.47.129:8080/xxl-job-admin executor: appname: executor-service # 执行器应用名 address: ip: port: 9999 # 执行器端口号 logpath: /data/applogs/xxl-job/jobhandler logretentiondays: 30 accessToken: default_token
- xxl-job官网
5. Elasticsearch-分布式搜索引擎
- 拉取Elasticsearch与Kibana:
docker pull elasticsearch:8.7.0
docker pull kibana:8.7.0
- 运行容器,–privileged(授予root权限)、-e(内存、单点模式、不设置密码)、9200端口是对外(http),9300端口是对内(集群,tcp),-v(docker数据卷挂载;之前的都是目录挂载,宿主机目录或文件会覆盖容器目录或文件)
docker run -d \ --name elasticsearch \ --restart=always \ -p 9200:9200 \ -p 9300:9300 \ --privileged=true \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -e "discovery.type=single-node" \ -e "xpack.security.enabled=false" \ -e "xpack.security.transport.ssl.enabled=false" \ -v es-data:/usr/share/elasticsearch/data \ -v es-config:/usr/share/elasticsearch/config \ -v es-plugins:/usr/share/elasticsearch/plugins \ elasticsearch:8.7.0 docker run -d \ --name kibana \ --restart=always \ -p 5601:5601 \ -e ELASTICSEARCH_HOSTS=http://192.168.47.129:9200 \ kibana:8.7.0
- 对外开放9200、9300、5601端口,通过http://192.168.142.128:5601/可视化,虚拟机ip+5601端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent firewall-cmd --zone=public --add-port=9300/tcp --permanent firewall-cmd --zone=public --add-port=5601/tcp --permanent firewall-cmd --reload
- 在线安装ik分词器和py分词器(进入容器内部在线安装)
(1) 进入elasticsearch容器内部 docker exec -it elasticsearch /bin/bash (2) 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.7.0/elasticsearch-analysis-ik-8.7.0.zip ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v8.7.0/elasticsearch-analysis-pinyin-8.7.0.zip (3) 退出 exit (4) 重启容器 docker restart elasticsearch
- 离线安装ik分词器和py分词器(进入es-plugins数据卷所在目录,通过
docker volume inspect es-plugins
查看,将下载的压缩包分别解压到ik文件夹和py文件夹,上传到数据卷所在目录即可)
6. Redis
- 拉取redis:
docker pull redis:7.0.11
- 在redis官网下载对应版本,复制其中的redis.conf到/data/redis目录下
- 编辑配置文件redis.conf
mkdir -p /data/redis/data vim /data/redis/redis.conf daemonize yes # 修改,默认为no,可以通过/进入底行模式,按N查找下一个找到位置,打开守护线程 requirepass 123456 # 修改,取消注释,默认为oobared,修改密码为123456 protected-mode no # 修改,关闭保护模式,默认为yes bind 127.0.0.1 -::1 # 注释掉,或改为0.0.0.0,使redis可以外部访问 appendonly yes # 修改,开启redis持久化,默认为no
- 运行容器
docker run -d \ --name redis \ --restart=always \ -p 6379:6379 \ -v /data/redis/redis.conf:/etc/redis/redis.conf \ -v /data/redis/data:/data \ redis:7.0.11 \ redis-server /etc/redis/redis.conf
- 对外开放6379端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent firewall-cmd --reload
- 所需依赖
<!-- Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
- 配置文件
spring: data: redis: host: 192.168.47.129 port: 6379 password: 123456 jedis: pool: max-active: 8 # 最大连接数 max-wait: 1ms # 连接池最大阻塞等待时间 max-idle: 4 # 连接池中的最大空闲连接 min-idle: 0 # 连接池中的最小空闲连接
7. RabbitMQ
- 拉取RabbitMQ:
docker pull rabbitmq:3.11-management
- 创建文件挂载目录:
mkdir -p /data/rabbitmq/data
- 运行容器,hostname(主机名)、端口15672用于UI界面管理,端口5672用于发送和接收消息
docker run -d \ --name rabbitmq \ --hostname rabbitmq \ --restart=always \ -p 15672:15672 \ -p 5672:5672 \ -e RABBITMQ_DEFAULT_USER=superm \ -e RABBITMQ_DEFAULT_PASS=123456 \ -v /data/rabbitmq/data:/var/lib/rabbitmq \ rabbitmq:3.11-management
- 对外开放15672、5672端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent firewall-cmd --zone=public --add-port=5672/tcp --permanent firewall-cmd --reload
- 所需依赖
<!-- Spring-AMQP --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>