【Docker】docker原理及使用-1

news2024/12/25 12:14:19
在这里插入图片描述

Docker目录

  • 1️⃣概念
    • 2️⃣使用容器的好处
    • 2️⃣docker和普通软件启动方式的区别
    • 2️⃣docker和传统虚拟机的区别
  • 1️⃣下载安装
    • 2️⃣安装步骤
  • 1️⃣必须要掌握的核心概念
  • 1️⃣命令
    • 2️⃣例子
    • 2️⃣练习题目
    • 2️⃣进入一下python环境(简洁)
  • 1️⃣解释一下 redis
  • 1️⃣docker底层隔离机制
    • 2️⃣命名空间
    • 2️⃣容器在底层是如果做隔离的,如何进行资源限制的?
    • 2️⃣假如我们不使用容器进程,我们想限制一个Linux系统里的进程使用多少cpu
  • 1️⃣命令的延申
  • 1️⃣docker的状态
  • 1️⃣镜像的导入和导出

1️⃣概念

docker:

1.是什么?
就是一个软件
跑容器的软件

2.有什么作用,解决了什么问题?
将任何软件都可以放到容器里去运行
更加节约企业的服务器资源,降低基础设施成本
软件的快速部署和缩放—》改变了软件部署和安装的方式

docker 是一个非常著名的容器软件

容器(container):一个轻量级的虚拟机 —>拥有程序在容器里运行

使用容器的好处:

消耗的内存,cpu等资源相对虚拟机而言要少,成本要更加低,管理起来更加方便和快捷
1.降低运行软件的成本
2.提升了效率 ------> 简称:降本增效

物理机----》虚拟机---》容器
颗粒度越来越小 ---》成本越来越低

官方网站:Docker: Accelerated Container Application Development

kubernetes —>k8s是容器集群管理软件—》底层是管理容器—>docker,coreOS(rocket)

containerd 是docker开源的底层的容器技术

最新版的k8s: 默认情况下不支持 docker了,使用开源的 containerd

2️⃣使用容器的好处

使用容器的好处:
1.成本低廉
2.管理方便

成本低
颗粒度更加小的虚拟化技术–》容器技术–》可以控制资源

很多企业里的物理机的资源使用率比较低,一个业务一群机器,导致大量的资源浪费,成本过高

docker技术可以控制资源的使用率,可以让物理机很饱和的运行–》减少机器的数量,同时业务也能正常的运行

使用docker可以降低基础设施成本

降本增效

2️⃣docker和普通软件启动方式的区别

docker启动镜像的方式---->颠覆了我们传统的软件安装方式—>非常新颖的软件部署和安装的方式

源代码或者安装程序---->手工去运行—>安装到某平台服务器的某个位置–>然后去启动

在这里插入图片描述

2️⃣docker和传统虚拟机的区别

特征虚拟机容器
隔离级别操作系统级进程级
隔离策略HypervisorCGroups
导系统资源5~15%0~5%
启动时间分钟级秒级
镜像存储GB-TBKB-MB
集群规模上百上万
高可用策略备份、容灾、迁移弹性、负载、动态

docker的优势:

  • 启动速度快
  • 消耗资源小
    • 资源可以控制—》cpu和内存,磁盘速度,io等
    • 共用宿主机的内核,基础镜像,消耗的内存少
  • 扩展方便

docker的缺点:

  • app的隔离这块,没有虚拟机彻底
  • 虚拟机的安全性要高一点

层次不一样:

  • 虚拟机多一层封装

在这里插入图片描述

1️⃣下载安装

2️⃣安装步骤

'1.卸载原来安装过的docker,如果没有安装可以不需要卸载'
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
'2.安装yum相关的工具,下载docker-ce.repo文件'
[root@cali ~]# 
[root@cali ~] yum install -y yum-utils -y
 [root@cali ~]yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
下载docker-ce.repo文件存放在/etc/yum.repos.d
仓库文件: 就是告诉我们的服务器去哪里下载软件的文件,里面有下载软件的网址 repository --》类似于一个藏宝图的作用

