docker-学习-2
docker学习第二天
- docker学习第二天
- 1.docker和虚拟机的区别
- 2.docker的底层隔离机制
- 2.1 Namespaces(命名空间)
- 2.1.1 什么是命名空间
- 2.2 Cgroups
- 2.3 Union file systems
- 2.4 Container format
- 2.5 docker在底层如何做隔离的,如何进行资源限制的?
- 3. docker命令
- 3.1 启动MySQL 容量限制cpu使用率为50% 内存为2G,如何看是否启用了限制?
- 3.2 docker top
- 3.3 思考:如何限制容器使用网络带宽资源?
- 3.4 细讲一下docker run
- 3.5 docker rm
- 3.6 docker rmi
- 3.7 docker rm和rmi的区别
- 4. 一些小知识点
- 4.1 kernel的作用
- 4.2 假如我们不使用容器进程,我们想限制一个Linux操作系统里的进程使用多少cpu和多少内存?
- 4.3 docker容器的三种状态
- 4.4 小结一下
docker学习第二天
1.docker和虚拟机的区别
2.docker的底层隔离机制
2.1 Namespaces(命名空间)
2.1.1 什么是命名空间
简单来讲:命名空间就是在内存中存放数据的空间(存放变量,函数,库等)
就相当于一块地盘,梁山!梁山上的一草一木都是你命名的,这块地盘归你管理!
Namespaces是Linux内核的一个特性,它可以为进程提供一个隔离的环境,使得进程和其他进程运行在不同的“空间”中。Docker使用了以下几种namespaces来隔离容器的运行环境:
- **PID Namespace:**隔离进程ID,每个容器都有自己的进程ID空间。
- **NET Namespace:**隔离网络接口,每个容器都有自己的网络空间。
- **IPC Namespace:**隔离System V IPC和POSIX message queues,每个容器都有自己的IPC空间。
- **MNT Namespace:**隔离文件系统挂载点,每个容器都有自己的文件系统。
- **UTS Namespace:**隔离hostname和domainname,每个容器都有自己的hostname。
- **user Namespace: ** 用户命名空间。
我们每起一个容器就是在内存中开辟一块空间
同样的每一个容器也代表着一个进程
2.2 Cgroups
Cgroups(control groups)是Linux内核的一个特性,它可以限制、记录和隔离进程组所使用的物理资源,包括CPU、内存、磁盘I/O等。Docker使用cgroups来限制和控制容器对物理资源的使用。
2.3 Union file systems
Union file systems,或者叫unionfs,是一种文件系统服务,它可以将多个不同位置的目录合并到一个虚拟的文件系统中。Docker使用unionfs来支持镜像的层次结构,每一层都可以添加、修改或删除文件,而不影响其他层。
2.4 Container format
Docker使用自己的容器格式来打包和运行容器。这个格式定义了容器的内容和运行时的参数,包括容器使用的镜像、网络配置、环境变量等。
2.5 docker在底层如何做隔离的,如何进行资源限制的?
Namespaces和Cgroups联系起来进行隔离和资源限制
隔离 - Namespaces
Namespaces是Linux内核的一个特性,它可以为进程提供一个隔离的环境,使得进程和其他进程运行在不同的“空间”中。Docker使用了以下几种namespaces来隔离容器的运行环境:
- PID Namespace:隔离进程ID,每个容器都有自己的进程ID空间。–>进程命名空间
- NET Namespace:隔离网络接口,每个容器都有自己的网络空间。–>网络命名空间
- IPC Namespace:隔离System V IPC和POSIX message queues,每个容器都有自己的IPC空间。类似于管道的作用。
- MNT Namespace:隔离文件系统挂载点,每个容器都有自己的文件系统。
- UTS Namespace:隔离hostname和domainname,每个容器都有自己的hostname。和时间相关。
- user Namespace: 用户命名空间。
资源限制 - Cgroups
Cgroups(control groups)是Linux内核的一个特性,它可以限制、记录和隔离进程组所使用的物理资源,包括CPU、内存、磁盘I/O等。Docker使用cgroups来限制和控制容器对物理资源的使用。
例如,你可以设置一个容器只能使用1GB的内存和50%的CPU。当容器试图使用更多的资源时,cgroups会阻止它并可能杀死一些进程来保持资源使用在限制之内。
举个例子
悟空,八戒,嫦娥是不同的容器
👆图说明:不同的容器之间可以使用相同的命名空间
3. docker命令
3.1 启动MySQL 容量限制cpu使用率为50% 内存为2G,如何看是否启用了限制?
docker run -d --name sc-mysql-2 -p 3307:3306\--cpus=".5" \--memory="2g" \-e MYSQL_ROOT_PASSWORD='sc123456' \mysql:5.7.43
[root@docker-1 ~] docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
168628a39c9b sc-mysql-2 0.35% 205.2MiB / 2GiB 10.02% 656B / 0B 1.81MB / 583MB 27
该命令在Docker中启动了一个名为
sc-mysql-2
的MySQL容器实例,并设置了相关参数来控制资源和配置,具体的参数解释如下:
docker run
: Docker的命令,用于创建并启动一个新的容器。
-d
: 表示容器将在后台运行(detached mode),即容器启动后不会占用当前的命令行界面。
--name sc-mysql-2
: 设置容器的名称为sc-mysql-2
,方便后续的管理操作,如停止和删除容器。
-p 3307:3306
: 端口映射参数。将容器内部的3306
端口(MySQL默认端口)映射到宿主机的3307
端口。这样,宿主机上的应用程序可以通过访问localhost:3307
来与容器内的MySQL服务器通信。
--cpus=".5"
: 限制容器的CPU使用率。在这里,设置为0.5意味着容器最多可以使用50%的CPU资源。如果是多核CPU,这表示容器可以使用半核的CPU时间。
--memory="2g"
: 限制容器可以使用的最大内存量为2GB。如果容器试图使用超过这个限制的内存,可能会触发OOM(Out of Memory)管理机制,导致容器内的进程被终止。
-e MYSQL_ROOT_PASSWORD='sc123456'
: 通过环境变量设置MySQL的root用户密码。MYSQL_ROOT_PASSWORD
是MySQL容器初次启动时必须设置的环境变量,用于定义root用户的密码。在这个例子中,密码被设置为sc123456
。
mysql:5.7.43
: 指定使用的Docker镜像,这里使用的是MySQL的官方Docker镜像,版本是5.7.43
。综上所述,这个命令将会在Docker中创建一个新的MySQL容器,该容器在后台运行,拥有2GB的内存限制和50%的CPU使用限制,其root用户的密码设置为
sc123456
。外部可以通过宿主机的3307
端口与容器内的MySQL服务进行通信。
另一种方式
[root@docker-1 ~] docker run -d --name sc-mysql-3 -p 3308:3306 --cpu-shares 500 --cpus 2 --cpuset-cpus 0,1 -m 2000000000 --device-write-bps /dev/sda:20MB -e MYSQL_ROOT_PASSWORD='sc123456' mysql:5.7.43
938d53c057a172472fdde927f25d89c709e467d19eceebe2923d31f2e2907627
这条命令在Docker中启动了一个名为
sc-mysql-3
的MySQL容器实例,并配置了多个资源限制参数和环境变量。以下是该命令各个参数的详细解释:
docker run
: Docker的命令,用于创建并启动一个新的容器实例。
-d
: 表示容器将在后台运行(detached mode),即容器启动后不会占用当前的命令行界面。
--name sc-mysql-3
: 指定了新容器的名称为sc-mysql-3
。
-p 3308:3306
: 将容器内部的3306
端口(MySQL默认端口)映射到宿主机的3308
端口。这样,宿主机上的应用程序可以通过访问localhost:3308
来与容器内的MySQL服务器通信。
--cpu-shares 500
: 设置容器的CPU共享权重为500。在同一宿主机上,CPU资源将按照容器的权重被分配,权重越高的容器在CPU资源紧张时获得的份额越多。
--cpus 2
: 限制容器可以使用的CPU核心数为2。这意味着容器可以使用两个CPU核心的全部性能。
--cpuset-cpus 0,1
: 绑定容器到特定的CPU核心,只允许容器在CPU 0和CPU 1上运行。
-m 2000000000
: 限制容器可以使用的内存为2GB。这里使用字节作为单位,2000000000字节等于大约2GB。
--device-write-bps /dev/sda:20MB
: 限制容器对/dev/sda
设备(通常是宿主机的硬盘)的写速度为每秒20MB。这可以防止容器占用过多的磁盘I/O资源。
-e MYSQL_ROOT_PASSWORD='sc123456'
: 通过环境变量设置MySQL的root用户密码。MYSQL_ROOT_PASSWORD
是MySQL容器初次启动时必须设置的环境变量,用于定义root用户的密码。在这个例子中,密码被设置为sc123456
。
mysql:5.7.43
: 指定使用的Docker镜像,这里使用的是MySQL的官方Docker镜像,版本是5.7.43
。综上所述,这个命令将会在Docker中创建一个新的MySQL容器,该容器在后台运行,配置了CPU和内存的资源限制,并将容器的MySQL服务端口映射到宿主机的3308端口上。同时,还限制了容器对宿主机硬盘的写速度。
[root@docker-1 ~] docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
938d53c057a1 sc-mysql-3 0.03% 205.2MiB / 1.863GiB 10.76% 656B / 0B 2.88MB / 583MB 27
3.2 docker top
查看容器内部的进程
[root@docker-1 ~] docker top sc-mysql-3
UID PID PPID C STIME TTY TIME CMD
polkitd 5529 5509 0 18:10 ? 00:00:00 mysqld
[root@docker-1 ~]#
一般容器里边只跑一个进程
3.3 思考:如何限制容器使用网络带宽资源?
Docker本身并没有直接提供限制容器网络带宽的选项,但是可以通过一些间接的方式来实现。其中一种常见的方法是使用tc
(Traffic Control)工具,它是Linux内核的一部分,可以用来控制网络带宽。
然而,tc
命令需要在容器启动后执行,而不能直接在docker run
命令中设置。因此,你可能需要创建一个脚本来启动容器并设置网络带宽限制。
以下是一个简单的示例,首先启动容器,然后使用tc
命令限制容器的出口带宽为1mbit/s:
# 启动容器
docker run -d --name sc-mysql-3 -p 3308:3306 --cpu-shares 500 --cpus 2 --cpuset-cpus 0,1 -m 2000000000 --device-write-bps /dev/sda:20MB -e MYSQL_ROOT_PASSWORD='sc123456' mysql:5.7.43# 获取容器的网络设备名
CONTAINER_PID=$(docker inspect -f '{{.State.Pid}}' sc-mysql-3)
NETWORK_INTERFACE=$(nsenter -t $CONTAINER_PID -n ip link | grep eth0 | awk '{print $2}' | tr -d ":")# 限制容器的出口带宽为1mbit/s
tc qdisc add dev $NETWORK_INTERFACE root tbf rate 1mbit burst 32kbit latency 400ms
这个脚本首先启动了一个名为sc-mysql-3
的MySQL容器,然后获取了容器的网络设备名,最后使用tc
命令限制了容器的出口带宽为1mbit/s。
需要注意的是,这只是一个基本的示例,实际使用时可能需要根据你的具体需求进行调整。另外,tc
命令的使用可能需要一定的网络知识,如果你不熟悉这个工具,可能需要花一些时间来学习。
3.4 细讲一下docker run
docker run的流程 👇
-
检查启动容器使用的镜像是否存在,如果不存在就先去pull镜像到本机,如果存在就创建容器
docker pull 去拉mysql:5.7.43 -
docker create ------>创建容器
-
docker start ------>启动容器
# 删除镜像
[root@localhost ~] docker rmi busybox
Untagged: busybox:latest
Untagged: busybox@sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678
Deleted: sha256:beae173ccac6ad749f76713cf4440fe3d21d1043fe616dfbe30775815d1d0f6a
Deleted: sha256:01fd6df81c8ec7dd24bbbd72342671f41813f992999a3471b9d9cbc44ad88374
↑ 如果正在使用,就先停止那个容器,然后rm删除容器,再rmi删除镜像
所以说,不需要 pull 创建之类的
↓
直接 用run
3.5 docker rm
rm 是删容器的
3.6 docker rmi
rmi是删除镜像
一般是停止运行之后,先通过rm删除容器,然后通过rmi删除镜像
3.7 docker rm和rmi的区别
docker rm
和 docker rmi
是Docker命令行工具中的两个不同命令,分别用于删除容器和镜像。
docker rm
docker rm
命令用于删除一个或多个容器。当一个容器不再需要时,你可以使用此命令来清除它。需要注意的是,只有停止状态的容器才可以被删除。如果要删除正在运行的容器,需要先停止容器(使用docker stop
命令),或者在使用docker rm
命令时加上-f
(–force)参数来强制删除。
基本使用格式如下:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
例如,删除名为my_container
的容器:
docker rm my_container
如果想要强制删除一个正在运行的容器,可以使用:
docker rm -f my_container
docker rmi
docker rmi
命令用于删除一个或多个Docker镜像。当你不再需要某个镜像,或者需要清理磁盘空间时,你可以使用这个命令。在删除镜像之前,需要确保没有任何容器(无论是运行中的还是已停止的)正在使用这个镜像。
基本使用格式如下:
docker rmi [OPTIONS] IMAGE [IMAGE...]
例如,删除名为mysql
的镜像:
docker rmi mysql
如果一个镜像有多个标签,你可能需要删除所有相关的标签才能完全删除该镜像。
需要注意的是,如果其它镜像依赖于要删除的镜像的层,那么这些层不会被删除。只有当没有任何镜像使用这些层时,这些层才会从Docker主机上删除。
无论是使用docker rm
还是docker rmi
,都应谨慎操作,确保不会误删正在使用或需要保留的容器或镜像。
4. 一些小知识点
4.1 kernel的作用
Linux内核的作用是提供系统的核心功能,包括:
- **进程管理:**调度进程、管理进程生命周期和状态。
- **内存管理:**分配和回收内存、虚拟内存和交换空间的管理。
- **文件系统:**管理数据存储、文件的创建、删除、读取和写入。
- **设备驱动:**提供与硬件设备通信的接口和控制。
- **网络功能:**实现网络协议栈,处理网络通信。
- **安全:**提供用户权限控制、访问权限和安全机制。
- **系统调用和接口:**提供用户空间程序与内核交互的接口。
4.2 假如我们不使用容器进程,我们想限制一个Linux操作系统里的进程使用多少cpu和多少内存?
使用cgroups技术去控制
https://pythonjishu.com/emkqvgkuoaalfkc/
操作系统内核里有个软件: LXC linux container技术
docker只是调用了LXC的库,实现了容器的应用
4.3 docker容器的三种状态
Docker容器的状态通常是通过docker ps
或docker inspect
命令查看的,并且确实有几种主要状态,包括"Up"、“Exited"和"Created”。下面是对这三种状态的详细解释:
-
Up(运行中):当容器正在运行时,使用
docker ps
命令查看容器列表,会显示容器的状态为"Up"。这表示容器内的应用程序正在活动运行。"Up"状态后通常会跟随容器已运行的时间,例如"Up 2 hours"表示容器已经运行了两小时。 -
Exited(已停止):当容器内的主进程已经终止时,容器的状态就变为"Exited"。这意味着容器已经停止运行,不再执行任何操作。"Exited"状态后通常会跟随一个退出代码,表示容器终止时的状态,例如"Exited (0) 5 minutes ago"表示容器在5分钟前正常退出,退出代码为0。
-
Created(已创建):当使用
docker create
命令创建一个容器但尚未启动它时,容器的状态是"Created"。这意味着容器的配置已经完成,包括文件系统的初始化,但是容器内的应用程序还没有开始运行。"Created"状态的容器需要通过docker start
命令来启动。
这些状态帮助用户了解容器的生命周期和当前运行情况。使用docker ps -a
命令会列出所有容器,包括未运行的容器,而使用docker ps
命令默认只列出处于"Up"状态的运行中容器。
4.4 小结一下
docker run = docker pull+ docker create + docker start
docker rmi
docker top 查看容器里运行的进程,单进程思想,一个容器只跑一个进程
docker stats 查看运行的状态
docker network 查看容器里的网络
相关文章:

docker-学习-2
docker学习第二天 docker学习第二天1.docker和虚拟机的区别2.docker的底层隔离机制2.1 Namespaces(命名空间)2.1.1 什么是命名空间 2.2 Cgroups2.3 Union file systems2.4 Container format2.5 docker在底层如何做隔离的,如何进行资源限制的? 3. docker命…...

树--二叉树(C语言纯手凹)
目录 目录 1.什么是树?(不深入,仅做了解) 2.树的表示方式 2.1孩子兄弟表示法(左孩子右兄弟) 2.2孩子表示法 2.3双亲表示法 3.什么是二叉树 4.二叉树分类 4.1满二叉树 4.2完全二叉树 4.3二叉搜索树…...

TypeScript(七) 函数
1. TypeScript 函数 1.1. 函数的定义 函数就是包裹在花括号中的代码块,前面使用关键字function。 语法: // An highlighted block function function_name() {// 执行代码 }实例: function test() { // 函数定义console.log("我就是…...
学fpga和还是嵌入式?
具体要选哪个,更多还是看个人喜好还有基础知识结构。 我们先来明白下两者区别在哪? 1、嵌入式:分两部分,第一是嵌入式软件开发,主要与嵌入式操作系统、应用软件等有关。第二是嵌入式硬件开发,需要掌握硬件…...

