Linux - Docker 安装使用 常用命令 教程
Docker
- 官方文档地址: Get Started | Docker
- 中文参考手册: https://docker_practice.gitee.io/zh-cn/
1.什么是 Docker
1.1 官方定义
- 最新官网首页


- We have a complete container solution for you - no matter who you are and where you are on your containerization journey.- 翻译: 我们为你提供了一个完整的容器解决方案,不管你是谁,不管你在哪,你都可以开始容器的的旅程。- 官方定义: docker是一个容器技术。
1.2 Docker的起源
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目 已经超过 5 万 7 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

2.为什么是Docker
- 在开发的时候,在本机测试环境可以跑,生产环境跑不起来这里我们拿java Web应用程序举例,我们一个java Web应用程序涉及很多东西,比如jdk、tomcat、mysql等软件环境。当这些其中某一项版本不一致的时候,可能就会导致应用程序跑不起来这种情况。Docker则将程序以及使用软件环境直接打包在一起,无论在那个机器上保证了环境一致。优势1: 一致的运行环境,更轻松的迁移
- 服务器自己的程序挂了,结果发现是别人程序出了问题把内存吃完了,自己程序因为内存不够就挂了这种也是一种比较常见的情况,如果你的程序重要性不是特别高的话,公司基本上不可能让你的程序独享一台服务器的,这时候你的服务器就会跟公司其他人的程序共享一台服务器,所以不可避免地就会受到其他程序的干扰,导致自己的程序出现问题。Docker就很好解决了环境隔离的问题,别人程序不会影响到自己的程序。优势2:对进程进行封装隔离,容器与容器之间互不影响,更高效的利用系统资源
- 公司要弄一个活动,可能会有大量的流量进来,公司需要再多部署几十台服务器在没有Docker的情况下,要在几天内部署几十台服务器,这对运维来说是一件非常折磨人的事,而且每台服务器的环境还不一定一样,就会出现各种问题,最后部署地头皮发麻。用Docker的话,我只需要将程序打包到镜像,你要多少台服务,我就给力跑多少容器,极大地提高了部署效率。优势3: 通过镜像复制N多个环境一致容器
3.Docker和虚拟机区别
关于Docker与虚拟机的区别,我在网上找到的一张图,非常直观形象地展示出来,话不多说,直接上图。

传统虚拟机 | Docker容器 | |
磁盘占用 | 几个GB到几十个GB左右 | 几十MB到几百MB左右 |
CPU内存占用 | 虚拟操作系统非常占用CPU和内存 | Docker引擎占用极低 |
启动速度 | (从开机到运行项目)几分钟 | (从开启容器到运行项目)几秒 |
安装管理 | 需要专门的运维技术 | 安装、管理方便 |
应用部署 | 每次部署都费时费力 | 从第二次部署开始轻松简捷 |
耦合性 | 多个应用服务安装到一起,容易互相影响 | 每个应用服务一个容器,达成隔离 |
系统依赖 | 无 | 需求相同或相似的内核,目前推荐是Linux |

4.Docker的安装
4.1 安装docker(centos7.x)
- 卸载原始docker(如果之前安装过旧版本的docker这一步需要先卸载之前的docker)$ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
- 安装docker依赖$ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
- 设置docker的yum源$ sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
- 安装最新版的docker$ sudo yum install docker-ce docker-ce-cli containerd.io
- 指定版本安装docker$ yum list docker-ce --showduplicates | sort -r$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io# 例如:$ sudo yum install docker-ce-18.09.5-3.el7 docker-ce-cli-18.09.5-3.el7 containerd.io
- 启动docker$ sudo systemctl enable docker$ sudo systemctl start docker
- 关闭docker$ sudo systemctl stop docker
- 测试docker安装$ sudo docker run hello-world
4.2 bash安装(通用所有平台)
- 在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,linux所有系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 的稳定(stable)版本安装在系统中。$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
- 配置docker开机自启动,然后启动docker,并检测是否启动成功#启动docker$ sudo systemctl start docker#开机自启动$ sudo systemctl enable docker#检测$ docker info
- 创建docker用户组(可选)$ sudo groupadd docker
- 将当前用户加入docker组(可选)$ sudo usermod -aG docker $USER
- 测试docker安装是否正确(可选)$ docker run hello-world

