72、docker资源管理

news2024/11/23 12:23:59

一、docker数据卷

容器和宿主机之间数据共享-----------挂载卷------------容器内的目录和宿主机的目录进行挂载。实现数据文件共享。

容器的生命周期是有限的,一旦重启所有对容器内部文件数据的修改以及保存的数据会被初始化,所以为了防止数据丢失,重要的组件一定会做数据卷。

-v:volume 指定目录

1、宿主机与容器共享挂载

[root@docker1 ~]# docker run -itd --name test1 -v /opt/test1:/opt/test2 centos:7 /bin/bash
[root@docker1 test1]# docker run -itd --name nginx1 -v /opt/test2:/etc/nginx nginx:1.22
5fdeb88d9644825e9b0ab34e285d0ca0fcf4aeaaeed74dc9275fb31b90dbbe9b

##宿主机与容器目录挂载,以宿主机挂载目录为根
[root@docker1 opt]# docker run -itd --name nginx1 -v /opt/test2:/etc/nginx nginx:1.22 /bin/bash
afb30ade9346a0f7911fdab8951d4e5eac22546fc34ec836e7ac6cacdcd0d594
[root@docker1 opt]# docker exec -it nginx1 bash
root@afb30ade9346:/# cd /etc/nginx/
root@afb30ade9346:/etc/nginx# ls

挂载卷

[root@docker1 opt]# docker run -itd --name test2 -v /etc/yum.repos.d/:/etc/yum.repos.d centos:7 /bin/bash
f8eb0fc7dcedb0c1c6561c0b1aab694480c07c171c12209f8c0ca93c3b3a17c2
[root@docker1 opt]# docker exec -it test2 bash
[root@f8eb0fc7dced /]# cd /etc/yum.repos.d/
[root@f8eb0fc7dced yum.repos.d]# ls

在这里插入图片描述

文件同步以宿主机为主

挂载目录解释

[root@docker1 test1]# docker run -itd --name nginx1 -v /opt/test2:/etc/nginx nginx:1.22
5fdeb88d9644825e9b0ab34e285d0ca0fcf4aeaaeed74dc9275fb31b90dbbe9b
-v /opt/test2:/etc/nginx

第一点:前面是宿主机目录,后面是容器内的目录

第二点:加不加斜杠,都是目录,不是文件,如果不存在,宿主机和容器自动创建

第三点:以宿主机的目录为标的,同步的是宿主机目录的内容到容器内。

第四点:挂载之后,容器内的目录的默认权限是读写权限都有。

2、容器和容器之间进行数据共享:

容器之间会需要共享数据,最简单的方法就是使用数据卷容器,可以提供容器的 一盒目录,专门来用来供其他容器进行挂载。

##容器创建共享目录/test1 /test2

##容器test1内创建共享目录/test1   /test2
[root@docker1 test1]#  docker run -itd --name test1 -v /opt/test1 -v /opt/test2 centos:7 /bin/bash
4f384934b91865a879e79e032680710611c6419035605051486e99ee62d9f8d7
[root@docker1 test1]# docker exec -it test1 bash
[root@4f384934b918 /]# cd /opt/
[root@4f384934b918 opt]# ls
test1  test2

##进入test1容器内,写文件
[root@docker1 opt]# docker exec -it test1 bash
[root@4f384934b918 /]# ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr
[root@4f384934b918 /]# cd /opt/
[root@4f384934b918 opt]# cd test1
[root@4f384934b918 test1]# echo "123" > 123
[root@4f384934b918 test1]# echo "456" > 456
[root@4f384934b918 test1]# cd /opt/test2
[root@4f384934b918 test2]# echo "789" > 789

##创建容器test2,共享目录来自于容器test1提供的共享目录

##创建容器test2,共享目录来自于容器test1提供的共享目录
[root@docker1 opt]#  docker run -itd --name test2 --volumes-from test1 centos:7 /bin/bash 
3d071983b330ca29f5b7f12f67b836a1556cf84af610f49b839f7214c9ab9c0f

##进入test2容器查看共享文件
[root@docker1 opt]# docker exec -it test2 bash
[root@3d071983b330 /]# cd /opt/
[root@3d071983b330 opt]# ls
test1  test2
[root@3d071983b330 opt]# cat test2
cat: test2: Is a directory
[root@3d071983b330 opt]# cd test2
[root@3d071983b330 test2]# ls
789
[root@3d071983b330 test2]# cat 789
789

