首页天道酬勤docker修改网络,docker自定义网络

docker修改网络,docker自定义网络

张世龙 05-12 17:56 74次浏览

Docker网络安装Docker时,会自动创建三个网络。

bridge、none、host

dockernetworkls #查看docker网络networkidnamedriverscope 017 FB 8868156 bridgebridgelocal 53 ce 887039 bbhosthostlocal 69 b 3952 c 5916 nonene

Docker使用Linux网桥在宿主机上虚拟化Docker容器网桥(Docker0)。 当Docker启动容器时,它会根据Docker桥的网段为容器分配一个称为Container-IP的IP地址。 此外,docker桥是每个容器的默认网关。 同一宿主机中的所有容器都访问同一桥接器,因此可以通过容器的Container-IP直接在容器之间进行通信。

Docker网桥是宿主机虚拟化的,不是实际存在的网络设备。 外部网络无法寻址。 这意味着外部网络无法从Container-IP直接访问容器。 如果希望容器可以通过外部访问访问,请将容器端口映射(端口映射)到主机主机。 也就是说,docker run在创建容器时使用-p或-p参数启用容器,在访问容器时使用宿主机IP]:[容器端口访问容器。

一,Docker 网络实现原理

1,Host )容器虚拟弹出自己的网卡,使用宿主机的IP和端口,而不是配置自己的IP等。

2,Container :创建的容器将创建自己的网卡,与指定的容器共享IP和端口范围,而不是配置自己的IP。

3,None :此模式关闭容器的网络功能。

4,Bridge :默认值为该模式。 在此模式下,您可以为每个容器分配、配置IP等,将容器连接到docker0虚拟网桥,并通过docker0网桥和iptables nat表配置与宿主机的通信。

5 .定制网络

使用Docker run创建docker容器时,可以使用--net或--network选项指定容器的网络模式

host模式--net=host指定。

none模式--net=none指定。

container模式--net=用container : name _ or _ id指定。

bridge模式--net=bridge指定、默认设定、可选。

二,Docker 的网络模式

1 .主机模式

相当于Vmware的桥接模式,与宿主机位于同一网络中,但没有独立的IP地址。

Docker使用Linux的Namespaces技术进行了资源隔离

网络名称空间提供独立的网络环境,包括网卡、路由和iptable规则,并与其他网络名称空间隔离。 Docker容器通常被指定独立的网络名称空间。 但是,如果在启动容器时使用主机模式,容器将与宿主机共享网络名称空间,而不是获取独立的网络名称空间。 容器使用宿主机上的IP和端口,而不是虚拟地推出自己的网卡或配置自己的IP。

2 .容器模式

在此模式下,指定新创建的容器和现有容器共享网络名称空间,而不是与宿主机共享。 新创建的容器与指定的容器共享IP、端口范围等,而不是创建自己的网卡或配置自己的IP。 同样,两个容器除了网络方面外,其他东西(如文件系统、进程列表等)是隔离的。 两个容器的进程可以通过loNIC设备进行通信。

两个容器中用于net的号码相同

3 .无模式

在none模式下,Docker容器有自己的网络命名空间,但没有对Docker容器进行网络配置。 也就是说,此Docker容器没有网卡、IP和路由等信息。 在此网络模式下,容器只有lo环网络,没有其他网卡。 这种类型的网络无法连接到网络。 封闭的网络很好地保证了容器的安全。

4 .网桥模式

bridge模式是docker的默认网络模式

相当于Vmware的nat模式,容器使用独立的网络命名空间连接到docker0虚拟网卡。 使用Docker0网桥和iptables nat表配置与宿主机的通信。 在此模式下,为每个容器分配网络名称空间、设置IP等,并将主机上的docker容器连接到虚拟桥。

开始进程

)1) Docker进程启动时,将在主机上创建一个名为Docker0的虚拟桥,在此主机上启动的Docker容器将连接到此虚拟桥。 虚拟桥的工作方式与物理交换机相同,主机上的所有容器都通过

交换机连在了一个二层网络中。

(2)从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。

(3)Docker将veth pair 设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中, 以veth*这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过 brctl show 命令查看。

(4)使用 docker run -p 时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL 查看。

5.自定义网络
#直接使用bridge,无法支持指定IP运行docker
docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:7 /yst/bash

#可以先自定义网络,再使用指定IP运行docker
docker network create --subnet=172.18.0.0/24 mynetwork
docker run -itd --name test2 --net mynetwork --ip 172.18.0.10 centos:7 /yst/bash
6,端口映射

docker run -d --name test3 -p 43000:80 nginx

创建并启动一个容器,将80端口映射为43000端口

可以在iptables中查看NAT表

也可访问43000端口,访问nginx首页
有关自定义网络模式
先自定义一个网络模式,自定义的网络,可以自己制定ip地址池,网关。在创建容器时,可以将容器指定到自己创建的网络中。在自己创建的网络中,容器的IP地址,都是由自己定义地地址池分配的。在基于自己的创建的网络模式创建的容器之间,可以使用容器名来访问。不通网络模式之间如何访问哪,可以将一个容器加入到对方的网络模式中,相当于,这容器有两个虚拟网卡。

先自定义一个属于网络

docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.1 mynet

注意:使用的ip地址池不能与自己宿主机的ip相同。

创建两个Tomcat容器,并使用自定义的网络

docker run -itd --name tomcat1 --network mynet tomcatdocker run -itd --name tomcat2 --network mynet tomcat

在使用默认的网络创建两个Tomcat容器

docker run -itd --name tomcat01 tomcatdocker run -itd --name tomcat02 tomcat

可以使用来查看我们自定义的网络

docker inspect mynet

可以看到在其中有我们创建的容器,还有IP地址。都是相匹配的
接下来使用ping来测试连通

可以看到,我们使用默认的网络默认的网络模式是无法使用容器命来ping通的。

使用自定义的网络,则可以使用容器名来ping通。

那么,现在在不同网络模式中的容器如何ping通呐
只需要将一个容器加入到另一个网络模式中即可

docker network connect mynet tomcat01


将容器将入到模式中后,就可以ping通了。
再来查看一下mynet的网络信息

现在这个Tomcat01就有两个虚拟网卡了。
自然就能ping通了

为什么要使用docker,docker network host docker network 详解,kubernetes网络模式