5.Docker 的核心架构

- 镜像: 一个镜像代表一个应用环境,他是一个只读的文件,如 mysql镜像,tomcat镜像,nginx镜像等
- 容器: 镜像每次运行之后就是产生一个容器,就是正在运行的镜像,特点就是可读可写
- 仓库: 用来存放镜像的位置,类似于maven仓库,也是镜像下载和上传的位置
- dockerFile: docker生成镜像配置文件,用来书写自定义镜像的一些配置
- tar: 一个对镜像打包的文件,日后可以还原成镜像

6. Docker 配置阿里镜像加速服务
6.1 docker 运行流程

6.2 docker配置阿里云镜像加速
- 访问阿里云登录自己账号查看docker镜像加速服务
#创建docker文件夹sudo mkdir -p /etc/docker#执行如下命令sudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://lz2nib3q.mirror.aliyuncs.com"]}EOF#重新启动sudo systemctl daemon-reloadsudo systemctl restart docker
- 验证docker的镜像加速是否生效
[root@localhost ~]# docker info..........127.0.0.0/8Registry Mirrors:'https://lz2nib3q.mirror.aliyuncs.com/'Live Restore Enabled: falseProduct License: Community Engine

7.Docker的入门应用
7.1 docker 的第一个程序
docker run hello-world
[root@localhost ~]# docker run hello-worldHello from Docker!This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