二、容器互联

2.1、容器互联:

  • 容器与容器之间建立一条专门的网络通道,容器与容器之间通过这个通道互相通信。

  • 建立通道之后,容器之间可以通过容器名进行通信,容器之间不需要暴露端口,也不依赖宿主机的ip。

  • 在容器内部可以通过容器名直接访问另一个容器,简化容器之间的配置

1、老版本

##容器n2可以curl n1,n1不可以curl n2
[root@docker1 opt]#  docker run -itd --name n1 nginx:1.22
72a26a8d8d6b4a24e4efc78dcc3636e445e9ea8ef675ce130ff2e0a721b44bc8
[root@docker1 opt]#  docker run -itd --name n2 --link n1:n2 nginx:1.22
0254ac6815d49acca5690df36941e9f65a6a0b86aea386cc7e94c17d2b48bb8c
[root@docker1 opt]# docker exec -it n1 bash
root@72a26a8d8d6b:/# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.4	72a26a8d8d6b
root@72a26a8d8d6b:/# curl n2
curl: (6) Could not resolve host: n2
[root@docker1 opt]# docker exec -it n2 bash
root@2a7fd3483188:/# curl n1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

新版本

2、指定网段,我们先创建自定义网络。

##创建自定义网络
[root@docker1 opt]# docker network create --subnet=192.168.10.0/24 --opt "com.docker.network.brige.name"="docker2" xy102
55fd0734db67c8f5cb9a429e11b0c8361e893c051ed082b078d389bb4069930f

[root@docker1 opt]# docker network ls
NETWORK ID     NAME         DRIVER    SCOPE
3ed862dda9dc   bridge       bridge    local
2f233d494983   host         host      local
978fd8c202ba   mynetwork1   bridge    local
c87eba1e8cc7   mynetwork2   bridge    local
20b905123c24   none         null      local
55fd0734db67   xy102        bridge    local


##创建容器,网络为自定义网络
[root@docker1 opt]# docker run -itd --name n11 --network=xy102 nginx:1.22
6053f96fb04f32ce6da569080591bce025ecc43d0783e2560f97926019b243e0
[root@docker1 opt]# docker run -itd --name n22 --network=xy102 nginx:1.22
b108541d8f47f17fa30e803ee7ef816960042f1a091589adcf111b1ef569961e
##进入容器,测试容器互联
[root@docker1 opt]# docker exec -it n22 bash
root@b108541d8f47:/# curl n11       ##容器2测试容器1
[root@docker1 opt]# docker exec -it n11 bash
root@6053f96fb04f:/# curl n22       ##容器1测试容器2

三、docker容器的资源控制:

docker通过cgroup来控制容器的资源配额。包括cpu,内存,磁盘三大方面。

cgroup

control groups

linux内核提供的可以限制,记录,隔离进程所有使用的物理资源(cpu,内存,磁盘io)的机制。

1、cpu资源控制:

进程占用cpu的时间来计算。

查看cpu资源限制

[root@docker1 opt]# cd /sys/fs/cgroup/devices/
[root@docker1 devices]# ls
cgroup.clone_children  devices.allow  machine.slice      tasks
cgroup.event_control   devices.deny   notify_on_release  user.slice
cgroup.procs           devices.list   release_agent
cgroup.sane_behavior   docker         system.slice
[root@docker1 devices]# cd /sys/fs/cgroup/cpu
[root@docker1 cpu]# ls
cgroup.clone_children  cpuacct.usage         cpu.rt_runtime_us  notify_on_release
cgroup.event_control   cpuacct.usage_percpu  cpu.shares         release_agent
cgroup.procs           cpu.cfs_period_us     cpu.stat           system.slice
cgroup.sane_behavior   cpu.cfs_quota_us      docker             tasks
cpuacct.stat           cpu.rt_period_us      machine.slice      user.slice
[root@docker1 cpu]# cd /sys/fs/cgroup/cpu/docker/
[root@docker1 docker]# ls
afb30ade9346a0f7911fdab8951d4e5eac22546fc34ec836e7ac6cacdcd0d594
cgroup.clone_children
cgroup.event_control
cgroup.procs
cpuacct.stat
cpuacct.usage
cpuacct.usage_percpu
cpu.cfs_period_us
cpu.cfs_quota_us
cpu.rt_period_us
cpu.rt_runtime_us
cpu.shares
cpu.stat
f8eb0fc7dcedb0c1c6561c0b1aab694480c07c171c12209f8c0ca93c3b3a17c2
notify_on_release
tasks
[root@docker1 docker]# cd afb30ade9346a0f7911fdab8951d4e5eac22546fc34ec836e7ac6cacdcd0d594
[root@docker1 afb30ade9346a0f7911fdab8951d4e5eac22546fc34ec836e7ac6cacdcd0d594]# ls
cgroup.clone_children  cpuacct.usage         cpu.rt_period_us   notify_on_release
cgroup.event_control   cpuacct.usage_percpu  cpu.rt_runtime_us  tasks
cgroup.procs           cpu.cfs_period_us     cpu.shares
cpuacct.stat           cpu.cfs_quota_us      cpu.stat
[root@docker1 afb30ade9346a0f7911fdab8951d4e5eac22546fc34ec836e7ac6cacdcd0d594]# cat cpu.cfs_quota_us
-1
[root@docker1 afb30ade9346a0f7911fdab8951d4e5eac22546fc34ec836e7ac6cacdcd0d594]# cat cpu.cfs_period_us 
100000