Day01-变量和数据类型课后练习-参考答案
文章目录 1、输出你最想说的一句话!2、定义所有基本数据类型的变量和字符串变量3、用合适类型的变量存储个人信息并输出4、定义圆周率PI5、简答题 1、输出你最想说的一句话! 编写步骤: 定义类 Homework1,例如:Homewo…...

Docker 数据管理、容器互联、网络与资源控制
一、docker数据管理 管理 Docker 容器中数据主要有两种方式:数据卷(Data volumes)和数据卷容器(Datavolumes containers)。 1、数据卷 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立…...

密码加密——MD5与BCryptPasswordEncoder
目录 一、问题 二、密码加密 1、MD5密码加密 2、BCryptPasswordEncoder加密(推荐) 2.1 特点 2.2 使用步骤 一、问题 在数据库表中的密码都是明文存储的,安全性太低 需求: 将密码加密后存储,提高安全性 二、密码加密…...

利用外卖系统源码构建高效的在线订餐平台
在当今数字化时代,外卖服务已成为人们日常生活中不可或缺的一部分。为了满足用户需求,许多创业者和企业都希望搭建自己的在线订餐平台。利用现有的外卖系统源码,可以快速构建一个高效、安全的在线订餐平台。本文将介绍如何利用外卖系统源码来…...