8.常用命令
8.1 辅助命令
docker version -------------------------- 查看docker的信息docker info -------------------------- 查看更详细的信息docker --help -------------------------- 帮助命令
8.2 Images 镜像命令
# 1.查看本机中所有镜像docker images -------------------------- 列出本地所有镜像-a 列出所有镜像(包含中间映像层)-q 只显示镜像id# 2.搜索镜像docker search [options] 镜像名 ------------------- 去dockerhub上查询当前镜像-s 指定值 列出收藏数不少于指定值的镜像--no-trunc 显示完整的镜像信息例:docker search tomcat# 3.从仓库下载镜像docker pull 镜像名[:TAG|@DIGEST] ----------------- 下载镜像例:docker pull tomcat:8.0# 4.删除镜像docker rmi 镜像名 -------------------------- 删除镜像-f 强制删除例:docker rmi -f hello-world#5.查看镜像细节docker inspect 镜像名:TAG例:docker inspect tomcat:8.0
8.3 Contrainer 容器命令
# 1.运行容器docker run 镜像名 -------------------------- 镜像名新建并启动容器-d 启动守护式容器(在后台启动容器)-p 映射端口号:原始端口号 指定端口号启动--name 别名为容器起一个名字例: docker run -p 8080:8080 --name tomcat01 tomcat:8.0docker run -d -p 8080:8080 --name tomcat01 tomcat:8.0# 2.查看运行的容器docker ps -------------------------- 列出所有正在运行的容器-a 正在运行的和历史运行过的容器-q 静默模式,只显示容器编号# 3.停止|关闭|重启容器docker start 容器名字或者容器id --------------- 开启容器docker restart 容器名或者容器id --------------- 重启容器docker stop 容器名或者容器id ------------------ 正常停止容器运行docker kill 容器名或者容器id ------------------ 立即停止容器运行# 4.删除容器docker rm -f 容器id和容器名docker rm -f $(docker ps -aq) -------------------------- 删除所有容器# 5.查看容器内进程docker top 容器id或者容器名 ------------------ 查看容器内的进程# 6.查看容器内部细节docker inspect 容器id ------------------ 查看容器内部细节(可以查看容器数据卷映射地址)# 7.查看容器的运行日志docker logs [OPTIONS] 容器id或容器名 ------------------ 查看容器日志-t 加入时间戳-f 跟随最新的日志打印--tail 数字 显示最后多少条--since='时间' 导出日志的开始时间--until='时间' 导出日志的结束时间例: docker logs -f tomcat01 ----------------------实时更新日志docker logs --tail 10 tomcat01 -------------------显示最后10行docker logs --since='2023-06-27T00.00.00' 容器id >>存储在宿主机的文件位置 -------------------------导出23年6月27日00点至今的所有日志到宿主机目录docker logs --since='2023-06-27T00.00.00' --until='2023-06-30T17.00.00' 容器id >>存储在宿主机的文件位置 ----------------------------导出23年6月27日00点至23年6月30日晚上五点的日志到宿主机目录# 8.进入容器内部docker exec [options] 容器id 容器内命令 ------------------ 进入容器执行命令-i 以交互模式运行容器,通常与-t一起使用-t 分配一个伪终端 shell窗口 bashexit:退出例:docker exec -it tomcat01 bash# 9.容器和宿主机之间复制文件docker cp 文件|目录 容器id|容器名称:容器路径 ----------------- 将宿主机复制到容器内部docker cp 容器id|容器名称:容器内资源路径 宿主机目录路径 ----------------- 将容器内资源拷贝到主机上例: docker cp aa.txt tomcat01:/usr/local/tomcat/webappsdocker cp tomcat01:/usr/local/tomcat/webapps/docs /root/# 10.数据卷(volum)实现与宿主机共享目录docker run -v 宿主机的路径|任意别名:容器内的路径 镜像名例:docker run -d -p 8081:8080 --name tomcat02 -v /root/apps/:/usr/local/tomcat/webapps tomcat:8.0注意:1.如果是宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容2.如果是别名则会在docker运行容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中# 11.打包镜像docker save 镜像名 -o 名称.tar例:docker save tomcat-love:8.0 -o /root/love.tar# 12.载入镜像docker load -i 名称.tar例:docker load -i /root/love.tar# 13.容器打包成新的镜像docker commit -m "描述信息" -a "作者信息" (容器id或者名称)打包的镜像名称:标签例:docker commit -m 'test' -a 'wuxinke' 11f8637afe3a tomcat-test:8.0
9.docker的镜像原理
9.1 镜像是什么?
镜像是一种轻量级的,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时所需的库、环境变量和配置文件。
9.2 为什么一个镜像会那么大?
镜像就是花卷
-
UnionFS(联合文件系统):
Union文件系统是一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。这种文件系统特性:就是一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录 。
9.3 Docker镜像原理
docker的镜像实际是由一层一层的文件系统组成。
-
bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统。在docker镜像的最底层就是bootfs。这一层与Linux/Unix 系统是一样的,包含boot加载器(bootloader)和内核(kernel)。当boot加载完,后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时会卸载bootfs。
-
rootfs(root file system),在bootfs之上,包含的就是典型的linux系统中的/dev,/proc,/bin,/etc等标准的目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu/CentOS等等。
-
我们平时安装进虚拟机的centos都有1到几个GB,为什么docker这里才200MB?对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令,工具,和程序库就可以了,因为底层直接使用Host的Kernal,自己只需要提供rootfs就行了。由此可见不同的linux发行版,他们的bootfs是一致的,rootfs会有差别。因此不同的发行版可以共用bootfs。
9.4 为什么docker镜像要采用这种分层结构呢?
最大的一个好处就是资源共享
-
比如:有多个镜像都是从相同的base镜像构建而来的,那么宿主机只需在磁盘中保存一份base镜像。同时内存中也只需要加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。Docker镜像都是只读的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称为容器层,容器层之下都叫镜像层。
10.高级网络配置
10.1 说明

