2、docker网络和资源控制

news/2025/1/15 3:40:48/

docker网络

docker网络的类型

桥接模式:这是docker默认的网络模式,桥接模式工作在第二层,也就是数据链路层。

1、安装完成docker时,docker会自动创建一个虚拟的网络桥,类似于交换机。

2、分配唯一的ip地址,当用户创建容器时,docker会分配唯一的ip地址给创建的容器使用。ip地址的范围是在桥接网络的网段之中。当容器被销毁时,ip地址也会被回收,可以继续供下一个容器使用。

3、容器连接到网桥,当容器启动时,容器的虚拟接口 (veth pair)连接到网桥,一个端点在容器,另一个端点在主机容器于主机。

4、容器于主机通信,通过网桥模式,容器可以直接于主机进行通信。

5、容器容器之间,不同的容器在同一个网段,连接在同一个网桥上运行,容器也有唯一的ip地址,容器可以通过彼此之间的ip地址直接通信。docker会在网桥模式上自动设置路由,容器之间也可以直接交流。(docker是单节模式,容器不能实现跨主机的通信)

6、NAT(网络地址转换)docker在宿主机之间通信实际上使用的NAT的技术,也就是说暴露端口,和主机的端口进行映射,是把容器内部的私有ip地址,转换成宿主机的的ip地址。实现容器与外部之间的通信。

docker网络模式

1、bridge:默认模式

2、host模式:创建容器时,指定容器的模式为host,那么容器不会有自己的网卡,也不会有内部的IP地址。使用宿主机的IP和端口。

  • 可见容器内运行着一个nginx服务监听80端口,在Host模式下,宿主机的80端口也会被该容器内的nginx服务占用。
  • 但是容器nginx1也并没有IP地址,说明host模式容器不会有自己的网卡,而是使用宿主机的。
  • docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx0:查看容器的IP地址

3、container模式:在这个模式下,容器容器之间共享一个网络命名空间,新的容器也不会创建自己的网卡和IP,而是和另外一个容器共享IP和端口,两个容器之间除了网络是一致的,其他都还是隔离的。主要用于内部数据的通信和容器内部的挂载点。

  • 可见两个容器的net号一样,表示共享共享同一个网络
  • docker inspect -f '{{.State.Pid}}' centos1:获取容器的pid号

4、none模式:指定网络模式为none的容器,会有自己网络空间,但是没有任何网络配置。只能在容器的内部访问。用于创建容器时,进行内部的业务测试使用。

  • 可见没有分配IP地址,只能进容器内部,自己访问自己,单机中的单机。