数据分析数据 -(用数据讲故事)
书中有一句话我很喜欢- 献给大家 一个完美的设计,不是因为它没有多余的东西可以添加,而是它没有多余的部分可以删减 首先看几个对比的图形分析 处理工单和新增工单的随月份的变化趋势 这个图形的缺点就是 1: 月份对齐的情况 2:使用条形图需…...

如何运用5W2H分析法分析自己适合哪种办公室
随着时代的发展,办公室已经不再是传统的四壁之内,而是多种多样的形态,涵盖了开放式办公区、远程办公、共享办公空间等多种选择。对于刚刚创业的企业来说,选择一个适合自己发展的办公室至关重要。在这个过程中,运用5W2H…...

为什么考虑电子采购而非传统采购?
采购是重要的业务职能之一,为实现无缝运营而大规模采购商品或服务的行为。考虑到数字化转型带来的影响,决策者对于应维持传统采购还是转向电子采购或多或少会有困惑。 通过本文,你将更了解电子采购和传统采购,从而为业务连续性采…...

【git】git update-index --assume-unchanged(不改动.gitignore实现忽略文件)
文章目录 原因分析:添加忽略文件(取消跟踪)的命令:取消忽略文件(恢复跟踪)的命令:查看已经添加了忽略文件(取消跟踪)的命令: 原因分析: 已经维护的项目,文件已经被追踪,gitignore文件不方便修…...
科普类——无压缩图像传输带宽的计算(七)
无压缩图像传输带宽的计算 问题计算 问题 要计算1080p(1920x1080)分辨率的彩色图像在30帧每秒(fps)下的带宽需求,我们需要考虑图像的颜色深度(位深)和压缩情况。假设我们使用的是无压缩的RGB图…...
云原生周刊:K8s 1.26 到 1.29 版本的更新 | 2024.1.29
开源项目推荐 Skaffold Skaffold 是一个命令行工具,有助于 Kubernetes 应用程序的持续开发。您可以在本地迭代应用程序源代码,然后部署到本地或远程 Kubernetes 集群。Skaffold 处理构建、推送和部署应用程序的工作流程。它还提供构建块并描述 CI/CD 流…...

