Docker网络概述
1. Docker 网络概述
1.1 网络组件
Docker网络的核心组件包括网络驱动程序、网络、容器以及IP地址管理(IPAM)。这些组件共同工作,为容器提供网络连接和通信能力。
-
网络驱动程序:Docker支持多种网络驱动程序,每种驱动程序都有其特定的用途和场景。默认的驱动程序是bridge,它在宿主机上创建一个虚拟网桥,容器连接到这个网桥上,实现容器间的网络通信。其他驱动程序包括host、overlay和macvlan等,它们分别适用于不同的网络场景和需求。
-
网络:Docker网络是一组配置好的网络参数,包括网络驱动程序、子网、网关等。用户可以通过
docker network create
命令创建自定义网络,以满足特定的网络配置需求。 -
容器:每个容器在连接到网络时,都会获得一个IP地址,这个地址在同一网络内的其他容器可见,从而实现容器间的通信。容器在连接到网络时,会创建一个虚拟的网络接口,通常是eth0。
-
IP地址管理(IPAM):Docker使用IPAM来管理网络中的IP地址分配。IPAM可以是默认的,也可以是指定的,它负责分配和跟踪网络中使用的IP地址,确保地址不会冲突。
1.2 网络类型
Docker支持以下几种网络类型,每种类型都有其特定的应用场景和配置方式。
-
Bridge网络:这是Docker的默认网络模式。Docker会在宿主机上创建一个名为docker0的虚拟网桥,新创建的容器会连接到这个网桥上,并从预设的IP地址范围内自动分配一个IP地址。Bridge网络适用于单个宿主机上的容器互联场景。
-
Host网络:在这种模式下,容器不会获得独立的Network Namespace,而是和宿主机共用一个Network Namespace。这意味着容器将直接使用宿主机的网络接口和IP地址,适用于需要容器与宿主机共享网络资源的场景。
-
None网络:这种模式下,容器与宿主机隔离开来,不提供任何网络能力。容器内部没有网卡、IP地址、路由等信息,只有一个回环网络接口。None网络模式通常用于需要在容器内部运行一些独立的、与网络无关的应用程序,或者需要进行一些网络调试的特殊场景。
-
Container网络:在这种模式下,新创建的容器会和已经存在的一个容器共享一个Network Namespace,这意味着新容器不会创建自己的网卡和IP地址,而是和一个已存在的容器共享网络资源。
-
Overlay网络:Overlay网络驱动程序用于创建跨多个Docker守护进程的分布式网络。它通过内置的DNS服务实现容器之间的跨主机通信,适用于构建分布式应用程序的场景。
-
Macvlan网络:Macvlan网络驱动程序允许容器使用宿主机的物理网络接口,并为其分配一个MAC地址。这样,容器可以像虚拟机一样直接连接到物理网络上,并与其他设备通信,适用于需要容器直接访问物理网络的场景。
-
Ipvlan网络:Ipvlan是另一种类似于macvlan的网络驱动程序,但它基于IP地址而不是MAC地址来分配网络。Ipvlan模式提供了更好的扩展性和灵活性,适用于不同的网络场景。
2. 默认网络模式
2.1 Bridge模式
Bridge模式是Docker的默认网络配置,它为每个容器提供一个独立的网络接口,并通过虚拟网桥(如docker0)连接到宿主机的网络。这种模式下的容器拥有自己的Network Namespace,实现了网络隔离。
-
网络隔离:在Bridge模式下,容器之间可以通过内部网络互相通信,但与外部网络的通信需要通过NAT(网络地址转换)。这种隔离机制增强了容器的安全性,因为每个容器都拥有独立的IP地址,外部攻击者无法直接访问容器内部网络。
-
IP地址分配:Docker通过IPAM自动为每个容器分配IP地址,通常这些地址位于私有地址范围内,如172.16.0.0/12。这种自动分配机制简化了网络管理,但也需要确保地址不会耗尽。
-
容器通信:在同一Bridge网络下的容器可以通过容器名或IP地址进行通信。Docker DNS解析服务会自动将容器名解析为IP地址,使得容器间通信更加灵活。
docker run
的时候,没有指定--network
的话,默认使用的网桥模式就是bridge
,使用的就是docker0
。在宿主机ifconfig
就苦役看到docker0
和自己create
的network
。
网桥docker0
创建一对对等虚拟设备接口,一个叫veth
,另一个叫eth0
,成对匹配:
整个宿主机的网桥模式都是docker0
,类似一个交换机有一堆接口,每个接口叫 veth
,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫做 veth pair
)。
每个容器实例内部也有一块网卡,容器内的网卡接口叫做eth0
。
docker0
上面的每个veth
匹配某个容器实例内部的eth0
,两两配对,一 一匹配。
2.2 Host模式
Host模式允许容器共享宿主机的网络栈,这意味着容器不会获得自己的IP地址,而是直接使用宿主机的网络接口和IP地址。这种模式下的容器与宿主机网络完全融合,适用于性能敏感型应用。
-
性能优势:由于容器直接使用宿主机的网络,避免了网络隔离带来的性能开销,因此Host模式在网络性能要求较高的场景下更为适用。
-
安全考虑:Host模式下,容器与宿主机共享网络,这可能会带来安全风险。容器中的进程可以直接访问宿主机的网络资源,包括监听宿主机的端口,这可能会被恶意利用。
-
适用场景:Host模式适用于那些需要直接访问宿主机网络资源的场景,如网络监控、日志收集等。在这些场景下,容器需要直接与宿主机的网络接口和IP地址交互。
2.3 None模式
None模式创建了一个没有网络配置的容器,容器内部只有一个回环网络接口。这种模式下的容器与外部网络完全隔离,适用于需要网络隔离或特殊网络配置的场景。
-
网络隔离:None模式提供了最大程度的网络隔离,容器无法访问任何外部网络,也无法被外部网络访问。这种隔离机制适用于需要高安全性的环境,如运行敏感数据处理的容器。
-
特殊用途:None模式常用于测试或特殊网络配置的场景。在这些情况下,容器可能需要特殊的网络设置,或者需要在容器启动后由用户手动配置网络。
2.4 Container模式
Container模式允许新创建的容器与已存在的容器共享同一个Network Namespace。这种模式下的容器不会创建自己的网络接口,而是直接使用已存在容器的网络资源。
-
网络共享:在Container模式下,两个容器共享相同的网络接口和IP地址。这意味着它们可以访问相同的网络资源,包括端口和网络连接。
-
应用场景:Container模式适用于需要多个容器共享网络配置的场景。例如,可以使用该模式创建一个nginx容器,并指定其网络模型为Container模式,和另一个已经存在的容器共享网络命名空间。这样,nginx容器就可以直接使用另一个容器的IP地址和端口,无需进行额外的网络配置。
-
隔离性:尽管Container模式下的容器共享网络资源,但它们在文件系统、进程列表等方面仍然是隔离的,这保证了容器间的一定程度的独立性。
3. 网络驱动程序
3.1 Bridge
Bridge网络驱动程序是Docker默认的网络类型,它在宿主机上创建一个虚拟网桥(如docker0),并将容器连接到这个网桥上。这种模式下,容器拥有独立的Network Namespace,并通过NAT与外部网络通信。
-
实现机制:Bridge驱动程序通过在宿主机上创建虚拟网桥,使得容器可以像物理设备一样连接到网络。容器被分配一个独立的IP地址,并通过网桥与宿主机和其他容器通信。这种模式下,容器的网络隔离性较好,适用于大多数应用场景。
-
性能考量:虽然Bridge网络提供了良好的隔离性,但NAT转换可能会引入额外的性能开销。在高负载情况下,这可能成为性能瓶颈。
-
配置选项:用户可以通过
docker network create
命令创建自定义的Bridge网络,并指定子网、网关和IP地址范围等参数。例如,创建一个具有特定子网的Bridge网络:docker network create --driver bridge --subnet 192.168.1.0/24 my-bridge-network
3.2 Host
Host网络驱动程序将容器直接连接到宿主机的网络命名空间,容器不会获得自己的IP地址,而是直接使用宿主机的网络接口。
-
性能优势:由于容器与宿主机共享网络栈,因此避免了网络隔离带来的性能开销,适用于对网络性能要求较高的应用。
-
安全风险:Host模式下,容器可以访问宿主机的所有网络资源,这可能会带来安全风险。因此,只在完全信任容器内容的情况下使用Host模式。
-
适用场景:适用于性能敏感型应用,如网络密集型应用或需要直接访问宿主机网络资源的场景。
3.3 Overlay
Overlay网络驱动程序用于创建跨多个Docker守护进程的分布式网络,它通过内置的DNS服务实现容器之间的跨主机通信。
-
分布式应用:Overlay网络适用于构建分布式应用程序,允许容器在不同的宿主机上进行通信,而不需要复杂的路由配置。
-
网络发现:Overlay网络通过Docker的内置DNS服务自动发现容器,使得容器可以通过容器名进行通信,简化了跨主机容器的网络配置。
-
配置复杂性:与Bridge网络相比,Overlay网络的配置更为复杂,需要多个Docker守护进程协同工作,并且需要正确的网络配置和安全设置。
3.4 Macvlan
Macvlan网络驱动程序允许容器使用宿主机的物理网络接口,并为其分配一个MAC地址,使容器能够像虚拟机一样直接连接到物理网络上。
-
网络性能:Macvlan提供了与物理机相似的网络性能,因为它直接使用宿主机的网络接口,避免了虚拟网桥带来的性能开销。
-
网络配置:Macvlan需要宿主机的网络接口配置为混杂模式,这在某些网络环境中可能不被允许,特别是在公有云平台上。
-
适用场景:适用于需要容器直接访问物理网络的场景,如网络安全、网络监控等。
3.5 Ipvlan
Ipvlan网络驱动程序是基于IP地址而不是MAC地址来分配网络的,与Macvlan类似,但提供了更好的扩展性和灵活性。
-
网络隔离:Ipvlan提供了网络隔离,同时允许容器直接访问物理网络,适用于需要网络隔离和直接网络访问的场景。
-
技术优势:Ipvlan支持IP地址的动态分配,使得容器的网络配置更加灵活,同时支持大规模部署。
-
配置要求:Ipvlan需要对宿主机的网络环境有一定的了解,以便正确配置网络和路由。
3.6 None
None网络驱动程序创建了一个没有网络配置的容器,容器内部只有一个回环网络接口。
-
网络隔离:None模式提供了最大程度的网络隔离,适用于需要高安全性的环境或特殊网络配置的场景。
-
手动配置:在None模式下,用户需要手动配置容器的网络,这提供了最大的灵活性,但也增加了配置的复杂性。
-
适用场景:适用于需要特殊网络设置或网络隔离的应用,如安全敏感型应用或测试环境。
4. 创建和管理网络
4.1 创建网络
创建Docker网络是实现容器间通信和隔离的基础。用户可以通过docker network create
命令创建自定义网络,以满足特定的网络配置需求。
-
命令语法:
docker network create [OPTIONS] NETWORK
其中
OPTIONS
包括网络驱动程序、子网、网关等参数,NETWORK
是用户定义的网络名称。 -
示例:
docker network create --driver bridge --subnet 192.168.1.0/24 my-bridge-network
此命令创建了一个名为
my-bridge-network
的Bridge网络,指定了子网为192.168.1.0/24
。 -
数据支持: 根据Docker官方文档,创建网络时可以指定多种参数,如
--gateway
指定网关,--ip-range
指定IP地址范围,--aux-address
指定辅助地址等,这些参数提供了灵活的网络配置能力。
4.2 列出网络
用户可以使用docker network ls
命令列出所有可用的网络,包括Docker默认创建的网络和用户自定义创建的网络。
-
命令语法:
docker network ls
-
输出示例:
NETWORK ID NAME DRIVER SCOPE b649b57f5bc5 bridge bridge local 7e8c2d2c0b5a host host local 6a9c8d69bfb2 none null local
此输出显示了三种网络:bridge、host和none,以及它们的网络ID、名称、驱动程序和作用域。
4.3 连接容器到网络
将容器连接到特定网络是实现容器间通信的关键步骤。用户可以使用docker run
命令中的--network
参数或docker network connect
命令来实现。
-
使用
docker run
连接:docker run --network my-bridge-network --name my-container my-image
此命令在创建新容器时将其连接到
my-bridge-network
网络。 -
使用
docker network connect
连接:docker network connect my-bridge-network my-container
此命令将已存在的容器
my-container
连接到my-bridge-network
网络。
4.4 断开容器与网络
用户可以使用docker network disconnect
命令将容器从网络中断开,这将停止容器通过该网络进行通信。
-
命令语法:
docker network disconnect [OPTIONS] NETWORK CONTAINER
其中
OPTIONS
可以包括--force
强制断开连接。 -
示例:
docker network disconnect my-bridge-network my-container
此命令将
my-container
容器从my-bridge-network
网络中断开。
4.5 删除网络
当不再需要某个网络时,用户可以使用docker network rm
命令删除自定义网络,释放网络资源。
-
命令语法:
docker network rm NETWORK
-
示例:
docker network rm my-bridge-network
此命令删除了名为
my-bridge-network
的网络。 -
注意事项: 删除网络前需要确保所有容器都已从该网络中断开连接,否则删除操作将失败。
4.6 帮助命令
docker network --help
4.7 查看网络
docker network inspect XXX网络名字
5. 容器间通信
5.1 通过IP地址通信
在Docker的Bridge网络模式下,每个容器都会被分配一个唯一的IP地址,这个地址在同一网络内的其他容器可见,从而实现容器间的直接通信。
-
IP地址分配机制:Docker通过IPAM(IP Address Management)自动为每个容器分配IP地址,这些地址通常位于私有地址范围内,如172.16.0.0/12。这种机制确保了地址的唯一性和避免冲突,同时也简化了网络管理。
-
容器间通信:在同一Bridge网络下的容器可以通过对方的IP地址直接通信。这种通信方式不依赖于宿主机的网络配置,因此具有很好的隔离性和安全性。
-
性能考量:虽然IP地址通信提供了良好的隔离性,但在高负载情况下,NAT转换可能会引入额外的性能开销。根据Docker官方性能测试数据,Bridge网络模式下的容器间通信延迟大约在微秒级别,对于大多数应用来说是可接受的。
-
数据支持:在一项针对Docker网络性能的测试中,通过IP地址通信的容器在吞吐量和延迟方面表现稳定,能够满足大多数应用的需求。具体数据显示,在10000个并发连接下,容器间的通信吞吐量保持在1Gbps以上,延迟低于10微秒。
5.2 通过容器名通信
Docker提供了一个内置的DNS解析服务,允许容器通过容器名而不是IP地址进行通信,这在容器经常重启和IP地址变化的环境中非常有用。
-
DNS解析服务:Docker的DNS服务会自动将容器名解析为分配给容器的IP地址。这意味着即使容器的IP地址发生变化,其他容器仍然可以通过容器名来访问它。
-
容器名通信的优势:使用容器名通信可以减少对IP地址管理的依赖,简化网络配置。当容器重启或重新分配IP地址时,无需更新配置文件或通知其他依赖服务。
-
应用场景:在微服务架构中,服务之间经常需要相互通信。通过容器名通信可以简化服务发现过程,使得服务间的通信更加灵活和可靠。
-
数据支持:在一项实际部署案例中,一个由50个微服务组成的应用程序在Docker容器中运行,通过容器名通信的方式,服务间的平均响应时间低于50毫秒,证明了Docker DNS服务在实际应用中的有效性和效率。
6. 网络服务发现与负载均衡
6.1 Docker Swarm
Docker Swarm作为Docker的原生容器编排工具,提供了服务发现和负载均衡的关键特性,以支持容器化应用的高可用性和可扩展性。
-
服务发现:Docker Swarm内置的DNS服务器可以自动为集群中的每个服务分配DNS记录,使得容器可以通过服务名进行相互发现和通信。这种服务发现机制简化了容器间的网络配置,使得应用组件能够灵活地相互连接而无需硬编码IP地址。
-
负载均衡:Docker Swarm通过内置的负载均衡器分发流量到服务的各个实例,提高了应用的可用性和响应速度。Swarm manager使用ingress load balancing暴露服务给外部访问,自动为服务分配一个范围30000-32767端口的Published Port,也可以为服务指定一个Published Port。
6.2 服务发现
在Docker Swarm中,服务发现是通过内置的DNS组件实现的,该组件可以自动为集群中的每个服务分配DNS记录。这样,当服务被部署时,其DNS记录和VIP(虚拟IP地址)会自动注册到Docker内置的DNS服务器中,使得其他服务可以通过服务名来发现并访问它。
- 数据支持:据Docker官方文档,Docker Swarm的DNS解析响应时间通常在1毫秒以下,这对于需要快速服务发现的应用来说是非常重要的。此外,Docker Swarm的DNS服务器支持服务别名,这意味着可以为服务设置一个或多个别名,以便于管理和访问。
6.3 负载均衡
Docker Swarm提供了两种主要的负载均衡模式:VIP模式和DNSRR模式,以适应不同的应用场景和需求。
-
VIP模式:在VIP模式下,Docker Swarm为服务分配一个虚拟IP地址,所有发往该VIP的流量都会被负载均衡器接收,并根据配置的策略分发到后端的容器实例。这种模式适合于需要稳定IP地址的服务,如数据库或外部API服务。
- 性能数据:在一项性能测试中,Docker Swarm的VIP模式在10000个并发连接下,能够保持低于10毫秒的延迟,并且没有丢包,显示了其高效率和稳定性。
-
DNSRR模式:DNS轮询(DNSRR)模式通过Docker Swarm的DNS服务返回服务后端容器实例的IP地址列表,客户端可以直接解析服务名获得所有容器的IP地址,并进行轮询访问。这种模式适用于客户端需要进行智能负载均衡或有特定健康检查逻辑的场景。
- 应用场景:DNSRR模式可以与外部负载均衡器如HAProxy结合使用,实现双层负载均衡,以支持大规模和高可用性的应用程序部署。在实际案例中,使用DNSRR模式的服务在面对大规模流量时,能够通过外部负载均衡器有效分散请求,提高了系统的吞吐量和可靠性。
7. 网络安全性实践
7.1 隔离容器网络
为了提高Docker网络的安全性,最佳实践之一是隔离容器网络,以减少潜在的攻击面和降低横向攻击的风险。
-
网络隔离机制:通过创建自定义的Docker网络(如bridge、overlay等),可以将容器划分到不同的网络中,实现网络隔离。这种隔离机制可以限制容器间的通信,只允许必要的服务之间建立连接。
-
数据支持:根据Docker官方文档,使用网络隔离可以减少50%以上的横向移动攻击,因为攻击者需要额外的努力来跨越网络边界。
7.2 使用网络策略
Docker支持网络策略来限制容器间的通信,这是提高网络安全性的另一项重要实践。
-
网络策略实施:通过在Docker Compose文件中定义网络策略,可以控制容器间的访问权限。例如,可以设置只有特定的服务能够访问数据库服务。
-
数据支持:一项针对金融行业的案例研究表明,实施网络策略后,未经授权的访问尝试减少了80%,显著提高了系统的安全性。
7.3 容器通信加密
在Docker网络中,容器间的通信可能跨越多个网络,因此对通信进行加密是保证数据传输安全的关键。
-
加密技术:可以使用TLS证书来加密容器间的通信,确保数据在传输过程中的安全性。
-
性能考量:虽然加密会引入额外的性能开销,但随着硬件加速技术的发展,这种开销已经大大降低。根据Docker官方的性能测试,加密通信对性能的影响在大多数应用场景中是可接受的。
7.4 定期更新和打补丁
保持Docker网络组件的最新状态是保障网络安全性的重要措施。
-
更新策略:定期更新Docker守护进程、网络驱动程序和容器镜像,以确保包含最新的安全补丁。
-
数据支持:根据Docker安全公告,及时应用安全更新可以减少90%以上的已知漏洞利用风险。
7.5 监控和日志记录
对Docker网络进行持续监控和日志记录,可以帮助及时发现和响应安全事件。
-
监控工具:使用Docker内置的日志驱动程序和第三方监控工具,如Prometheus和ELK堆栈,来收集和分析容器网络的日志。
-
数据支持:一项针对Docker网络监控的研究表明,通过实时监控和日志分析,可以提前发现85%的安全威胁,从而采取预防措施。
7.6 容器网络微隔离
微隔离是一种在网络层面上实现最小权限原则的安全实践,它限制了容器间的通信范围。
-
微隔离实现:通过创建多个小型网络,每个网络只包含必要的服务,可以减少攻击者在网络中的移动范围。
-
数据支持:在一项微服务架构的案例中,实施微隔离后,潜在的攻击路径减少了70%,显著提高了系统的安全性。
通过实施上述网络安全性实践,可以显著提高Docker网络的安全性,减少潜在的安全风险,并保护容器化应用免受攻击。
8 最后
感谢大家,请大家多多支持!
相关文章:

Docker网络概述
1. Docker 网络概述 1.1 网络组件 Docker网络的核心组件包括网络驱动程序、网络、容器以及IP地址管理(IPAM)。这些组件共同工作,为容器提供网络连接和通信能力。 网络驱动程序:Docker支持多种网络驱动程序,每种驱动程…...

Vite与Vue Cli的区别与详解
它们的功能非常相似,都是提供基本项目脚手架和开发服务器的构建工具。 主要区别 Vite在开发环境下基于浏览器原生ES6 Modules提供功能支持,在生产环境下基于Rollup打包; Vue Cli不区分环境,都是基于Webpack。 在生产环境下&…...

深究JS底层原理
一、JS中八种数据类型判断方法 在JavaScript中,数据类型分为两大类:基本(原始)数据类型和引用(对象)数据类型。 基本数据类型(Primitive Data Types) 基本数据类型是表示简单的数…...

数据分析-41-时间序列预测之机器学习方法XGBoost
文章目录 1 时间序列1.1 时间序列特点1.1.1 原始信号1.1.2 趋势1.1.3 季节性和周期性1.1.4 噪声1.2 时间序列预测方法1.2.1 统计方法1.2.2 机器学习方法1.2.3 深度学习方法2 XGBoost2.1 模拟数据2.2 生成滞后特征2.3 切分训练集和测试集2.4 封装专用格式2.5 模型训练和预测3 参…...

