Docker 常用服务 安装使用 教程
Docker安装常用服务
1、 安装mysql
# 1.拉取mysql镜像到本地docker pull mysql:tag (tag不加默认最新版本)# 2.运行mysql服务docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:tag --没有暴露外部端口外部不能连接docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:tag --暴露外部端口外部能连接(前提是防火墙开放暴露的端口并且端口不能冲突)# 3.进入mysql容器docker exec -it 容器名称|容器id bash# 4.外部查看mysql日志docker logs 容器名称|容器id# 5.mysql容器启动配置docker run --name mysql -v /root/mysql/data:/var/lib/mysql -v /home/mysql/my.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:tag配置项说明:
-v /root/mysql/data:/var/lib/mysql:挂载数据 -v /home/mysql/my.cnf:/etc/my.cnf:挂载mysql配置文件(根据自己容器内的配置位置,可以进入容器使用find / -name my.cnf 查询配置文件所在位置) -e MYSQL_ROOT_PASSWORD=root:设置root账号的密码# 6.通过其他客户端访问 如在window系统|macos系统使用客户端工具访问可以实现数据的备份(客户端工具方式)# 7.将mysql数据库备份为sql文件(命令方式)docker exec mysql|容器id sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql --导出全部数据docker exec mysql sh -c 'exec mysqldump --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql --导出指定库数据docker exec mysql sh -c 'exec mysqldump --no-data --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql --导出指定库数据不要数据# 9.执行sql文件到mysql中docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /root/xxx.sql
2、 安装Redis服务
# 1.在docker hub搜索redis镜像docker search redis# 2.拉取redis镜像到本地docker pull redis
# 3.挂载配置文件(1)创建配置文件touch redis.conf(2)修改配置文件
vim redis.conf
(3)添加如下配置
bind 0.0.0.0 ----------开启远程访问appendonly yes ---------开启持久化appendfilename "appendonly.aof" ----------持久化文件名称requirepass 123456 ----------设置密码# 4.启动redis服务运行容器(基础)docker run --name redis --network 3c -p 6379:6379 -v /home/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /home/redis/db:/data --restart=always -d redis:5.0.10 redis-server /usr/local/etc/redis/redis.conf配置项说明:
- -v /home/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:挂载配置文件
- -v /home/redis/db:/data:挂载数据实现持久化
- --restart=always:设置redis容器随docker启动而自启动
- redis-server /usr/local/etc/redis/redis.conf:指定redis在docker中的配置文件路径
# 5.查看启动日志docker logs -t -f 容器id|容器名称# 6.进入容器内部查看docker exec -it 容器id|名称 bash
3、 安装Nginx
# 1.在docker hub搜索nginxdocker search nginx# 2.拉取nginx镜像到本地(如下下载没有指定版本默认下载最新版本)[root@localhost ~]# docker pull nginxUsing default tag: latestlatest: Pulling from library/nginxafb6ec6fdc1c: Pull completeb90c53a0b692: Pull complete11fa52a0fdc0: Pull completeDigest: sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097Status: Downloaded newer image for nginx:latestdocker.io/library/nginx:latest# 3.启动nginx容器(基础)docker run --name nginx01 -p 80:80 -d nginx:1.19.10# 4.进入容器docker exec -it nginx01 bash查找nginx目录:find / -name 'nginx' -------------------关于nginx的所有目录find / -name 'nginx.conf' --------------nginx的配置文件所在目录(/etc/nginx/nginx.conf)find / -name 'index.html' --------------nginx的index页面所在目录也是nginx的资源目录(/usr/share/nginx/html/index.html)# 5.然后退出容器到宿主机exit# 6.复制配置文件到宿主机docker cp nginx01(容器id|容器名称):/etc/nginx/nginx.conf 宿主机目录例如:docker cp nginx-test:/etc/nginx/nginx.conf ./# 7.挂在nginx配置以及html到宿主机外部docker run --name nginx02 -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/html:/usr/share/nginx/html -p 80:80 -d nginx:1.19.10

