Docker 单机快速部署大数据各组件
文章目录
- 一、Spark
- 1.1 NetWork 网络
- 1.2 安装 Java8
- 1.3 安装 Python 环境
- 1.4 Spark 安装部署
- 二、Kafka
- 三、StarRocks
- 四、Redis
- 五、Rabbitmq
- 六、Emqx
- 6.1 前言
- 6.2 安装部署
- 七、Flink
- 八、Nacos
- 九、Nginx
一、Spark
1.1 NetWork 网络
docker network lsdocker network create --driver=bridge hadoop-network
1.2 安装 Java8
下载基础镜像:
docker pull centos:7
1.3 安装 Python 环境
Miniconda3 安装:
root@hadoop:~# apt install wgetroot@hadoop:~# wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shroot@hadoop:~# bash Miniconda3-latest-Linux-x86_64.shroot@hadoop:~# source .bashrc
(base) root@hadoop:~# python
Python 3.12.4 | packaged by Anaconda, Inc. | (main, Jun 18 2024, 15:12:24) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
可参考:Miniconda安装教程
1.4 Spark 安装部署
上传安装包:
docker cp spark-2.4.0-bin-hadoop2.7.tgz ubuntu-java8:/usr/localdocker cp scala-2.11.12.tgz ubuntu-java8:/usr/local
解压:
# 解压
tar -zxf spark-2.4.0-bin-hadoop2.7.tgz
tar -zxf scala-2.11.12.tgz# 删除
rm -rf spark-2.4.0-bin-hadoop2.7.tgz
rm -rf scala-2.11.12.tgz
修改配置(要运行本地模式的话可忽略):
cd /usr/local/spark-2.4.0-bin-hadoop2.7/conf
cp spark-env.sh.template spark-env.sh
vim spark-env.sh# 添加内容
export JAVA_HOME=/usr/java/jdk1.8.0_212
export SCALA_HOME=/usr/local/scala-2.11.12
export SPARK_HOME=/usr/local/spark-2.4.0-bin-hadoop2.7
export HADOOP_INSTALL=/usr/local/hadoop-3.0.0
export HADOOP_CONF_DIR=$HADOOP_INSTALL/etc/hadoop
注:默认没有 vi 和 vim 命令,需要安装,安装命令:apt install vim
环境变量:
root@hadoop:~# vim .bashrc
# SPARK_HOME
export SPARK_HOME=/usr/local/spark-2.4.0-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH
测试命令:
spark-submit --master local[*] --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.11-2.4.0.jar 20
二、Kafka
下载镜像:
docker pull bitnami/kafka:3.6.0
启动容器:
docker run -d --name kafka \
-p 9092:9092 \
--network hadoop-network \
-e KAFKA_ADVERTISED_PORT=9092 \
-e KAFKA_ENABLE_KRAFT=yes \
-e KAFKA_CFG_PROCESS_ROLES=broker,controller \
-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
-e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
-e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@127.0.0.1:9093 \
-e KAFKA_KRAFT_CLUSTER_ID=jkUlhzQmQkic54LMxrB1oV \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_BROKER_ID=1 \
-e KAFKA_CFG_NODE_ID=1 \
bitnami/kafka:3.6.0-d:选项以守护程序模式运行容器。
--name kafka:为容器指定一个名称。
-p 9092:9092:将容器中的 9092 端口(后面的)映射到主机的 9092 端口(前面的)。
要验证 Kafka 是否正在运行,请使用以下命令检查容器的日志:
docker logs kafka。。。
[2024-09-25 09:02:34,287] INFO Kafka version: 3.6.0 (org.apache.kafka.common.utils.AppInfoParser)
[2024-09-25 09:02:34,287] INFO Kafka commitId: 60e845626d8a465a (org.apache.kafka.common.utils.AppInfoParser)
[2024-09-25 09:02:34,287] INFO Kafka startTimeMs: 1727254954286 (org.apache.kafka.common.utils.AppInfoParser)
[2024-09-25 09:02:34,289] INFO [KafkaRaftServer nodeId=1] Kafka Server started (kafka.server.KafkaRaftServer)
创建主题:
docker exec -it kafka /bin/bash# data解析
kafka-topics.sh --create --topic xiaoqiang-result-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1kafka-topics.sh --bootstrap-server localhost:9092 --list
三、StarRocks
集群部署参考文档:通过 docker-compose 快速部署 StarRocks 保姆级教程
下载官方镜像:
docker pull starrocks/allin1-ubuntu:3.1.13
运行容器:
docker run -p 9030:9030 -p 8030:8030 -p 8040:8040 -itd --name starrocks starrocks/allin1-ubuntu:3.1.13# 进入容器
docker exec -it starrocks mysql -P 9030 -h 127.0.0.1 -u root
四、Redis
下载镜像:
docker pull redis
编辑配置文件 /home/bigdata/redis/redis.conf
,使 Redis 支持数据持久化:
protected-mode noport 6379tcp-backlog 511
#redis密码 强烈建议设置复杂一些
requirepass ABCabc123timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yessave 900 1
save 300 10
save 60 10000stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdbdir ./replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay noreplica-priority 100lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush noappendonly yesappendfilename "appendonly.aof"no-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mbaof-load-truncated yes
aof-use-rdb-preamble yeslua-time-limit 5000
slowlog-max-len 128notify-keyspace-events ""hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512zset-max-ziplist-entries 128
zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096
stream-node-max-entries 100activerehashing yes
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
启动容器:
sudo docker run --restart=always \
--log-opt max-size=100m \
--log-opt max-file=2 \
-p 6379:6379 \
--name redis \
-v /home/bigdata/redis/redis.conf:/etc/redis/redis.conf \
-v /home/bigdata/redis/data:/data \
-itd redis:latest redis-server /etc/redis/redis.conf \
--appendonly yes \
--requirepass qwe123
参数的意义:
- 【 --restart=always】 开机启动,失败也会一直重启;
- 【–log-opt max-size=100m】意味着一个容器日志大小上限是100M;
- 【–log-opt max-file=2】意味着一个容器有2个日志,分别是id+.json、id+1.json;
- 【-p 6379:6379】 将宿主机6379端口与容器内6379端口进行映射;
- 【-v】 将宿主机目录或文件与容器内目录或文件进行挂载映射;
- 【-itd】
i:以交互模式运行容器,通常与 -t 同时使用;
t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
d:表示后台启动redis; - 【–name】 给容器命名;
- 【–appendonly yes】 开启redis 持久化;
- 【–requirepass 123456】 强烈建议设置密码,并且将密码设置为高强度复杂;
- 【redis-server /etc/redis/redis.conf】 以配置文件启动redis,加载容器内的conf文件;
查看启动日志(是否正常启动):
docker logs redis # 后面跟容器名 or 容器ID 都可以
docker logs --since 30m redis # --since 30m 是查看此容器30分钟之内的日志情况。
查看本机 Docker 运行的容器:
docker ps -a | grep redis
查看 redis 命令是否正常:
docker exec -it redis redis-cli
测试连接:
127.0.0.1:6379> select 1
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set k1 v1
OK
127.0.0.1:6379[1]> get k1
"v1"
127.0.0.1:6379[1]>
参考:Docker安装redis(保姆级教程&图文并茂)
五、Rabbitmq
拉取 RabbitMQ 镜像:
docker pull rabbitmq:3.8-management
创建目录,授权文件夹
# 创建目录
mkdir -p /data/rabbitmq/{conf,data,log}
# 授权文件夹
chmod -R 777 /data/rabbitmq/{conf,data,log}
创建 RabbitMQ 容器:
docker run --restart=always --name rabbitmq \
-p 15672:15672 -p 5672:5672 \
-e RABBITMQ_DEFAULT_USER=rabbit \
-e RABBITMQ_DEFAULT_PASS=rabbit \
-v /data/rabbitmq/data:/var/lib/rabbitmq \
-v /data/rabbitmq/conf:/etc/rabbitmq \
-v /data/rabbitmq/log:/var/log/rabbitmq \
-d rabbitmq:3.8-management
相关参数解释:
- docker run: 启动一个新的 Docker 容器。
- –restart=always: 容器意外退出或 Docker 服务重启,Docker 将始终自动重新启动该容器。
- –name rabbitmq: 给容器命名为 rabbitmq,以便于管理和引用该容器。
- -p 15672:15672 -p 5672:5672: 端口映射。将主机的 5672 端口映射到容器的 5672 端口。
- -e RABBITMQ_DEFAULT_USER=rabbit: 指定默认的 RabbitMQ 用户名为 rabbit。
- -e RABBITMQ_DEFAULT_PASS=rabbit: 指定默认的 RabbitMQ 密码为 rabbit。
- -v /data/rabbitmq/data:/var/lib/rabbitmq: 数据持久化
- -v /data/rabbitmq/conf:/etc/rabbitmq: 配置文件持久化
- -v /data/rabbitmq/log:/var/log/rabbitmq: 日志文件持久化
- -d: 容器将在后台运行,而不是占用当前的终端会话。
查看 RabbitMQ 启动日志:docker logs -f rabbitmq
访问 RabbitMQ 控制台:
服务器IP / 虚拟机静态IP : 15672
例如我的控制台地址为 : http://172.29.32.233:15672/
访问发现无法访问,开启控制台管理 : 进入 RabbitMQ 容器后开启控制台管理:
# 进入 RabbitMQ 容器
docker exec -it rabbitmq bash
# 开启控制台管理
rabbitmq-plugins enable rabbitmq_management
登录 RabbitMQ 控制台:
进入 RabbitMQ 容器,添加管理员账号,授权账号管理员权限,查看账号列表:
# 进入 RabbitMQ 容器
docker exec -it rabbitmq bash
# 添加管理员账号
rabbitmqctl add_user 用户名 密码
# 授权账号管理员权限
rabbitmqctl set_user_tags 用户名 administrator
# 查看账号列表
rabbitmqctl list_users
重启 RabbitMQ 容器,再次访问,成功访问 !
# 重启容器
docker restart rabbitmq
参考:
Docker 部署 RabbitMQ (图文并茂超详细)
Docker之安装RabbitMq_docker 安装rabbitmq
六、Emqx
6.1 前言
什么是 MQTT?
- MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)
- 是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议
- 关键词:通讯协议
什么是EMQ(emqx的简称)?
- EMQ X Broker 是基于高并发的 Erlang/OTP 语言平台开发,支持百万级连接和分布式集群架构,发布订阅模式的开源 MQTT 消息服务器。
- 关键词:消息服务器
端口 | 描述 |
---|---|
18083 | web端后台管理页端口 |
1883 | MQTT TCP 端口 |
8883 | MQTT TCP TLS/SSL 端口 |
8083 | HTTP and WebSocket 端口 |
8084 | HTTPS and WSS 端口 |
8080 | MGMT API 端口 |
MGMT 端口 :MGMT是网络管理端口,可以直接用网线连接,登陆进防火墙以网页模式管理。
6.2 安装部署
获取 Docker 镜像:
docker pull emqx/emqx-enterprise:5.7.1
运行以下命令启动 Docker 容器:
docker run -d --name emqx-enterprise -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx-enterprise:5.7.1
如果需要持久 Docker 容器 ,请将以下目录挂载到容器外部,这样即使容器被删除数据也不会丢失:
/opt/emqx/data
/opt/emqx/log
启动容器并挂载目录:(挂载失败,后续排查)
docker run -d --name emqx-enterprise \-p 1883:1883 -p 8083:8083 \-p 8084:8084 -p 8883:8883 \-p 18083:18083 \-v $PWD/data:/opt/emqx/data \-v $PWD/log:/opt/emqx/log \emqx/emqx-enterprise:5.7.1
参考:
通过 Docker 运行 EMQX
docker实现搭建emqx服务
EMQX的docker部署与使用(mqtt)
七、Flink
拉取镜像:
docker pull flink:1.17.2
编辑 docker-compose.yml
文件:
version: "3"
services:jobmanager:image: flink:1.17.2expose:- "6123"ports:- "8081:8081"command: jobmanagerenvironment:- JOB_MANAGER_RPC_ADDRESS=jobmanagertaskmanager:image: flink:1.17.2expose:- "6121"- "6122"depends_on:- jobmanagercommand: taskmanagerlinks:- "jobmanager:jobmanager"environment:- JOB_MANAGER_RPC_ADDRESS=jobmanagerscale: 3 #指定taskmanager数量
在文件夹路径下执行:
docker-compose up -d
通过在浏览器的地址栏中输入 localhost:8081
即可打开 Flink 的 UI 页面:
参考:
手把手教你在Docker中如何使用flink,实现将mySQL数据同步写入kafka中
Docker下的Flink
八、Nacos
拉取镜像:
docker pull nacos/nacos-server:v2.1.1
创建目录,创建容器,拷贝文件,授权文件,删除容器:
# 创建目录
mkdir -p /data/nacos/{conf,logs,data}# 创建容器
docker run -p 8848:8848 --name nacos -d nacos/nacos-server:v2.1.1# 拷贝文件
docker cp nacos:/home/nacos/conf /data/nacos
docker cp nacos:/home/nacos/data /data/nacos
docker cp nacos:/home/nacos/logs /data/nacos# 授权文件
chmod 777 /data/nacos/{conf,logs,data}# 删除容器
docker rm -f nacos
参考:
Docker 部署 Nacos (图文并茂超详细)
九、Nginx
拉取镜像:
docker pull nginx:1.16.1
首先测试下 nginx 镜像是否可用,使用 docker run -d --name nginx -p 80:80 nginx:1.16.1
创建并启动 nginx 容器:
- -d 指定容器以守护进程方式在后台运行
- –name 指定容器名称,此处我指定的是mynginx
- -p 指定主机与容器内部的端口号映射关系,格式 -p
- [宿主机端口号]:[容器内部端口],此处我使用了主机80端口,映射容器80端口
- 0839 是nginx的镜像IMAGE ID前4位
页面展示如下,那么恭喜你 Nginx 已经成功安装并运行啦!
参考:
使用docker安装nginx
手把手教你在Docker中安装Nginx(图文超详细)
相关文章:

Docker 单机快速部署大数据各组件
文章目录 一、Spark1.1 NetWork 网络1.2 安装 Java81.3 安装 Python 环境1.4 Spark 安装部署 二、Kafka三、StarRocks四、Redis五、Rabbitmq六、Emqx6.1 前言6.2 安装部署 七、Flink八、Nacos九、Nginx 一、Spark 1.1 NetWork 网络 docker network lsdocker network create -…...

CSS笔记基础篇01——选择器、文字控制属性、背景属性、显示模式、盒子模型
黑马程序员视频地址: 前端Web开发HTML5CSS3移动web视频教程https://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodeshttps://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d3666…...
pytest全局配置文件pytest.ini
pytest.ini 改变 pytest 的默认行为,一般放在项目的根目录,不能包含中文符号。不管是主函数模式运行,命令行模式运行,都会去读取这个全局配置文件。 [pytest] ;配置命令行参数,用空格进行分隔。addopts 中的选项会被命…...

PyTest自学-认识PyTest
1 PyTest自学-认识PyTest 1.1 PyTest可以用来做什么? PyTest是一个自动化测试框架,支持单元测试和功能测试,有丰富的插件,如,pytest-selemium, pytest-html等。 1.2 安装pytest 使用pip install -U pytest。 1.3 py…...

