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和端口,两个容器之间除了网络是一致的,其他都还是隔离的。主要用于内部数据的通信和容器内部的挂载点。
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