10.2 查看网络信息
# docker network ls
10.3 创建一个网桥
# docker network create -d bridge 网桥名称
10.4 删除一个网桥
# docker network rm 网桥名称
10.5 容器之前使用网络通信
# 1.查询当前网络配置docker network ls
# 2.创建桥接网络docker network create -d bridge info
[root@centos ~]# docker network create -d bridge info6e4aaebff79b1df43a064e0e8fdab08f52d64ce34db78dd5184ce7aaaf550a2f[root@centos ~]# docker network lsNETWORK ID NAME DRIVER SCOPE8e424e5936b7 bridge bridge local17d974db02da docker_gwbridge bridge locald6c326e433f7 host host local6e4aaebff79b info bridge local
# 3.启动容器指定使用网桥docker run -d -p 8890:80 --name nginx001 --network info nginxdocker run -d -p 8891:80 --name nginx002 --network info nginx`注意:一旦指定网桥后--name指定名字就是主机名,多个容器指定在同一个网桥时,可以在任意一个容器中使用主机名与容器进行互通`
[root@centos ~]# docker run -d -p 8890:80 --name nginx001 --network info nginxc315bcc94e9ddaa36eb6c6f16ca51592b1ac8bf1ecfe9d8f01d892f3f10825fe[root@centos ~]# docker run -d -p 8891:80 --name nginx002 --network info nginxf8682db35dd7fb4395f90edb38df7cad71bbfaba71b6a4c6e2a3a525cb73c2a5[root@centos ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf8682db35dd7 nginx "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:8891->80/tcp nginx002c315bcc94e9d nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 0.0.0.0:8890->80/tcp nginx001b63169d43792 mysql:5.7.19 "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 3306/tcp mysql_mysql.1.s75qe5kkpwwttyf0wrjvd2cda[root@centos ~]# docker exec -it f8682db35dd7 /bin/bashroot@f8682db35dd7:/# curl http://nginx001<!DOCTYPE html><html><head><title>Welcome to nginx!</title>.....
10.6 查看网络详情
docker inspect 网络名称 | id

11.高级数据卷配置
11.1 说明
- 数据卷 可以在容器之间共享和重用
- 对 数据卷 的修改会立马生效
- 对 数据卷 的更新,不会影响镜像
- 数据卷 默认会一直存在,即使容器被删除
注意: 数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)。
11.2 创建数据卷
docker volume create 数据卷名称
[root@centos ~]# docker volume create my-volmy-vol
11.3 查看数据卷详情
[root@centos ~]# docker volume inspect my-vol[{"CreatedAt": "2020-11-25T11:43:56+08:00","Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/my-vol/_data","Name": "my-vol","Options": {},"Scope": "local"}]
11.4 挂载数据卷
[root@centos ~]# docker run -d -P --name web -v my-vol:/usr/share/nginx/html nginx[root@centos ~]# docker inspect web"Mounts": [{"Type": "volume","Name": "my-vol","Source": "/var/lib/docker/volumes/my-vol/_data","Destination": "/usr/share/nginx/html","Driver": "local","Mode": "z","RW": true,"Propagation": ""}],
11.5 删除数据卷
docker volume rm 数据卷名称
[root@centos ~]# docker volume rm my-vol
11.6 查看所有数据卷
docker volume ls

相关文章:

Linux - Docker 安装使用 常用命令 教程
Docker 官方文档地址: Get Started | Docker 中文参考手册: https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are and where you are on your contain…...

AtCoder Beginner Contest 318 G - Typical Path Problem 题解
G - Typical Path Problem 题目大意 给定一张 N N N 个点、 M M M 条边的简单无向图 G G G 和三个整数 A , B , C A,B,C A,B,C。 是否存在一条从顶点 A A A 到 C C C,且经过 B B B 的简单路径? 数据范围: 3 ≤ N ≤ 2 1 0 5 3\le …...

21.4 CSS 盒子模型
1. 边框样式 border-style属性: 指定元素的边框样式.常用属性值: - none: 无边框(默认值). - solid: 实线边框. - dotted: 点状边框. - dashed: 虚线边框. - double: 双线边框. - groove: 凹槽状边框. - ridge: 脊状边框. - inset: 内阴影边框. - outset: 外阴影边框.这些值可…...

MybatisPlus入门
MybatisPlus入门 1.MyBatis-Plus1.1 ORM介绍1.2 MyBatis-Plus介绍 2.代码链接数据库2.1 创建项目2.2 添加依赖2.3 链接数据库2.3.1 准备数据库2.3.2 链接数据库2.3.3 创建实体类 2.4 创建Mapper层2.5 创建Controller层2.6 浏览器访问测试 MybatisPlus官方网站: 官网…...