【专题】为2025制定可付诸实践的IT战略规划报告汇总PDF洞察(附原数据表)
原文链接:https://tecdat.cn/?p39055 在当今瞬息万变的商业环境中,制定有效的 IT 战略规划对于企业的成功与可持续发展至关重要。本报告深入探讨了制定 IT 战略规划的关键活动,旨在为企业和决策者提供全面且实用的指导。 Gartner的《为202…...

自旋锁与CAS
上文我们认识了许许多多的锁,此篇我们的CAS就是从上文的锁策略开展的新概念,我们来一探究竟吧 1. 什么是CAS? CAS: 全称Compare and swap,字⾯意思:“比较并交换”,⼀个CAS涉及到以下操作: 我们假设内存中…...
数组-二分查找
目录 算法思想: 实践: 备注: 二分查找是一种高效的查找算法,适用于在 有序数组 或列表中快速定位目标元素的索引。 重要事情说三遍:使用前提:数组有序,无重复,如果数组未排序&am…...
如何使用 Python 进行文件读写操作?
大家好,我是 V 哥。今天的内容来介绍 Python 中进行文件读写操作的方法,这在学习 Python 时是必不可少的技术点,希望可以帮助到正在学习 python的小伙伴。 以下是 Python 中进行文件读写操作的基本方法: 一、文件读取࿱…...
springcloud中的Feign调用
目录 一、基础应用 1.feign使用 1.增加feign依赖 2.编写feign接口 3.启用feign 4.调试 5.可能出现的异常信息 1.404 可能原因: 2.503 可有原因: 2.feign自定义配置 1.创建Feign配置类 2.feign接口 3.调试结果 3.feign多参数请求 Feign是Netflix开发的声明…...
【部署】将项目部署到云服务器
目录 1.获得服务器 2.连接到云服务器 3.配置环境 3.1.Java(运行后端所需) 3.2.MySQL数据库 3.3.Nginx(运行前端所需) 3.4. Node.js(构建前端所需) 4.打包项目 4.1.打包后端项目 4.2.打包前端项目…...