cat cpu.cfs_quota_us -1

表示系统没有对该进程进行cpu限制。

cat cpu.cfs_period_us

100000微秒 100毫秒

在每个使用cpu的周期内,容器可以用指定的比列使用cpu时间

100000微秒 100毫秒 0.1秒

##利用宿主机与容器挂载共享卷,yum源进行共享

[root@docker1 yum.repos.d]# docker run -itd --name test1 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash

[root@docker1 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
--2024-08-14 11:54:02--  http://mirrors.aliyun.com/repo/Centos-7.repo
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 117.27.148.83, 117.27.148.79, 117.27.148.86, ...
正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|117.27.148.83|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:2523 (2.5K) [application/octet-stream]
正在保存至: “/etc/yum.repos.d/CentOS-Base.repo”

100%[========================================>] 2,523       --.-K/s 用时 0.001s  

2024-08-14 11:54:02 (1.94 MB/s) - 已保存 “/etc/yum.repos.d/CentOS-Base.repo” [2523/2523])

[root@docker1 yum.repos.d]# docker exec -it test1 bash
[root@1303262df61d /]# cd /etc/yum.repos.d/        
[root@1303262df61d yum.repos.d]# yum -y install epel-release
[root@1303262df61d yum.repos.d]# stress -c 4
bash: stress: command not found
[root@1303262df61d yum.repos.d]# yum -y install stress
[root@1303262df61d yum.repos.d]# stress -c 4 ##cpu开启四核,stress是模拟占用cpu的工具

查看docker—cpu运行情况

docker stats

在这里插入图片描述

##设置cpu限制为50000微秒

[root@docker1 yum.repos.d]# docker run -itd --name test2 --cpu-quota 50000 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash          ##设置cpu限制为50000微秒

##查看宿主机和容器内部的进程号

[root@docker1 yum.repos.d]# docker top test1

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                17332               17311               0                   11:38               pts/0               00:00:00            /bin/bash
root                17614               17311               0                   11:54               pts/1               00:00:00            bash
root                17732               17614               0                   11:59               pts/1               00:00:00            stress -c 4
root                17733               17732               3                   11:59               pts/1               00:01:13            stress -c 4


##pid容器在宿主机上的进程号,ppid:在容器内部的进程号

##设置cpu的资源占用比:

–cpu-share默认值是1024,必须是1024的倍数

[root@docker1 yum.repos.d]# docker run -itd --name test3 --cpu-shares 512 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash
e8a0a5ed1f53c6d1fb67a83184bc0e3a445286b9a17f34c22f5c25a4aa8fce0
[root@docker1 yum.repos.d]# docker exec -it test3 bash
[root@e8a0a5ed1f53 /]# stress -c 4
bash: stress: command not found
[root@e8a0a5ed1f53 /]# yum -y install epel-release
[root@e8a0a5ed1f53 /]# yum -y install stress
[root@e8a0a5ed1f53 /]# stress -c 4

不用stress工具,写一个死循环也可以模拟

[root@e8a0a5ed1f53 /]vi cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done

##脚本赋权执行