4、 安装Tomcat
# 1.在docker hub搜索tomcatdocker search tomcat# 2.下载tomcat镜像docker pull tomcat# 3.运行tomcat镜像docker run -p 8080:8080 -d --name mytomcat tomcat# 4.进入tomcat容器docker exec -it mytomcat bash# 5.将webapps目录挂载在外部docker run -p 8080:8080 -v /root/webapps:/usr/local/tomcat/webapps -d --name mytomcat tomcat#注意:如果挂载server.xml配置文件,挂载的路径要精确到server.xml文件#如下示例:docker run --name hkht-tomcat -p 8081:8081 -v /data/hkht/tomcat/webapps:/usr/local/tomcat/webapps -v /data/hkht/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml -d tomcat:8.0-jre8#这里再注意:下面的图片中挂载配置文件是直接挂载到conf文件,暂时不知道什么原因,但是在实践中挂载到conf不精确到配置文件,访问前端资源是无法访问的(前后端不分离的web项目)。#还有就是这里选用tomcat的8.0-jre8镜像而不是单独的版本号8.0,因为没有单独的下载jdk镜像,如果要是用8.0需采用dockerfile进行打包,我是直接下载了包含jre的tomcat,这样就可以运行项目了(前后端不分离的web项目)。

5、 安装MongoDB数据库
# 1.运行mongDBdocker run -d -p 27017:27017 --name mymongo mongo ---无须权限docker logs -f mymongo ---查看mongo运行日志# 2.进入mongodb容器docker exec -it mymongo bash直接执行mongo命令进行操作# 3.常见具有权限的容器docker run --name mymongo -p 27017:27017 -d mongo --auth# 4.进入容器配置用户名密码mongouse admin 选择admin库db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]}) //创建用户,此用户创建成功,则后续操作都需要用户认证exit# 5.将mongoDB中数据目录映射到宿主机中docker run -d -p 27017:27017 -v /root/mongo/data:/data/db --name mymongo mongo
6、 安装ElasticSearch
- 注意: 调高JVM线程数限制数量
0.拉取镜像运行elasticsearch
# 1.dockerhub 拉取镜像docker pull elasticsearch:6.4.2# 2.查看docker镜像docker images# 3.运行docker镜像docker run -p 9200:9200 -p 9300:9300 elasticsearch:6.4.2
- 启动出现如下错误
-
1. 预先配置
# 1.在centos虚拟机中,修改配置sysctl.confvim /etc/sysctl.conf# 2.加入如下配置vm.max_map_count=262144# 3.启用配置sysctl -p注:这一步是为了防止启动容器时,报出如下错误:bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
2.启动EleasticSearch容器
# 0.复制容器中data目录到宿主机中docker cp 容器id:/usr/share/share/elasticsearch/data /root/es# 1.运行ES容器 指定jvm内存大小并指定ik分词器位置docker run -d --name es -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms128m -Xmx128m" -v /root/es/plugins:/usr/share/elasticsearch/plugins -v /root/es/data:/usr/share/elasticsearch/data elasticsearch:6.4.2
3.安装IK分词器
# 1.下载对应版本的IK分词器wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.2/elasticsearch-analysis-ik-6.4.2.zip# 2.解压到plugins文件夹中yum install -y unzipunzip -d ik elasticsearch-analysis-ik-6.4.2.zip# 3.添加自定义扩展词和停用词cd plugins/elasticsearch/configvim IKAnalyzer.cfg.xml<properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典 --><entry key="ext_dict">ext_dict.dic</entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords">ext_stopwords.dic</entry></properties># 4.在ik分词器目录下config目录中创建ext_dict.dic文件 编码一定要为UTF-8才能生效vim ext_dict.dic 加入扩展词即可# 5. 在ik分词器目录下config目录中创建ext_stopword.dic文件vim ext_stopwords.dic 加入停用词即可# 6.重启容器生效docker restart 容器id# 7.将此容器提交成为一个新的镜像docker commit -a="xiaochen" -m="es with IKAnalyzer" 容器id xiaochen/elasticsearch:6.4.2
4. 安装Kibana
# 1.下载kibana镜像到本地docker pull kibana:6.4.2# 2.启动kibana容器docker run -d --name kibana -e ELASTICSEARCH_URL=http://10.15.0.3:9200 -p 5601:5601 kibana:6.4.2