2024年AI大模型技术年度总结与应用实战:创新与突破并进
前言 回顾2024年,我一共发布了286篇博文,粉丝数也达到了43000多。这一年里,我收获颇丰,始终坚持AI大模型的研究方向,并且积极开展大模型的实战应用,也取得了一系列令人振奋的突破。 在286篇博文中&#…...

docker离线安装及部署各类中间件(x86系统架构)
前言:此文主要针对需要在x86内网服务器搭建系统的情况 一、docker离线安装 1、下载docker镜像 https://download.docker.com/linux/static/stable/x86_64/ 版本:docker-23.0.6.tgz 2、将docker-23.0.6.tgz 文件上传到服务器上面,这里放在…...

SuperdEye:一款基于纯Go实现的间接系统调用执行工具
关于SuperdEye SuperdEye是一款基于纯Go实现的间接系统调用执行工具,该工具是TartarusGate 的修订版,可以利用Go来实现TartarusGate 方法进行间接系统调用。 该工具的目标是为了扫描挂钩的NTDLL并检索Syscall编号,然后使用它来执行间接系统调…...

PCL 新增自定义点类型【2025最新版】
目录 一、自定义点类型1、前言2、定义方法3、代码示例二、合并现有类型三、点云按时间渲染1、CloudCompare渲染2、PCL渲染博客长期更新,本文最近更新时间为:2025年1月18日。 一、自定义点类型 1、前言 PCL库自身定义了很多点云类型,但是在使用的时候时如果要使用自己定义的…...