[root@e8a0a5ed1f53 yum.repos.d]# cd /opt/
[root@e8a0a5ed1f53 opt]# vi cpu.sh
[root@e8a0a5ed1f53 opt]# chmod +x cpu.sh 
[root@e8a0a5ed1f53 opt]# ./cpu.sh 

[root@docker1 yum.repos.d]# docker stats

##开启cpu资源限制

[root@docker1 opt]# docker run -itd --name test4 --cpu-shares 1024 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash
dae127ff48a516cb3afb456b2b125d3690836b7de37f07bb062556e8ffdb822d
[root@docker1 opt]# docker exec -it test4 bash
[root@dae127ff48a5 /]# cd /etc/yum.repos.d/
[root@dae127ff48a5 yum.repos.d]# yum -y install epel-release

GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7"
[root@dae127ff48a5 yum.repos.d]# ls
CentOS-Base.repo  epel-testing.repo  epel.repo
[root@dae127ff48a5 yum.repos.d]# rm -rf epel-testing.repo 
[root@dae127ff48a5 yum.repos.d]# yum -y install epel-release
[root@dae127ff48a5 yum.repos.d]# yum -y install stress
[root@dae127ff48a5 yum.repos.d]# stress -c 4

在这里插入图片描述

绑定cpu

 docker run -itd --name test4 --cpuset-cpus 0,2 centos:7 /bin/bash

cpu限制和绑定cpu一般是一起使用的。既限制也绑定

2、内存限制:

-memory=

-m 512m

-m 1g

单位是小写

也可以限制容器使用交换空间swap

--memory-swap=512M/1g

-m 512m
--memory-swap=lg   ##内存限制是512M,交换空间限制的大小是1g-512m=512m

##内存限制是512M,交换分区也是512m

yum,repos,dl# docker run -itd --name test5 -m 512m
--memory-swap=lg centos:7/bin/bash

--memory-swap=0或者不加-------------容器使用swap交换分区的大小为限制的内存值的两倍。

-m ##m --memory-swap=##m 容器不能使用swap交换分区,意思交换分区为##-##=0

-m 512m --memory-swap=-1内存还是受限制512m,使用交换分区不再受限,宿主机有多少swap空间,容器swap交换分区就有多少

演示占用内存

stress --vm 2 --vm-bytes 512M --vm-hang 0

3、磁盘限制

磁盘读写速度的限制和写次数限制

 docker run -itd --name test6 --device-read-bps /dev/sda:1M centos:7 /bin/bash  ##容器在磁盘上每秒只能读1M。
 kb K

mb M

gb G

磁盘的写入速度限制

[root@docker1 opt]# docker run -itd --name test6 --device-write-bps /dev/sda:1M centos:7 /bin/bash 
aed8e183c0cb479201ed86841f972350dd7757ce9b4c266d3d5c0029ce95a0a8
[root@docker1 opt]# docker exec -it test6 bash
[root@aed8e183c0cb /]# dd if=/dev/zero of=test1.txt bs=1M count=10 oflag=direct
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 10.0039 s, 1.0 MB/s  ##模拟测试写入速度

读写次数限制100次

docker run -itd --name test6 --device-read-iops /dev/sda:100 Centos:7 /bin/bash

docker run -itd --name test6 --device-write-iops /dev/sda:100 Centos:7 /bin/bash

清理容器的残留,删除停止运行的容器,删除无用的数据卷和网络。

docker system prune -a

课后练习:

1、设置3个权重 256 768 2048

3个容器设置绑定到cpu 0
设置容器绑定cpu:
–cpuset-cpus 0

[root@docker1 opt]# docker run -itd --name test1 --cpu-shares 256 --cpuset-cpus 0 centos:7 /bin/bash

[root@docker1 opt]# docker run -itd --name test2 --cpu-shares 768 --cpuset-cpus 0 centos:7 /bin/bash

[root@docker1 opt]# docker run -itd --name test3 --cpu-shares 2048 --cpuset-cpus 0 centos:7 /bin/bash



[root@docker1 yum.repos.d]# docker exec -it test1 bash
[root@f55e93844377 /]# cd /opt/
[root@f55e93844377 opt]# vi cpu.sh

#!/bin/bash
i=0
while true 
do
let i++
done

[root@f55e93844377 opt]# chmod 777 cpu.sh 
[root@f55e93844377 opt]# ll
total 4
-rwxrwxrwx. 1 root root 44 Aug 14 08:45 cpu.sh
[root@f55e93844377 opt]# ./cpu.sh 