飞腾平台芯片测试固件(SFW)和开机启动log
一、说两句 最近公司飞腾产品越来越多了,FT-2000/4的D2000的X100的,最近又新出了E2000。越来越多新来的小孩儿开始加入到飞腾的调测试中,那么在他们实际的调试中会遇到很多的问题。在固件启动阶段有的板卡会有一些异常,有时我们需…...

【大数据实训】基于Hive的北京市天气系统分析报告(二)
博主介绍:✌全网粉丝6W,csdn特邀作者、博客专家、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于大数据技术领域和毕业项目实战✌ 🍅文末获取项目联系🍅 目录 1. 引言 1.1 项目背景 1 1.2 项目意义 1 2.…...

WPF列表样式
WPF的数据绑定系统自动生成列表项对象,为单个项应用所需的样式不是很容易。解决方案是ItemContainerStyle 属性。如果设置了ItemContainerStyle 属性,当创建列表项时,列表控件会将其向下传递给每个项。对于ListBox控件,每个项有Li…...

Android逆向学习(二)vscode进行双开与图标修改
Android逆向学习(二)vscode进行双开与图标修改 写在前面 这其实应该还是吾爱的第一个作业,但是写完上一个博客的时候已经比较晚了,如果继续敲机械键盘吵到室友,我怕我看不到明天的太阳,所以我决定分成两篇…...

一个基于YAPI接口生产代码的开源工具
前后端分离的开发模式是一种趋势,但如果缺少好的开发工具跟管理模式,会使得前后端开发人员相互等待,扯皮等问题。从而影响项目的交付进度。 通过实践摸索,YAPI是一款很适合前后端分离开发的协助工具。它以项目为维度,可…...

Redis 缓存穿透击穿和雪崩
一、说明 Redis 缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对…...

在windows上配置ninja环境
ninja使用并行任务来编译工程,比cmake编译快了一个数量级,是谷歌在2010年为了提高cmake的编译速度而开发一款编译工具。下面介绍在windows上配置ninja环境。 1 下载ninja ninja官网地址: https://github.com/ninja-build/ninja/releases …...

③matlab向量和矩阵
目录 手动输入数组 创建等间距向量 数组创建函数 手动输入数组 1.背景 单个称为标量的数值实际上是一个 11 数组,也即它包含 1 行 1 列。 任务 创建一个名为 x 并且值为 4 的变量。 2.您可以使用方括号创建包含多个元素的数组。 x [3 5] x 3 5 任务 …...

一、了解[mysql]索引底层结构和算法
目录 一、索引1.索引的本质2.mysql的索引结构 二、存储引擎1.MyISAM2.InnoDB3.为什么建议InnoDB表要建立主键并且推荐int类型自增?4.innodb的主键索引和非主键索引(二级索引)区别5.联合索引 一、索引 1.索引的本质 索引:帮助mysql高效获取数…...

DockerFile常用命令
以下是常见的Dockerfile命令: FROM:FROM命令用于指定基础镜像。基础镜像是构建镜像的起点。例如,FROM ubuntu:latest表示使用最新版本的Ubuntu作为基础镜像。 MAINTAINER:MAINTAINER命令用于指定镜像的维护者信息。一般格式为&am…...

Android 动画之插值器PathInterpolator
Android 的View动画、属性动画都可以设置动画插值器,以此来实现不同的动画效果。 这篇文章 Android View动画整理 有介绍各种插值器的效果,这一篇专访 PathInterpolator 。 参考官网 添加曲线动作 , PathInterpolator 基于 贝塞尔曲线 或 …...

递归学习(转载)
转载至 https://www.cnblogs.com/king-lps/p/10748535.html 为避免原文丢失,因此原文转载作者【三年一梦】的帖子 前言 相信不少同学和我一样,在刚学完数据结构后开始刷算法题时,遇到递归的问题总是很头疼,而一看解答,…...

python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)
简介 上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试。 什么是接口测试 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各…...

HashMap源码阅读(一)
HashMap继承抽象类AbstractMap,AbstractMap抽象类实现了Map接口 一、HashMap中的静态常量 //默认初始容量 static final int DEFAULT_INITIAL_CAPACITY 1 << 4; // aka 16 //最大长度 static final int MAXIMUM_CAPACITY 1 << 30; //负载因子&#…...