[root@cali yum.repos.d] pwd
/etc/yum.repos.d
[root@cali yum.repos.d] ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo          docker-ce.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  CentOS-x86_64-kernel.repo  nginx.repo
[root@cali yum.repos.d]# 

'3.安装docker-ce软件'
container engine 容器引擎
docker是一个容器管理的软件
docker-ce 是服务器端软件 server
docker-ce-cli 是客户端软件 client
docker-compose-plugin 是compose插件,用来批量启动很多容器,在单台机器上
containerd.io  底层用来启动容器的
docker-compose-plugin 对docker-ce-cli的支持的插件
[root@cali yum.repos.d]yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin  docker-compose-plugin  -y
[root@localhost yum.repos.d] docker version  查看docker版本
Client: Docker Engine - Community
 Version:           23.0.1
 API version:       1.42
 Go version:        go1.19.5
 Git commit:        a5ee5b1
 Built:             Thu Feb  9 19:51:00 2023
 OS/Arch:           linux/amd64
 Context:           default
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@localhost yum.repos.d]# 

'4.启动docker服务'
[root@cali yum.repos.d] systemctl start docker
[root@cali yum.repos.d] ps aux|grep docker
root       1892  1.4  1.5 1095108 58972 ?       Ssl  11:39   0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root       2029  0.0  0.0 112824   976 pts/0    S+   11:40   0:00 grep --color=auto docker
[root@cali yum.repos.d]# 
'5.设置docker服务开机启动'
[root@cali yum.repos.d] systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@cali yum.repos.d]# 

'6.关闭防火墙和selinux'
[root@scdocker yum.repos.d] service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@scdocker yum.repos.d] systemctl disable firewalld 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@scdocker yum.repos.d]#
[root@scdocker yum.repos.d] setenforce 0
[root@scdocker yum.repos.d] vim /etc/selinux/config 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled    #修改为disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

'7.重启docker服务'
[root@scdocker yum.repos.d] service docker restart
Redirecting to /bin/systemctl restart docker.service
[root@scdocker yum.repos.d]#
[root@localhost yum.repos.d] cat docker-ce.repo ---->类似于藏宝图

[root@localhost yum.repos.d] systemctl start docker ----》启动docker

[root@localhost yum.repos.d] systemctl enable docker ---->设置开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

了解:卸载docker

# 1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2.删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
# /var/lib/docker  docker的默认工作路径

1️⃣必须要掌握的核心概念

docker里的3个非常重要的概念:

1.镜像 (image)—>包含了一个微型操作系统+业务核心代码+其他依赖软件的软件单元
image=micro OS + app code + 其他库

2.仓库 repository: 网上存放镜像的地方,docker官方提供了,阿里云也提供

镜像的集市

镜像是别人做出来上传到仓库里的

3.容器 container :运行镜像的地方,在操作系统里本质上就是启动一个进程来运行镜像,将镜像里的软件在一个隔离的环境里运行

docker images —>查看本机有哪些容器
docker ps —>查看正在运行的容器
docker ps -a —>查看停止的容器
docker run —> 运行容器 ,-p是发布容器出去
docker search go —>可以查找镜像
docker pull 软件名 —>把软件的镜像拉取下来
docker stop 容器名 —>停止容器 这个容器名是自己起的那个

修改dns服务器: /etc/resolv.conf
下边加一个 114.114.114.114

在这里插入图片描述

1️⃣命令

查看我有有哪些镜像: docker images