docker stats

2、绑定到指定的cpu 1 设置占用的cpu的比重是25%,同时限制内存使用率512m。

[root@docker1 opt]# docker run -itd --name test4 --cpu-quota 25000 --cpuset-cpus 1 -m 512m centos:7 /bin/bash

[root@docker1 opt]# docker exec -it test4 bash
[root@5a9828022a4d /]# cd /opt/
[root@5a9828022a4d opt]# vi cpu.sh

#!/bin/bash
i=0
while true
do
let i++
done

[root@5a9828022a4d opt]# chmod 777 cpu.sh
[root@5a9828022a4d opt]# ./cpu.sh

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java语言程序设计基础篇_编程练习题16.22(播放、循环播放和停止播放一个音频剪辑)

题目&#xff1a;16.22&#xff08;播放、循环播放和停止播放一个音频剪辑&#xff09; 编写一个满足下面要求的程序&#xff1a; 使用AudioClip获取一个音频文件&#xff0c;该文件存放在类目录下。放置三个标记为Play、Loop和Stop的按钮&#xff0c;如图16-46a所示。单击Pla…

什么是调度中心控制台,它在现代运营管理中扮演什么角色?

在现代复杂多变的运营环境中&#xff0c;调度中心控制台作为企业内部信息管理的核心枢纽&#xff0c;扮演着至关重要的角色。它不仅是一个技术平台&#xff0c;更是企业高效运营和智能决策的重要支撑。接下来就给大家科普一下关于调度中心控制台知识点&#xff0c;及在现代运营…

HarmonyOS笔记4:从云数据库获取数据

移动应用获取数据的方式主要有&#xff1a; 1.从网络中获取数据接口API。 2.从华为云数据库获取云数据库的资源。 3.从移动终端直接获取本地的数据 在HarmonyOS笔记3中已经完成了方式一从网络中获取数据接口API的方式。在本篇笔记中&#xff0c;将讨论从云数据库中获取数据。 因…

极狐GitLab CI/CD 如何构建镜像并推送到 azure 镜像仓库?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

远程访问安全:rsync、ProFTPD、OpenSSH和VNC漏洞分析

文章目录 rsync未授权访问概念复现个别工具检测批量工具检测 proftpd远程命令介绍CVE-2015-3306复现 openssh信息泄露介绍复现 libssh身份绕过介绍条件危害复现 向日葵远程RCE介绍条件靶场&#xff1a; VNC配置不当介绍复现 在当今高度互联的数字时代&#xff0c;远程访问工具已…

[Qt][Qt 事件][上]详细讲解

目录 1.事件介绍2.事件的处理3.鼠标事件4.按键事件5.moveEvent6.resizeEvent 1.事件介绍 事件是应⽤程序内部或者外部产⽣的事情或者动作的统称 在Qt中使⽤⼀个对象来表⽰⼀个事件&#xff0c;所有的Qt事件均继承于抽象类QEvent 事件是由系统或者Qt平台本⾝在不同的时刻发出的…

深入理解C#中的yield关键字:提升迭代性能与效率

文章目录 前言一、yield return二、yield break总结 前言 在C#中&#xff0c;yield 关键字是特别用于迭代器块和方法中的&#xff0c;它允许你逐个返回序列中的元素&#xff0c;而不是一次性返回整个集合。使用 yield 可以显著提高处理大数据集或进行复杂迭代时的性能和内存效率…

【数据结构初阶】队列经典习题两道

hello&#xff01; 我是云边有个稻草人 目录 一、用队列实现栈 二、用栈实现队列 Relaxing Time &#xff01; 正文开始—— 一、用队列实现栈 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; 根据题目要求&#xff0c;我们要用两个队列来实现栈的相关功能&…

虚拟机上使用Ubuntu1804上编译qt5.12.9部署到jetson nano上

开发qt界面&#xff0c;基于Qt5.12.9&#xff0c;开发环境使用虚拟机加载Ubuntu1804&#xff0c;开发完成后的qt程序最后部署到jetson nano上&#xff0c;使用的通用编译器是gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu 安装编译器 本文中直接将gcc-linaro-7.5.0-2019.…

汇昌联信做拼多多店铺如何运营?

汇昌联信如何在拼多多上运营店铺&#xff0c;是许多电商新手和希望扩展市场的商家所关注的问题。在这个快速发展的电商平台上&#xff0c;掌握正确的运营策略&#xff0c;对于提升店铺销量、增强品牌影响力至关重要。接下来&#xff0c;我们将详细探讨如何有效运营拼多多店铺。…