C语言:动态内存(一篇拿捏动态内存!)
目录 学习目标: 为什么存在动态内存分配 动态内存函数: 1. malloc 和 free 2. calloc 3. realloc 常见的动态内存错误: 1. 对NULL指针的解引用操作 2. 对动态开辟空间的越界访问 3. 对非动态开辟内存使用free释放 4. 使用free释…...

Lua - 替换字符串中的特殊字符
//替换指定串 s string.gsub("Lua is good", "good", "bad") print(s) --> Lua is bad//替换特殊字符 a "我们使用$"; b string.gsub(a, "%$", "RMB"); print(b) --> 我们使用RMB//替换反斜杠 path …...

按钮控件之3---QRadioButton 单选按钮/单选框控件
本文详细的介绍了QRadioButton控件的各种操作,例如:QRadioButton分组、默认选中、禁用启用、重置样式等操作。 一、QRadioButton部件提供了一个带有文本标签的单选框(单选按钮)。QRadioButton是一个可以切换选中(chec…...

基于STM32设计的游戏姿态数据手套
基于STM32设计的游戏姿态数据手套 一、项目背景 随着虚拟现实技术的发展,人机交互越来越朝着多通道、自然化的方向发展,由原来的以机器为中心向以人为中心发展。按照行业通用用途设计的高端数据手套,可以用于测量人手指动作,如搓捻、对掌等动作,广泛应用于人手的运动捕捉…...

react跳转页面redux数据被清除
关键代码如下,页面中有根据redux中state展示的数据,然后在组件卸载的时候会清空redux中存的数据,点击a标签可以打开新的标签页,如下代码会在打开新的标签页,组件卸载,清空redux数据,页面展示的也…...

Spring Cloud 微服务2
Eureka 注册中心,服务的自动注册、发现、状态监控 Ribbon 负载均衡,Eureka中已经集成了负载均衡组件 Hystrix 熔断器,用于隔离访问远程服务、第三方库,防止出现级联失败。 Feign 远程调用,将Rest的请求进行隐藏&a…...

侯捷课程笔记(一)(传统c++语法,类内容)
侯捷课程笔记(一)(传统c语法,类内容) 2023-09-03更新: 本小节已经完结,只会进行小修改 埋下了一些坑,后面会单独讲或者起新章节讲 最近在学习侯捷的一些课程,虽然其中大部…...

自动化安装Nginx脚本:简化您的服务器配置
在如今的网络世界中,Nginx作为一款高性能的Web服务器和反向代理服务器,扮演着至关重要的角色。然而,手动安装和配置Nginx可能会耗费大量时间和精力,特别是对于那些对Linux系统不太熟悉的人来说。幸运的是,我们为您带来…...

通过es索引生命周期策略删除日志索引
通过es索引生命周期策略删除日志索引 在es 7.x版本之后,多了个索引生命周期的概念,可以一系列的设置,给新生成的索引绑定生命周期策略,到期后,索引自动删除。 也可以通过linux定时任务实现,请查看另一篇文章…...

网络实验 VlAN 中 Trunk Access端口的说明及实验
网络实验 VlAN 中 Trunk Access端口的说明及实验 VlAN 虚拟局域网技术Access端口 工作原理Trunk端口 工作原理简单实验(一)划分不同Vlan,实现vlan内部通信拓朴图主机IP 配置划分Vlanping 测试 (二)跨交换机实现VLAN间通…...

打包个七夕exe玩玩
前段时间七夕 当别的哥们都在酒店不要不要的时候 身为程序员的我 还在单位群收到收到 正好后来看到大佬些的这个 https://www.52pojie.cn/thread-1823963-1-1.html 这个贱 我必须要犯,可是我也不能直接给他装个python吧 多麻烦 就这几个弹窗 好low 加上bgm 再打包成…...

ReactNative 井字游戏 实战
效果展示 需要的插件准备 此实战项目需要用到两个插件。 react-native-snackbar 底部信息提示组件。 react-native-vector-icons 图标组件。 安装组件: npm i react-native-snackbar npm i react-native-vector-icons npm i types/react-native-vector-icons /…...