'拉取nginx镜像'
[root@localhost docker]# docker pull nginx 
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@localhost docker]# 
'看我目前拉起了几个镜像'
[root@localhost docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    9c7a54a9a43c   3 months ago    13.3kB
nginx         latest    605c77e624dd   19 months ago   141MB
[root@localhost docker]# 
'运行容器'
[root@localhost docker]# docker run --name sc-nginx-1 -p 8080:80 -d --cpu-shares 10 --cpus 1 --cpuset-cpus 0 -m 10000000 nginx
2815f0849edc9e049badf5c99e07cfcf0c1e11f954fcbd2f8eeacffa90896e5e
[root@localhost docker]# ^C
[root@localhost docker]# 
'查看正在运行的容器有哪些'
[root@localhost docker]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS          PORTS                                   NAMES
2815f0849edc   nginx     "/docker-entrypoint.…"   36 seconds ago   Up 34 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   sc-nginx-1
[root@localhost docker]# ^C
[root@localhost docker] docker ps
'看容器的详细信息'
[root@localhost docker] docker inspect sc-nginx-1

在这里插入图片描述

'看最下边那条'
[root@localhost docker] iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0           
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:80

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.2:80
[root@localhost docker]# 

docker-proxy —>是docker提供的一个进程,监听对外发布的端口号—>监听发布的端口

[root@localhost docker] netstat -anplut
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      17974/docker-proxy  

docker的网络宿主机:

在这里插入图片描述

2️⃣例子

启动mysql

1.下载镜像

#查找镜像:
[root@localhost docker] docker search mysql

[root@localhost docker] docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
mysql         5.7.43    92034fe9a41f   31 hours ago    581MB
hello-world   latest    9c7a54a9a43c   3 months ago    13.3kB
nginx         latest    605c77e624dd   19 months ago   141MB
[root@localhost docker]# 

2.启动mysql

[root@localhost docker]docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD=sc123456 -d  -p 3306:3306 mysql:5.7.43
bb066982b4234ce34166c9db007e2ba1de2e781c326ff1811d26f33830dce0f5
[root@localhost docker]# docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS             PORTS                                                  NAMES
bb066982b423   mysql:5.7.43   "docker-entrypoint.s…"   26 seconds ago      Up 25 seconds      0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   sc-mysql-1
2815f0849edc   nginx          "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:8080->80/tcp, :::8080->80/tcp                  sc-nginx-1
[root@localhost docker]# ^C
[root@localhost docker]# 

在这里插入图片描述

1s = 1000ms

docker容器可以被限制使用宿主机的cou,内存,网络,磁盘IO资源

#查看docke容器正在使用的cpu的状态
[root@localhost docker]# docker stats

CONTAINER ID   NAME         CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
bb066982b423   sc-mysql-1   0.06%     215.7MiB / 3.682GiB   5.72%     656B / 0B         0B / 583MB        27
2815f0849edc   sc-nginx-1   0.00%     5.32MiB / 9.535MiB    55.80%    2.27kB / 2.06kB   98.3kB / 17.4kB   9

进入mysqk容器内部:

[root@localhost docker]# docker exec -it sc-mysql-1 bash
bash-4.2# 

# -u是指定用户名  -p是密码  不需要空格
bash-4.2# mysql -uroot -psc123456

docker exec 是进入容器内部执行命令 —>execute
-it 是开启一个终端,进行交互式操作
sc-mysql-1 是容器的名字
bash 是进入容器后执行的命令

dockerfile : 是制作镜像的配置文件 —》配方文件

'停掉mysql'
[root@localhost docker] docker stop sc-mysql-1
sc-mysql-1
[root@localhost docker]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED       STATUS       PORTS                                   NAMES
2815f0849edc   nginx     "/docker-entrypoint.…"   2 hours ago   Up 2 hours   0.0.0.0:8080->80/tcp, :::8080->80/tcp   sc-nginx-1
[root@localhost docker]# 
'启动容器'
[root@localhost docker]# docker start sc-mysql-1
sc-mysql-1
[root@localhost docker]# 
'删除容器'
docker rm 容器的id(那一串)

2️⃣练习题目

1.想办法启动一个go语言环境的容器

  • docker pull golang
  • docker run -itd -p 8081:8080 -v /etc/docker/go:/go --name localhost-go golang
  • 在 /etc/docker/go 下边创建一个 main.go 文件
  • -v /etc/docker/go:/go 就是在本机左边创建main.go 右边:是在 docker里边的/go下边创建
  • docker exec -it localhost-go bash

2.启动一个python语言环境的容器

  • docker pull python
  • docker run -itd -p 8082:8082 -v /etc/docker/python:/python --name localhost-python python
  • 在 /etc/docker/python 下边创建一个 python.py 文件
  • -v /etc/docker/python:/python 就是在本机左边创建main.py右边:是在 docker里边的/python下边创建
  • docker exec -it localhost-python bash

3.查看容器是否启动

[root@localhost docker]# docker images

4.查看镜像是否存在

[root@localhost docker]# docker ps

5.查看启动的容器的详细信息

[root@localhost docker]# docker inspect localhost-go

6.停止go语言容器

[root@localhost docker]# docker stop localhost-go

7.再次启动go语言容器

[root@localhost docker]# docker start localhost-go

8.进入go语言的容器内部

[root@localhost docker]# docker exec -it localhost-go bash
root@a4d503918e59:/go#

解决的问题:
1.镜像的下载
2.启动容器

[root@localhost docker] docker pull golang
Using default tag: latest
latest: Pulling from library/golang
0e29546d541c: Pull complete 
9b829c73b52b: Pull complete 
cb5b7ae36172: Pull complete 
6494e4811622: Pull complete 
6e1d20a8313e: Pull complete 
593823f101dc: Pull complete 
1b4aae56cdbe: Pull complete 
Digest: sha256:c72fa9afc50b3303e8044cf28fb358b48032a548e1825819420fd40155a131cb
Status: Downloaded newer image for golang:latest
docker.io/library/golang:latest
[root@localhost docker]# ^C
[root@localhost docker]# 
[root@localhost docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
mysql         5.7.43    92034fe9a41f   32 hours ago    581MB
hello-world   latest    9c7a54a9a43c   3 months ago    13.3kB
nginx         latest    605c77e624dd   19 months ago   141MB
golang        latest    276895edf967   19 months ago   941MB
[root@localhost docker]# vim main.go
[root@localhost docker]# chmod +x main.go 
[root@localhost docker]# 
#创建容器
[root@localhost docker]# docker run -itd -p 8081:8080 -v /etc/docker/go:/go --name localhost-go golang

#进入到容器内部
docker exec -it localhost-go bash

#ls一下,再go run 运行一下
root@a4d503918e59:/go# ls
main.go
root@a4d503918e59:/go# go run main.go 
Hello,World!
root@a4d503918e59:/go# 
#查看正在运行的挂载程序
[root@localhost docker]# docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS          PORTS                                                  NAMES
a4d503918e59   golang         "bash"                    7 minutes ago       Up 11 seconds   0.0.0.0:8081->8080/tcp, :::8081->8080/tcp              localhost-go
bb066982b423   mysql:5.7.43   "docker-entrypoint.s…"   About an hour ago   Up 37 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   sc-mysql-1
2815f0849edc   nginx          "/docker-entrypoint.…"   2 hours ago         Up 2 hours      0.0.0.0:8080->80/tcp, :::8080->80/tcp                  sc-nginx-1
[root@localhost docker]# 

在这里插入图片描述

2️⃣进入一下python环境(简洁)

以交互式方式打开一个终端:

在这里插入图片描述

–rm 是退出的时候 删除这个容器

1️⃣解释一下 redis

docker pull redis

是一个 key , value的数据库软件

'运行,并发布出去'
[root@localhost ~] docker run -d --name sc-redis-1 -p 6379:6379 redis

#查看镜像是否启动
[root@localhost ~]# docker ps

#查看详细信息
[root@localhost ~]# docker inspect sc-redis-1

1️⃣docker底层隔离机制

2️⃣命名空间

命名空间:name space ----》一块地盘

是在内存中存放数据的地方,例如:存放变量,函数,库等

隔离的技术:命名空间

我们每启一个容器,背后就对应着一个进程的启动

6个命名空间

在这里插入图片描述
在这里插入图片描述

2️⃣容器在底层是如果做隔离的,如何进行资源限制的?

资源限制: Control Groups 技术 简称---->Cgroup

操作系统内核有个软件: LXC linx container技术

docker只是调用了LXC库。实现了容器的应用

–cpu-shares 10

–cups

2️⃣假如我们不使用容器进程,我们想限制一个Linux系统里的进程使用多少cpu

使用 cgroup 技术 ---->内核里边的

1️⃣命令的延申

docker

启动MySQL 容量限制cpu使用率为50% 内存为2G,如何看是否启用了限制?

docker run -d -p 3307:3306 --name sc-mysql-2 -e MYSQL_ROOT_PASSWORD='sc123456'  mysql:5.7.43

docker run的流程 👇

1.检查启动容器使用的镜像是否存在,如果不存在就先去pull镜像到本机,如果存在就创建容器
docker pull 去拉mysql:5.7.43

2.docker create ------>创建容器

3.docker start ------>启动容器

# 删除镜像
[root@localhost ~]# docker rmi busybox
Untagged: busybox:latest
Untagged: busybox@sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678
Deleted: sha256:beae173ccac6ad749f76713cf4440fe3d21d1043fe616dfbe30775815d1d0f6a
Deleted: sha256:01fd6df81c8ec7dd24bbbd72342671f41813f992999a3471b9d9cbc44ad88374

👆如果正在使用,就先停止那个容器,然后rm删除容器,再rmi删除镜像

所以说,不需要 pull 创建之类的
👇
直接 用run

1️⃣docker的状态

exited

created ---->创建好了

up

[root@localhost ~] docker run -d -p 3308:3306 --name sc-mysql-3 --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
  1. docker run -d: 这是 Docker 命令,用于创建并运行一个容器。-d 表示以后台(守护进程)模式运行容器。
  2. -p 3308:3306: 这是端口映射选项,将容器的 3306 端口映射到宿主机的 3308 端口。这样可以通过访问宿主机的 3308 端口来访问容器内运行的 MySQL 服务。
  3. --name sc-mysql-3: 这是为容器指定一个名称,方便后续对容器进行管理和操作。
  4. --cpu-shares 500: 这是 CPU 分配的选项,设置容器的 CPU 分配份额。这里设置为 500,表示该容器与其他容器相比,会优先获得更多的 CPU 资源。
  5. --cpus 2: 这是 CPU 数量的选项,设置容器可以使用的 CPU 核心数量。这里设置为 2,表示该容器可以使用两个 CPU 核心。
  6. --cpuset-cpus 0,1: 这是 CPU 亲和性的选项,设置容器可以使用的特定 CPU 核心。这里设置为 0,1,表示该容器可以使用的 CPU 核心限定在 0 号和 1 号核心。
  7. -m 2000000000: 这是内存限制的选项,限制容器可以使用的内存大小。这里设置为 2000000000,表示容器的内存限制为 2GB。
  8. --device-write-bps /dev/sda:20MB: 这是设备写入速率限制的选项,限制容器对 /dev/sda 设备的写入速率。这里设置为 20MB/s,表示容器对该设备的写入速率限制为每秒 20MB。
  9. -e MYSQL_ROOT_PASSWORD='sc123456': 这是环境变量的选项,设置容器中 MySQL 的 root 用户的密码为 sc123456。
  10. mysql:5.7.43: 这是指定要在容器中运行的镜像。这里使用的是 MySQL 5.7.43 版本的官方镜像。

综合起来,以上命令的含义是创建并运行一个名为 sc-mysql-3 的后台模式容器,将容器的 3306 端口映射到宿主机的 3308 端口,分配给容器 500 的 CPU 分配份额,使用 2 个 CPU 核心,限定容器只能使用 0 号和 1 号核心,限制容器的内存为 2GB,限制容器对 /dev/sda 设备的写入速率为每秒 20MB,设置 MySQL root 用户的密码为 sc123456,并使用 MySQL 5.7.43 版本的镜像运行容器。

1️⃣镜像的导入和导出

save -o 是导出,静态导出

[root@localhost ~] docker save -o cadvisor.tar + 镜像名字

load是导入 -i

[root@localhost docker] docker load -i cadvisor.tar 

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

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

相关文章

Spring框架中的单例bean是线程安全的吗?

无状态bean: 无状态的Bean的行为不受其内部状态的影响,每次调用都是基于传入的参数进行计算,而不依赖于任何之前的状态。 (例如上面例子:userService是不能修改的,是无状态的bean) 因此: Spring框架中的…

【位运算】Leetcode 丢失的数字

题目解析 268. 丢失的数字 本题的意思就是数组的长度为n,在[0,n]区间中寻找缺失的一个数字 算法讲解 直观思路:排序 Hash,顺序查找缺失的数字 优化:使用异或,首先将[0,n]之间所有数字异或在一起,然后将…

django 模板js文件为什么最后引入

<!-- 引入Bootstrap JS --> <script src"https://cdn.jsdelivr.net/npm/bootstrap5.3.0/dist/js/bootstrap.bundle.min.js"></script> 为什么最后引入例子 <!-- templates/inspection_records.html --><!DOCTYPE html> <html lang…

ROS2从入门到精通1-3:详解ROS2动作通信机制与自定义动作

目录 0 专栏介绍1 动作通信模型2 动作模型实现(C)3 动作模型实现(Python)4 自定义动作 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 &#x1f680;详情&a…

【论文阅读——SplitFed: When Federated Learning Meets Split Learning】

级别CCFA 1.摘要 联邦学习&#xff08;FL&#xff09;和分割学习&#xff08;SL&#xff09;是两种流行的分布式机器学习方法。两者都采用了模型对数据的场景&#xff1b;客户端在不共享原始数据的情况下训练和测试机器学习模型。由于机器学习模型的架构在客户端和服务器之间…

vue.config.js跨域问题解决

讲解视频 问题背景 目标地址&#xff1a; 而当前项目启动是http&#xff0c;协议名不同&#xff0c;所以跨域了 解决步骤和解答 1. 新建vue.config.js文件 2. 添加如下代码&#xff1a; 一般目标路径target写 域名 就可以了 但其实&#xff0c;写路径也可以&#xff0c;…

移动应用安全合规动态:网信办、金管局发文强调数据安全;3月个人信息违规抽查结果出炉!(第五期)

一、监管部门动向&#xff1a;国家互联网信息办公室公布《促进和规范数据跨境流动规定》; 工信部发布《关于网络安全保险典型服务方案目录的公示》 二、安全新闻&#xff1a;恶意软件警报&#xff01;黑客利用软件即服务攻击印度安卓用户&#xff1b;Cerberus银行恶意软件的虚…

Linux内核常见的丢包场景有哪些

目录 摘要 1 收发包处理流程 2 硬件网卡相关 2.1 ring buffer满 2.2 利用 ntuple 保证关键业务 3 arp丢包 3.1 neighbor table overflow 3.2 unresolved drops 4 conntrack丢包&#xff1a;nf_conntrack: table full 5 udp接收buffer满 6 丢包定位 6.1 dropwatch 查看丢包 6.2…

ERROR 1052 (23000): Column ‘deptno‘ in field list is ambiguous

错误原因&#xff1a; 这个错误通常是在多表查询中&#xff0c;因为你的SQL查询中包含了多个表&#xff0c;并且这些表中都有一个名为deptno的列。这会导致数据库无法确定你要引用哪个表中的 deptno列&#xff0c;从而产生歧义。 解决方法&#xff1a; 为了解决这个问…

【数据结构(六)】队列

❣博主主页: 33的博客❣ ▶️文章专栏分类:数据结构◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构知识 目录 1.前言2.概念3.队列的使用4.循环队列5.双端队列6.经典习题6.1队列实现栈6.2栈实现队…

Windows Edge 兼容性问题修复:提升用户体验的关键步骤

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Laravel/Lumen 中使用 Echo + Socket.IO-Client 实现网页即时通讯广播

此处以 Lumen 9 框架为例说明如何调试通过 Echo 服务端以及客户端 如果你是 Laravel/Lumen 10.47 用户&#xff0c;可以先了解官方的 Laravel Reverb。注意 Laravel Reverb 仅支持 Laravel/Lumen 10.47 以及 PHP 8.2Laravel Reverb 参考官网&#xff1a;https://laravel.com/d…

【C 数据结构】双向链表

文章目录 【 1. 基本原理 】【 2. 双向链表的 创建 】实例 - 输出双向链表 【 3. 双向链表 添加节点 】【 4. 双向链表 删除节点 】【 5. 双向链表查找节点 】【 7. 双向链表更改节点 】【 8. 实例 - 双向链表的 增删查改 】 【 1. 基本原理 】 表中各节点中都只包含一个指针&…

排序算法-基数排序

基数排序是一种非比较排序算法&#xff0c;它将待排序的数字按照位数进行排序。基数排序的思想是先按照个位数进行排序&#xff0c;然后按照十位数进行排序&#xff0c;接着按照百位数进行排序&#xff0c;以此类推&#xff0c;直到最高位排序完成。 基数排序的步骤如下&#x…

【Java】xxl-job的快速入门

目录 什么是xxl-job&#xff1f; XXL-Job-环境搭建 1 调度中心环境要求 2.XXL-Job(源码说明) 3.初始化“调度数据库” 3启动调度中心xxl-job-admin docker安装-配置调度中心 1.创建mysql容器&#xff0c;初始化xxl-job的SQL脚本 2.拉取镜像 3.创建容器 xxl-jo…

手机号三要素实名验证,为您打造安全可靠的账户环境

在互联网时代&#xff0c;手机号码成为了我们生活中必不可少的一部分。我们几乎所有的社交账号、银行账号、网购账号&#xff0c;都需要绑定手机号码进行认证。然而&#xff0c;随着互联网的发展&#xff0c;越来越多的账号被盗用、个人信息被泄露的案例频频发生&#xff0c;让…

ros2 launch gazebo_ros gazebo.launch.py无法启动

我的系统是ubuntu20.04&#xff0c;ros2的版本是humble&#xff0c;当运行gazebo仿真时&#xff0c;运行 ros2 launch gazebo_ros gazebo.launch.py命令&#xff0c;会出现以下问题&#xff1a; 此时&#xff0c;这个页面会卡死在第六行&#xff0c;gazebo也不会打开 但最后单…

软件无线电安全之HackRF One初探

HackRF介绍 HackRF是一款开源软件无线电&#xff08;SDR&#xff09;平台&#xff0c;由Great Scott Gadgets公司推出。它具有广泛的频率覆盖范围&#xff0c;从1 MHz到6 GHz&#xff0c;支持大部分常见的无线通信频段。采用软件定义无线电技术&#xff0c;HackRF提供了自定义…

香港服务器如何更换域名?

更换香港服务器的域名是一个相对复杂的过程&#xff0c;涉及到多个步骤和注意事项。 准备工作&#xff1a; 备份网站数据&#xff1a;在进行任何更改之前&#xff0c;务必备份您的网站数据&#xff0c;以防止数据丢失或损坏。 购买新的域名&#xff1a;如果您还没有购买新的…

职场如何有效学习充电

在现在的工作中&#xff0c;需要接触和了解各式各样的内容&#xff0c;但很多时候我自己没遇到过。而平时有感觉没什么时间&#xff0c;因此产生了这个疑问&#xff0c;看完这个课程后&#xff0c;对这块有了较为体系化的了解。 对我来说&#xff0c;学习的最终目的是充实自己…