7.docker可视化工具
7.1 安装Portainer
[root@ubuntu1804 ~]#docker pull portainer/portainer# -d:后台启动,-p:映射端口,--name:容器名称,--restart=always:开机自启动,-v:挂在[root@ubuntu1804 ~]#docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer20db26b67b791648c2ef6aee444a5226a9c897ebcf0160050e722dbf4a4906e3[root@ubuntu1804 ~]#docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES20db26b67b79 portainer/portainer "/portainer" 5 seconds ago Up 4 seconds 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp portainer
7.2 登录和使用Portainer
用浏览器访问: http://localhost:9000


7.3 忘记admin的密码,重置并查看密码
#查看容器docker ps#查看容器详情docker inspect 容器id/名称#复制图中目录地址

#执行如下命令:docker run --rm -v 挂在目录地址:/data portainer /helper-reset-passworddocker run --rm -v /var/lib/docker/volumes/436d93252d9a382768eab7e9b7a29b8a10cbbf990257e37c9171eedc8df21c2e/_data:/data portainer/helper-reset-password

#然后重新启动portainerdocker start portainer#再次访问登录
8.安装Traefik
1、什么是Traefik
2、概念
- EntryPoints: 是进入 Traefik 的网络入口点。 它们定义将接收数据包的端口,以及是否监听 TCP 或 UDP。
- 路由器: 路由器负责将传入请求连接到可以处理它们的服务。
- 中间件: 附加到路由器,中间件可以在发送到您的服务之前修改请求或响应。
- 服务: 服务负责配置如何到达最终将处理传入请求的实际服务。


3、快速入门(使用docker-compose启动)
3.1、阿里云

3.1.2、添加域名解析

3.1.3、添加密钥和RAM角色


3.1.4、创建 docker-compose.yml文件
touch docker-compose.yml
3.1.5、创建本地网络
docker network create proxy
3.1.6、编写traefik的docker-compose.yml
version: '3.8'# 网络networks:proxy:external: true# 定义数据卷volumes:acme:services:# 服务名称traefik:# 镜像image: traefik:v2.5.4# 网络networks:- proxy# 端口ports:- "80:80"- "443:443"- "8080:8080"volumes:# 时区- /etc/timezone:/etc/timezone- /etc/localtime:/etc/localtime# 使Traefik 能够监听 Docker 事件- /var/run/docker.sock:/var/run/docker.sock# 生成持久化acme证书- acme:/etc/acme# 密钥位置env_file:- ./.alidns.envcommand:# 是否开启api的路由转发功能- --api.insecure=true# 底层代理的是什么- --providers.docker# 使用docker的那个网络- --providers.docker.network=proxy# 是否暴露docker- --providers.docker.exposedByDefault=false# web# web端口- --entryPoints.web.address=:80# 是否将http重定向- --entrypoints.web.http.redirections.entrypoint.permanent=true# 重定向的类别- --entrypoints.web.http.redirections.entrypoint.scheme=https# 重定向入口- --entrypoints.web.http.redirections.entrypoint.to=websecure# websecure# websecure端口- --entryPoints.websecure.address=:443# 是否自动申请证书- --entrypoints.websecure.http.tls=true# 证书申请厂商- --entrypoints.websecure.http.tls.certresolver=ali# 申请的主域名- --entrypoints.websecure.http.tls.domains[0].main=wuxinkeoo.top# 扫描该层级域名的所有域名- --entrypoints.websecure.http.tls.domains[0].sans=*.wuxinkeoo.top# Let's Encrypt# 申请厂商- --certificatesresolvers.ali.acme.dnschallenge.provider=alidns# 邮箱- --certificatesresolvers.ali.acme.email=wuxinke.oo@gmail.com# 申请证书存储位置- --certificatesresolvers.ali.acme.storage=/etc/acme/acme.json# 描述labels:# 是否交给traefik管理- "traefik.enable=true"# 路由入口- "traefik.http.routers.traefik.entrypoints=web, websecure"# 路由规则- "traefik.http.routers.traefik.rule=Host(`proxy.wuxinkeoo.top`)"# 路由端口- "traefik.http.services.traefik.loadbalancer.server.port=8080"
3.1.7、创建.alidns.env文件,然后填写厂商密钥
touch .alidns.env
3.1.8、将密钥和RAM角色信息编写到.alidns.env
ALICLOUD_ACCESS_KEY=LTAIxxxxxxxxxxxxxxxxxxxALICLOUD_SECRET_KEY=VMy3xxxxxxxxxxxxxxxxxxxALICLOUD_REGION_ID=root
3.1.9、启动
docker-compose up -d
3.1.10、访问