5、自定义网络模式:用户可以给docker创建一个自定义的虚拟网桥设备,可以给这个设备自定义网段。创建容器时,可以使用自定义的网桥设备,给容器自定义IP地址。(只有先创建自定义网桥,才可以给容器指定IP地址

先创建自定义网络

  • docker network create --subnet=172.19.0.0/16 --opt "com.docker.network.bridge.name"="dokcer1" mynetwork1:也可以指定自定义网卡的名称

再创建容器时指定IP地址

docker的cgroup—资源控制

docker是通过cgroup来对资源进行限制,资源配置主要三个方面: cpu,内存和硬盘(几乎不用)。

对cpu资源的限制

1、cpu的资源配额

linux通过CFS( COMPLETELY fair scheduler)完全公平调度器,来对进程使用cpu的时间进行调度。

CFS模式的调度周期是100ms,通过这个周期来设置每个容器占用cpu的调度周期。

cpu.cfs_period_us:可调度周期,进程可以占用cpu的时间,默认所有。默认1000-1000000

cpu.cfs_quota_us:设置周期内,进程占用cpu的时间进行配额管理。默认>=1000

创建一个容器,对他进行资源限制最多只能占用50000个cpu

2、多个容器分配cpu的占比-cpu-shares

占比是按照权重来进行分配,默认是1024,必须是1024的倍数。

同时设置多个容器的权重才能生效,最少2个。

只有当容器分配的资源紧张时,才会根据配额分配cpu的占比。

分配的权重也会根据其他已经设置的容器的cpu使用情况来进行配额的管理。

3、设置容器绑定cpu

练习

1、已绑定cpu的实现资源的配置 只能占用cpu的20% 1,3

进入容器zw2,下载stress测试软件,然后模拟运行进程

2、绑定cpu实现权重比, A的比重是B的1:2(256 512)

分别进入两个容器,下载stress测试软件,然后模拟运行进程

在宿主机使用docker stats命令查看容器使用cpu情况

对内存的限制

如创建容器test1,限制内存1G

对swap空间进行限制,对swap空间进行限制的前提,必须要限制内存的使用。

-m 512m --memory-swap=1g

18-521m=512m-------swap空间的限额。

-m 512m --memory-swap=0,或者不设置,表示swap的空间的限额是内存限额的两倍。

-m 512m -memory-swap=512m 容器不能够使用swap空间。

-m 512m --memory-swap=-1 内存的限额是512m,但是swap空间的使用不受限制。

磁盘的I/O进行配置

对读的限制

对写的限制

练习

创建一个容器,使用的镜像是nginx,绑定cpu在0上限制该容器的使用内存是512m,使用cpu的限额是全部时间的20%使用一条命令完成,要求网络模式如下:

1、A容器使用的模式是host,直接可以访问

2、B容器使用自定义网络--192.168.10.0/24 给容器指定ip地址是192.168.10.10,做端口映射,宿主机的8080:80


http://www.ppmy.cn/news/1563213.html

相关文章

mysql窗口函数rank() over、dense_rank() over、row_number() over 实现分组排行

在做导出时,遇到一个根据价格最低数统计,所以用到了序号排行,数据库用的8.0.33; 正好mysql 8.0以上版本支持窗口函数 总结一下几种函数: 1、row_number() row_number()over(partition by字段1 order by 字段2) 的结…

MyBatis 性能优化

1. 引言 1.1 什么是 MyBatis? MyBatis 是一款流行的 Java 持久层框架,能够将 Java 对象与 SQL 数据库映射起来。与传统的 JDBC 不同,MyBatis 提供了灵活的 SQL 映射功能,使开发者可以专注于业务逻辑,而无需编写冗长的…

21天学通C++第八章——指针

C虽然可以动态的管理内存,但是并不能像其他高级语言如JAVA、C#有自动垃圾收集器去对应用程序的内存进行清理。 常见指针错误 内存泄漏 解释: 在使用完new申请内存之后,没有配套的delete,则之后会产生内存泄漏。 即如何理解&a…

苹果电脑怎么清理后台,提升苹果电脑运行速度

苹果电脑以其流畅的系统和高效的性能备受用户青睐,但即使是性能强大的Mac,随着使用时间的增长,也会遇到运行变慢、卡顿的问题。造成这种现象的一个主要原因是后台运行的程序和进程过多,占用了系统资源。那么,苹果电脑怎…

【C语言】标准IO

目录 1. 什么是标准IO 1.1概念 1.2特点 1.3 操作 2. 缓存区 3. 函数接口 3.1打开文件fopen 3.2关闭文件 3.3读写文件操作 3.3.1每次读写一个字符:fgetc()、fputc() a. 针对文件 b. 针对终端 3.3.2 每次一串字符的读写fgets()和fputs() c. 针对终端 d…

Spring Cloud Alibaba - Nacos理论面试总结-未完结

临时实例和永久实例 临时实例和永久实例在 Nacos 中是一个非常非常重要的概念 之所以说它重要,主要是因为我在读源码的时候发现,临时实例和永久实例在底层的许多实现机制是完全不同的 临时实例 临时实例在注册到注册中心之后仅仅只保存在服务端内部一…

【数学】概率论与数理统计(五)

文章目录 [toc] 二维随机向量及其分布随机向量离散型随机向量的概率分布律性质示例问题解答 连续型随机向量的概率密度函数随机向量的分布函数性质连续型随机向量均匀分布 边缘分布边缘概率分布律边缘概率密度函数二维正态分布示例问题解答 边缘分布函数 二维随机向量及其分布 …

IDEA中创建maven项目

1. IDEA中创建maven项目 在IDEA中创建Maven项目,前提是已经安装配置好Maven环境。如还未配置安装Maven的,请先下载安装。如何下载安装,可参考我另外篇文章:maven的下载与安装教程本篇教程是以创建基于servlet的JavaWeb项目为例子&…