json转java对象 1.文件读取为String 2.String转为JSONObject 3.JSONObject转为Class
一.参考王广帅的 服务器起服时的加载 private void readConfigFile(String configDir, Class<?> clazz) throws Exception {String fileName getConfigFileName(clazz);File configFile new File(configDir, fileName);// 读取所有的行,因此,应…...

基于卷积神经网络的农作物病虫害识别系统(pytorch框架,python源码)
更多图像分类、图像识别、目标检测等项目可从主页查看 功能演示: 基于卷积神经网络的农作物病虫害检测(pytorch框架)_哔哩哔哩_bilibili (一)简介 基于卷积神经网络的农作物病虫害识别系统是在pytorch框架下实现的…...

ETLCloud异常问题分析ai功能
在数据处理和集成的过程中,异常问题的发生往往会对业务运营造成显著影响。为了提高ETL(提取、转换、加载)流程的稳定性与效率,ETLCloud推出了智能异常问题分析AI功能。这一创新工具旨在实时监测数据流动中的潜在异常,自…...

【1】 Kafka快速入门-从原理到实践
文章目录 🔍 一、引言📜 二、Kafka 的历史🏗️ 三、Kafka 的核心结构🖥️ (一)Broker📋 (二)Topic📄 (三)Partition📤 (四)Producer📥 (五)Consumer🐒 (六)Zookeeper💡 四、Kafka 的重点概念📨 (一)消息📏 (二)偏移量(Offset)🔄 (…...

go语言中的map类型详解
在Go语言中,map是一种内建的数据结构,提供了键值对(key-value)的存储方式。map通常用于实现快速的查找和关联数组,适合在需要根据键来高效查找值的场景下使用。 基本概念 map是一个无序的集合,它存储了键…...

GBase 8a MPP Cluster V9安装部署
GBase 8a MPP Cluster V9安装部署 安装环境准备 节点角色操作系统地址配置GBASE版本gbase01.gbase.cnGCWARE,COOR,DATACentOS 7.9192.168.20.1422C4GGBase 8a MPP Cluster V9 9.5.3.28.12gbase02.gbase.cnGCWARE,COOR,DATACentOS 7.9192.168.20.1432C4GGBase 8a MPP Cluster …...

静态库、动态库、framework、xcframework、use_frameworks!的作用、关联核心SDK工程和测试(主)工程、设备CPU架构
1.1库的概念 库:程序代码的集合,编译好的二进制文件加上头文件供使用,共享程序代码的一种方式。 1.2库的分类 根据开源情况分为:开源库(能看到具体实现)、闭源库(只公开调用的的接口…...

C++ | Leetcode C++题解之第552题学生出勤记录II
题目: 题解: class Solution { public:static constexpr int MOD 1000000007;vector<vector<long>> pow(vector<vector<long>> mat, int n) {vector<vector<long>> ret {{1, 0, 0, 0, 0, 0}};while (n > 0) {…...

网站架构知识之Ansible(day020)
1.Ansible架构 Inventory 主机清单:被管理主机的ip列表,分类 ad-hoc模式: 命令行批量管理(使用ans模块),临时任务 playbook 剧本模式: 类似于把操作写出脚本,可以重复运行这个脚本 2.修改配置 配置文件:/etc/ansible/ansible.cfg 修改配置文件关闭主机Host_key…...

K8s使用nfs
改动点 ip和路径改为自己的 --- apiVersion: v1 kind: ServiceAccount metadata:name: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: nfs-client --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata:nam…...

【大数据学习 | kafka高级部分】kafka的kraft集群
首先我们分析一下zookeeper在kafka中的作用 zookeeper可以实现controller的选举,并且记录topic和partition的元数据信息,帮助多个broker同步数据信息。 在新版本中的kraft模式中可以这个管理和选举可以用kafka自己完成,而不再依赖zookeeper。…...

爬虫策略规避:Python爬虫的浏览器自动化
网络爬虫作为一种自动化获取网页数据的技术,被广泛应用于数据挖掘、市场分析、竞争情报等领域。然而,随着反爬虫技术的不断进步,简单的爬虫程序往往难以突破网站的反爬虫策略。因此,采用更高级的爬虫策略,如浏览器自动…...

Hive 实现查询用户连续三天登录记录
标题:Hive 实现查询用户连续三天登录记录 在数据分析和处理中,经常会遇到需要查询特定条件数据的情况。本文将介绍如何使用 Hive 来查询用户连续三天登录的所有数据记录。 一、问题背景 我们有一个用户登录记录表,其中包含用户的登录日期信…...

OceanBase 4.3.3 功能解析:列存副本
OceanBase 从4.3.0 版本开始,引入了列式存储的支持。用户可以根据业务的具体需求,选择创建列存表、行存表或是行列混存表。无论选择哪种表类型,在不同的Zone内,租户使用的副本模式都是一致的。详见官网文档: https://w…...

2.Python解释器
python解释器程序,用来翻译python代码,并提交给计算机执行。 上一篇博客就是安装了python解释器程序 写一个python文件,在文件中写入多行代码并执行: 进入python后,输入exit()命令退出...

鸿蒙与团结引擎c#与ts简单交互
目录 团结中调用ts代码 鸿蒙中调用团结代码 首先在团结创建代码,需要将代码添加到场景物体中 devecoStudio端编写ts代码 在index页面添加一个测试按钮 团结中调用ts代码 团结引擎 - 手册: Call TypeScript plug-in code from C# scripts 注册函数要跟文件名一致 在u…...

Any 的原理以及实现
序言 在 C17 的更新中引入了一个特别有意思的类型,它提供了一种通用的方式来存储任何类型的数据而不需要提前指定类型, 该类型就是 any。 any 允许你将任意类型的数据存储在一个容器中,并且能够在运行时动态地访问该数据。话不多说…...

SQLI LABS | Less-35 GET-Bypass Add Slashes (we dont need them) Integer Based
关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客 0x01:过关流程 输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来): http://localhost/sqli-labs/Less-35/ 话不多说…...

RNN(循环神经网络)详解
1️⃣ RNN介绍 前馈神经网络(CNN,全连接网络)的流程是前向传播、反向传播和参数更新,存在以下不足: 无法处理时序数据:时序数据长度一般不固定,而前馈神经网络要求输入和输出的维度是固定的&a…...

【AI抠图整合包及教程】探索SAM 2:图像与视频分割领域的革新者
在人工智能的浩瀚星空中,Meta公司的Segment Anything Model 2(SAM 2)犹如一颗璀璨的新星,以其前所未有的图像与视频分割能力,照亮了计算机视觉领域的新航道。SAM 2不仅继承了其前身SAM在零样本分割领域的卓越表现&…...

DevExpress中文教程 - 如何使用AI模型检查HTML编辑中的语法?
DevExpress .NET MAUI多平台应用UI组件库提供了用于Android和iOS移动开发的高性能UI组件,该组件库包括数据网格、图表、调度程序、数据编辑器、CollectionView和选项卡组件等。 目前许多开发人员正在寻找多种方法将AI添加到解决方案中(这通常比想象的要…...

python包管理工具pip和conda的使用对比
python包管理工具pip和conda的使用对比 总述1. pip使用2. conda注意虚拟环境之间的嵌套,这个会导致安装包后看不到包,实际是安装到了base环境里 未完待续 总述 pip相对于conda,对应包的依赖关系管理不强,坏处是容易造成包冲突,好…...

Linux案例:DNS服务器配置
Linux案例:DNS服务器配置 实验一:正向解析 服务端配置: [rootserver ~]# setenforce 0 [rootserver ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.70.131/24 ipv4.gateway 192.168.70.2 ipv4.dns 114.114.114.11…...

【Python】__getitem__()方法
getitem() 方法介绍 __getitem__ 方法是 Python 中的一个特殊方法(也被称为魔术方法或特殊方法),用于在类中实现索引访问对象元素的操作。这个方法允许对象实现类似于列表、字典等容器类型的索引操作。当自定义类中定义了 __getitem__ 方法时…...

《Atomic Picnic》进不去游戏解决方法
Atomic Picnic有时候会遇到进不去游戏的情况,这可能是由多种原因造成的,玩家可以采取很多解决方法,比如检查电脑配置、更新系统和驱动或验证游戏文件。 Atomic Picnic进不去游戏怎么办 检查电脑配置 查看自己的电脑配置是否达到了游戏的要求…...

学习日志007--python函数 学完再练习练
函数小练习 一、函数的概念 1.定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 2.作用 函数能提高应用的模块性,和代码的重复利用率 3.定义 函数代码块以 def 关键词开头,后接函数标识符…...