Angular由一个bug说起之九:AWS S3 文件下载问题

引言 在现代 Web 开发中&#xff0c;我们经常需要处理来自全球不同地区的数据&#xff0c;这包括文件名中可能包含的非拉丁文字符。最近&#xff0c;在一个项目中&#xff0c;我们遇到了一个与 Amazon S3 服务相关的挑战&#xff0c;涉及到文件名编码的处理。当从 S3 下载文件…

Redis分布式部署方式-主从复制

分布式部署Redis方式 分布式系统&#xff0c;涉及到一个非常关键的问题&#xff1a;单点问题 单点问题&#xff1a;如果某个服务器&#xff0c;只有一个节点&#xff08;只搞一个物理服务器&#xff0c;来部署这个服务器程序&#xff09;&#xff0c;会遇到一些困难&#xff…

多线程学习之ThreadLocal详细笔记

ThreadLocal详细笔记 一、ThreadLocal的基本概念二、ThreadLocal的独特性2.1 数据访问方式2.2 线程安全实现2.3 适用场景 三、ThreadLocal 的简单使用四、ThreadLocal 的工作原理五、ThreadLocal和内存泄漏的关系5.1 ThreadLocalMap的Entry的Key设计成弱引用5.2 弱引用会导致内…

超简单4行代码-STM32F103的HAL实现有源蜂鸣器报警

1、概述 在嵌入式项目开发中&#xff0c;使用蜂鸣器作为简单的报警或提示装置非常常见。根据不同的应用场景&#xff0c;我们可能会选择有源蜂鸣器或无源蜂鸣器。本文将重点介绍如何通过STM32F103系列单片机&#xff0c;利用HAL库&#xff0c;仅通过4行代码实现对有源蜂鸣器的…

django学习入门系列之第九点《初识MySQL》

文章目录 9.1 初识网站9.2 初识MySQL下载安装创建配置文件初始化启动MySQL服务进入mysql查看已有文件夹退出&#xff08;关闭连接&#xff09;忘记密码 往期回顾 9.1 初识网站 Python相关:基础、函数、数据类型、面向、模块。前端开发直观:HTML、CSS、JavaScript、jQuery:[静态…

【运维】JetBrains Gateway (Pycharm) SSH免密连接,改为免密连接

一直要求输入密码&#xff0c;很烦人&#xff1a; 如何免密连接&#xff1f; 1 重新打开gateway&#xff0c;来到这个界面点新建连接&#xff1a; 2 点这里设置&#xff1a; 3 在这一页&#xff0c;你可以改你的所有配置&#xff0c;只要设置为password并且保存密码&…

详解Redis 高可用的方式 Redis Cluster

Redis 高可用方式 Redis 提供了多种高可用性方案&#xff0c;主要包括以下几种方式&#xff1a; 主从复制&#xff08;Replication&#xff09; 主从复制是最基本的高可用性方案&#xff0c;通过将数据从一个主节点复制到多个从节点来实现数据的冗余和读写分离。主节点负责所…

数据结构--数据结构概述

一、数据结构三要素 1. 数据的逻辑结构 数据的逻辑结构是指数据元素之间的关系和组织方式&#xff0c;通常分为线性结构和非线性结构。 线性结构&#xff1a;例如线性表&#xff0c;其中数据元素按照顺序排列&#xff0c;彼此之间存在一对一的关系。 非线性结构&#xff1a;…

android车载手机互联投屏新专题-实战作业布置

背景&#xff1a; 学习了马哥的投屏实战开发课程后&#xff0c;大家都可以实现如下图一样的手机车机多端互联的投屏场景。 即已经实现了手机和车机投屏互动&#xff0c;车机上手机画面屏幕可以与手机实体屏幕一样就是常见的Mirror模式&#xff0c;如果不一样就是课程里面讲的扩…

解析网络流量管理方案:简化基于云的DNS负载均衡

数字化时代&#xff0c;网络规模和流量需求的增长&#xff0c;催生了用户对可用性的需求、管理员对更好的访问和管理等需求。在大型的网络应用中&#xff0c;为保障站点的稳定性&#xff0c;会为服务或站点提供多台服务器&#xff0c;以平均分配每台服务器上的压力&#xff0c;…