3.2、腾讯云



touch docker-compose.yml
docker network create proxy
touch .tencentcloud.env
TENCENTCLOUD_SECRET_ID=AKIxxxxxxxxxxxxxxxxTENCENTCLOUD_SECRET_KEY=rSpxxxxxxxxxxxxxxx
version: '3.8'# 网络networks:proxy:external: true# 定义数据卷volumes:acme:services:# 服务名称traefik:# 镜像image: traefik:v2.5.4# 网络networks:- proxy# 端口ports:- "80:80"- "443:443"- "8080:8080"volumes:# 时区- /etc/timezone:/etc/timezone- /etc/localtime:/etc/localtime# 使Traefik 能够监听 Docker 事件- /var/run/docker.sock:/var/run/docker.sock# 生成持久化acme证书- acme:/etc/acme# 密钥位置env_file:- ./.tencentcloud.envcommand:# 是否开启api的路由转发功能- --api.insecure=true# 底层代理的是什么- --providers.docker# 使用docker的那个网络- --providers.docker.network=proxy# 是否暴露docker- --providers.docker.exposedByDefault=false# web# web端口- --entryPoints.web.address=:80# 是否将http重定向- --entrypoints.web.http.redirections.entrypoint.permanent=true# 重定向的类别- --entrypoints.web.http.redirections.entrypoint.scheme=https# 重定向入口- --entrypoints.web.http.redirections.entrypoint.to=websecure# websecure# websecure端口- --entryPoints.websecure.address=:443# 是否自动申请证书- --entrypoints.websecure.http.tls=true# 证书申请厂商- --entrypoints.websecure.http.tls.certresolver=tencent# 申请的主域名- --entrypoints.websecure.http.tls.domains[0].main=wuxinke.com# 扫描该层级域名的所有域名- --entrypoints.websecure.http.tls.domains[0].sans=*.wuxinke.com# Let's Encrypt# 申请厂商- --certificatesresolvers.ali.acme.dnschallenge.provider=tencentcloud# 邮箱- --certificatesresolvers.ali.acme.email=wuxinke.oo@gmail.com# 申请证书存储位置- --certificatesresolvers.ali.acme.storage=/etc/acme/acme.json# 描述labels:# 是否交给traefik管理- "traefik.enable=true"# 路由入口- "traefik.http.routers.traefik.entrypoints=web, websecure"# 路由规则- "traefik.http.routers.traefik.rule=Host(`proxy.wuxinke.com`)"# 路由端口- "traefik.http.services.traefik.loadbalancer.server.port=8080"
docker-compose up -d

相关文章:

Docker 常用服务 安装使用 教程
Docker安装常用服务 1、 安装mysql # 1.拉取mysql镜像到本地 docker pull mysql:tag (tag不加默认最新版本) # 2.运行mysql服务 docker run --name mysql -e MYSQL_ROOT_PASSWORDroot -d mysql:tag --没有暴露外部端口外部不能连接 docker run --name mysql -e MYSQL_ROOT_PAS…...

Java String类(2)
String方法 字符串拆分 可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串 相关方法如下: 方法功能String[ ] split(String regex)//以regex分割将字符串根据regex全部拆分String[ ] split(String regex, int limit)将字符串以指定的格式,拆…...

基于图像切割计算轨迹相似度
目录 背景思路与核心代码数值实验优缺点分析参考文献 背景 在前面2文,我们分别讨论了利用夹角余弦来计算轨迹相似度和利用缓冲原理来计算轨迹相似度两种方法,前者可以作为一个baseline提供参考,后者的计算更符合人们的感官和事实,…...

Day49|leetcode 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
leetcode 121. 买卖股票的最佳时机 题目链接:121. 买卖股票的最佳时机 - 力扣(LeetCode) 视频链接:动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili 题目概述 给定一个数组 ,它的第 个元…...