Docker导入镜像
使用命令行进行处理: docker load < onething1_wxedge.tar如下图所示 查看状态 docker images...

PyTorch使用教程(9)-使用profiler进行模型性能分析
1、简介 PyTorch Profiler是一个内置的性能分析工具,可以帮助开发者定位计算资源(如CPU、GPU)的瓶颈,从而更好地优化PyTorch程序。通过捕获和分析GPU的计算、内存和带宽利用情况,能够有效识别并解决性能瓶颈。 2、原…...

SpringBoot中使用MyBatis-Plus详细介绍
目录 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 2.定义Mapper(也叫dao)层的接口 3.MyBatis-Plus中常用注解 4. 使用MyBatis-Plus时要做如下配置 5.条件构造器 Wrapper 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 M…...

PCL 部分点云视点问题【2025最新版】
目录 一、问题概述二、解决方案1、软件实现2、代码实现三、调整之后博客长期更新,本文最近更新时间为:2025年1月18日。 一、问题概述 针对CloudCompare软件处理过的pcd格式点云,在使用PCL进行特征点提取、配准等实验中最终显示结果出现点云位置偏差较大的问题,本博客给出解…...

【Linux】常见指令(三)
Linux常见指令 01.nano02.cat03.cp04.mv 我的Linux专栏:【Linux】 本节Linux指令讲解的基本框架如下: 大家可以根据自己的需求,自行进行跳转和学习! 01.nano nano Linux 系统中一款简单易用的命令行文本编辑器,适合…...
第5章:Python TDD定义Dollar对象相等性
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...