手机壳也能散热了?
作为一个玩了6年的王者荣耀玩家,手机发热真的很影响游戏体验!!游戏掉帧,性能下降很恼人,试过好几个散热工具,实际效果都不太好~ 自从入了Mate 60之后,看着这款微泵液冷壳毫无犹豫第…...
《微信小程序开发从入门到实战》学习九十七
7.3 表单组件 7.3.1 picke-view与picker-view-column组件 一个picker-view-column代表 一个滚动选择器子项,一个picker-view组件可以包含多个picker-view-column组件,这样可以一次性选择多项内容如年、月、日等。 picker-view-column组件中需包含多个…...

二极管漏电流对单片机ad采样偏差的影响
1,下图是常规的单片机采集电压电路,被测量电压经过电阻分压,给到mcu采集,反向二极管起到钳位作用,避免高压打坏mcu。 2,该电路存在的问题 二极管存在漏电流,会在100k电阻上产生叠加电压&#x…...

三、防御保护---防火墙安全策略篇
三、防御保护---防火墙安全策略篇 一、什么是安全策略二、安全策略的组成1.匹配条件2.动作3.策略标识 三、防火墙的状态检测和会话表1.会话表2.状态检测技术 四、ASPF--隐形通道五、用户认证1.用户认证的分类2.认证方式3.认证策略4.认证域 一、什么是安全策略 传统的包过滤防火…...

【学网攻】 第(15)节 -- 标准ACL访问控制列表
系列文章目录 目录 系列文章目录 文章目录 前言 一、ACL(访问控制列表)是什么? 二、实验 1.引入 实验拓扑图 实验配置 测试PC2能否Ping通PC3 配置ACL访问控制 实验验证 PC1 Ping PC3 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认…...

【图像分割】【深度学习】Windows10下UNet代码Pytorch实现与源码讲解
【图像分割】【深度学习】Windows10下UNet代码Pytorch实现与源码讲解 提示:最近开始在【医学图像分割】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【图像分割】【深度学习】Windows10下UNet代码Pytorch实现与源码讲解前言UNet模型运行环境搭…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

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

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...