【项目经验】:elementui表格中表头的多选框换成文字
一.项目需求 表格可以多选,表头都是汉字。。。。类似于这种 二.实现功能 用到的方法 Table Attributes 参数说明类型可选值默认值header-cell-class-name表头单元格的 className 的回调方法,也可以使用字符串为所有表头单元格设置一个固定的 className。…...

【LeetCode】剑指 Offer <二刷>(4)
目录 题目:剑指 Offer 09. 用两个栈实现队列 - 力扣(LeetCode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 10- I. 斐波那契数列 - 力扣&am…...

CentOS7查看和关闭防火墙
CentOS 7.0默认使用的是firewall作为防火墙 查看防火墙状态 firewall-cmd --state1 停止firewall systemctl stop firewalld.service1 禁止firewall开机启动 systemctl disable firewalld.service 1 转自:CentOS 6和CentOS 7防火墙的关闭 Centos7开放及查看…...

LeetCode 无重复字符的最长子串 打败100%的人
😀前言 LeetCode上的“无重复字符的最长子串”问题要求我们找到给定字符串中不包含重复字符的最长子串的长度。这个问题是一个典型的滑动窗口技巧的应用,需要有效地处理字符出现的情况来找到解决方案。 . 在本解决方案中,我们将探讨两种不同的…...

Spring Boot中通过maven进行多环境配置
上文 java Spring Boot将不同配置拆分入不同文件管理 中 我们说到了,多环境的多文件区分管理 说到多环境 其实不止我们 Spring Boot有 很多的东西都有 那么 这就有一个问题 如果 spring 和 maven 都配置了环境 而且他们配的不一样 那么 会用谁的呢? 此…...

python自动化Selenium的使用
python自动化Selenium的使用 Selenium是一个自动化测试框架,用于模拟和控制浏览器操作,支持多种编程语言。它可以模拟人类用户在浏览器上的操作(如点击、滚动、输入等),并检查网页内容和元素的属性。Selenium可用于对…...

大数据课程K13——Spark的距离度量相似度度量
文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的距离度量和相似度度量; ⚪ 掌握Spark的欧氏距离; ⚪ 掌握Spark的曼哈顿距离; ⚪ 掌握Spark的切比雪夫距离; ⚪ 掌握Spark的最小二乘法; 一、距离度量和相似度度量 1. …...

Lambda表达式第四版
1、冗余的Runnbale代码 package com.lambda;public class Demo01Runnable {public static void main(String[] args) {RunnableImpl runnable new RunnableImpl();Thread thread new Thread(runnable);thread.start();//Lambda表达式} }class RunnableImpl implements Runnab…...

自定义类加载器
java中自定义类加载器,并将双亲委派改为逆向双亲委派 自定义类加载器JarLoader: package cn.ac.iscas.dmo.common.tools.core.classloader;import org.apache.commons.collections4.MapUtils;import java.io.*; import java.net.URL; import java.net.U…...

【Redis】Redis 的学习教程(七)之 SpringBoot 集成 Redis
在前几篇文章中,我们详细介绍了 Redis 的一些功能特性以及主流的 java 客户端 api 使用方法。 在当前流行的微服务以及分布式集群环境下,Redis 的使用场景可以说非常的广泛,能解决集群环境下系统中遇到的不少技术问题,在此列举几…...

Vlan和Trunk
文章目录 一、VLAN的定义与背景1. 传统以太网的问题(广播域)2. 用VLAN隔离广播域3. VLAN的优点与应用 二、VLAN的转发过程举例三、802.1Q标签:帧格式与作用四、VLAN工作原理交换机端口类型AccessTrunkHybrid PVID(Port VLAN ID&am…...

java 批量下载将多个文件(minio中存储)压缩成一个zip包
我的需求是将minio中存储的文件按照查询条件查询出来统一压成一个zip包然后下载下来。 思路:针对这个需求,其实可以有多个思路,不过也大同小异,一般都是后端返回流文件前端再处理下载,也有少数是压缩成zip包之后直接给…...

nnUNet v2数据准备及格式转换 (二)
如果你曾经使用过nnUNet V1,那你一定明白数据集的命名是有严格要求的,必须按照特定的格式来进行命名才能正常使用。 这一节的学习需要有数据,如果你有自己的数据,可以拿自己的数据来实验,如果没有,可以用十…...

ant-vue1.78版监听a-modal遮罩层的滚动事件
监听a-modal遮罩层的滚动事件 我们开发过程中经常有遇到监听页面滚动的事件需求,去做一些下拉加载或者是下拉分页的需求,我们直接在vue的生命周期中去绑定事件监听非常的方便,但如果是弹框的遮罩层的滚动监听呢?页面的监听完全是…...

MATLAB中residue函数用法
目录 语法 说明 示例 求解具有实根的部分分式展开式 展开具有复数根和同次分子及分母的分式 展开分子次数高于分母次数的分式 residue函数的功能是部分分式展开(部分分式分解)。 语法 [r,p,k] residue(b,a) [b,a] residue(r,p,k) 说明 [r,p…...

攻防世界-Caesar
原题 解题思路 没出现什么特殊字符,可能是个移位密码。凯撒密码加密解密。偏移12位就行。...

嵌入式开发-lin总线介绍 一.概述
1.1lin总线定义和历史 LIN总线(Local Interconnect Network)是一种基于UART/SCI(Universal Asynchronous Receiver-Transmitter/Serial Communication Interface)的低成本串行通信协议。它主要用于汽车、家电、办公设备等多种领域…...

羊城杯-2023-Crypto
文章目录 Danger_RSA题目描述:题目分析: Easy_3L题目描述:题目分析: XOR贯穿始终题目描述:题目分析: MCeorpkpleer题目描述:题目分析: SigninCrypto题目描述:题目分析&am…...

RabbitMQ快速上手及讲解
前言:在介绍RabbitMQ之前,我们先来看下面一个场景: 1.1.1.1 异步处理 场景说明: 用户注册后,需要发注册邮件和注册短信,传统的做法有两种 1.串行的方式 (1)串行方式:将注册信息写入数据库后&a…...

使用多线程std::thread发挥多核计算优势(解答)
使用多线程std::thread发挥多核计算优势(题目) 单核无能为力 如果我们的电脑只有一个核,那么我们没有什么更好的办法可以让我们的程序更快。 因为这个作业限制了你修改算法函数。你唯一能做的就是利用你电脑的多核。 使用多线程 由于我们…...

MySQL分页查询详解:优化大数据集的LIMIT和OFFSET
最近在工作中,我们遇到了一个需求,甲方要求直接从数据库导出一个业务模块中所有使用中的工单信息。为了实现这一目标,我编写了一条SQL查询语句,并请求DBA协助导出数据。尽管工单数量并不多,只有3000多条,但…...

解构赋值、函数默认值
暂时性死区,TDZ(Temporal Dead Zone) var x 1 {let x x//此处声明了x,但是没有对x赋值,相当于在赋值之前引用x,所以会造成报错console.log(x)//报错x is not defined,暂时性死区,…...

【已解决】Mybatis 实现 Group By 动态分组查询
🎉工作中遇到这样一个需求场景:实现一个统计查询,要求可以根据用户在前端界面筛选的字段进行动态地分组统计。也就是说,后端在实现分组查询的时候,Group By 的字段是不确定的,可能是一个字段、多个字段或者…...

Android修改默认gradle路径
Android Studio每次新建项目,都会默认在C盘生成并下载gradle相关文件,由于C盘空间有限,没多久C盘就飘红了,于是就需要把gradle相关文件转移到其他盘 1、到C盘找到gradle文件 具体路径一般是:C:\Users\用户\ .gradle …...

原生JS+canvas实现炫酷背景
原生JScanvas实现炫酷背景 可以在需要的背景页使用 <!doctype html> <html> <head> <meta charset"utf-8"> <title>HTML5 Canvas矩阵粒子波浪背景动画特效</title> <style> html,body { height:100%; } body { …...

Linux学习之NAS服务器搭建
NAS是Network Attached Storage的缩写,也就是网络附属存储。可以使用自己已经不怎么使用的笔记本搭建一台NAS服务器。 fdisk -l可以看一下各个磁盘的状态。 可以看到有sda、sdb、sdc和sdd等四块硬盘。 lvs、vgs和pvs结合起来看,sdb和sdc没有被使用。 …...