docker网络

一、Docker网络管理

1、为什么要用Docker网络管理

①容器的网络默认与宿主机、与其他容器都是相互隔离

②容器中可以运行一些网络应用(如nginx、web应用、数据库等),如果要让外部也可以访问这些容器内运行的网络应用,那么就需要配置网络来实现

③有可能有的需求下,容器不想让它的网络与宿主机、与其他容器隔离、

④有可能有的需求下,容器根本不需要网络

⑤有可能有的需求下,容器需要更高的定制化网络(如定制特殊的集群网络、定制容器间的局域网)

⑥有可能有的需求下,容器数量特别多,需要体量很大的一系列容器的网络管理

⑦因此容器的网络管理是非常重要的

2、Docker中有哪些网络驱动模式

①Docker有五种网络驱动模式

②bridge network模式(网桥):默认的网络模式,类似虚拟机的nat模式

③host network模式(主机):容器与宿主机之间的网络无隔离,即容器直接使用宿主机网络

④None network模式:容器禁用所有网络

⑤Overlay network模式(覆盖网络):利用VXLAN实现的bridge模式

⑥Macvlan network模式:容器具备Mac地址,使其显示为网络上的物理设备

二、Docker网络管理命令

1、查看网络(docker network ls)

①作用:查看已经建立的网络对象,默认情况下,docker安装完成后,会自动创建bridge、host、none三种网络驱动

②命令格式:docker network ls [OPTIONS]

③命令参数(OPTIONS)

--filter filter(-f):过滤条件(如 'driver=bridge’)
--format string:格式化打印结果
--no-trunc:显示全部信息
--quiet(-q):只显示网络对象的ID

④命令演示:docker network ls -f 'driver=host' --no-trunc

2、创建网络(docker network create)

①作用:创建新的网络对象

②命令格式:docker network create [OPTIONS] NETWORK

③命令参数(OPTIONS)

--driver string(-d):指定网络的驱动(默认 "bridge")
--subnet strings:指定子网网段(如192.168.0.0/16、172.88.0.0/24)
--ip-range strings:执行容器的IP范围,格式同subnet参数
--gateway strings:子网的IPv4 or IPv6网关,如(192.168.0.1)

④命令演示:docker network ls => docker network create -d bridge my-bridge => docker network ls

⑤注意

host和none模式网络只能存在一个
docker自带的overlay网络创建依赖于docker swarm(集群负载均衡)服务
192.168.0.0/16 等于 192.168.0.0~192.168.255.255
172.88.0.0/24 等于 172.88.0.0~172.88.0.255

3、网络删除(docker network rm)

①作用:删除一个或多个网络

②命令格式:docker network rm NETWORK [NETWORK...]

4、查看网络详细信息(docker network inspect)

①作用:查看一个或多个网络的详细信息

②命令格式:docker network inspect [OPTIONS] NETWORK [NETWORK...] 或者 docker inspect [OPTIONS] NETWORK [NETWORK...]

③命令参数(OPTIONS)

--format string(f):根据format输出结果

5、使用网络(docker run –network)

①作用:为启动的容器指定网络模式,默认情况下,docker创建或启动容器时,会默认使用名为bridge的网络

②命令格式:docker run/create --network NETWORK

6、网络连接与断开(docker network connect/disconnect)

①作用:将指定容器与指定网络进行连接或者断开连接

②命令格式:docker network connect [OPTIONS] NETWORK CONTAINER 和 docker network disconnect [OPTIONS] NETWORK CONTAINER

③命令参数(OPTIONS)

--force(-f):强制断开连接(用于disconnect)

三、Docker网络模式简介

1、bridge网络模式(一)

①宿主机上需要单独的bridge网卡,如默认docker默认创建的docker0

②容器之间、容器与主机之间的网络通信,是借助为每一个容器生成的一对veth pair虚拟网络设备对,进行通信的,一个在容器上,另一个在宿主机上

③每创建一个基于bridge网络的容器,都会自动在宿主机上创建一个veth**虚拟网络设备

④外部无法直接访问容器,需要建立端口映射才能访问

⑤容器借由veth虚拟设备通过如docker0这种bridge网络设备进行通信

⑥每一容器具有单独的IP

2、bridge网络模式(二):端口映射

①作用:启动的容器时,为容器进行端口映射

②命令格式:docker run/create -P … 或者 docker run/create –p …

③命令参数(OPTIONS)

--publish-all(-P):将容器内部所有暴露端口进行随机映射
--publish list(-p):手动指定端口映射

④命令演示:

-p [HOST_IP]:[HOST_PORT]:CONTAINER_PORT
-p ::80 => 将容器的80端口随机(端口)映射到宿主机任意IP
-p :8000:6379 => 将容器的6379端口映射到宿主机任意IP的8000端口
-p 192.168.5.1::3306 => 将容器的3306端口随机(端口)映射到宿主机的192.168.5.1IP上

3、host网络模式

①容器完全共享宿主机的网络,网络没有隔离,宿主机的网络就是容器的网络

②容器、主机上的应用所使用的端口不能重复,例如,如果宿主机已经占用了8090端口,那么任何一个host模式的容器都不可以使用8090端口了,反之同理

③外部可以直接访问容器,不需要端口映射

④容器的IP就是宿主机的IP

4、特殊host网络模式(Container网络模式)

①Container网络模式,其实就是容器共享其他容器的网络

②相当于该容器,在网络层面上,将其他容器作为“主机”,它们之间的网络没有隔离

③这些容器之间的特性同host模式

④命令格式:Docker run/create –network container:CONTAINER …

5、none网络模式

①容器上没有网络,也无任何网络设备

②如果需要使用网络,需要用户自行安装与配置

③应用场景:该模式适合需要高度定制网络的用户使用

6、overlay网络模式(一)

①Overlay网络,也称为覆盖网络

②Overlay网络的实现方式和方案有多种,Docker自身集成了一种,基于VXLAN隧道技术实现

③Overlay网络主要用于实现跨主机容器之间的通信

④应用场景:需要管理成百上千个跨主机的容器集群的网络时

7、overlay网络模式(二):了解TCP/IP协议栈

8、overlay网络模式(三):实现原理

9、macvlan网络模式

①macvlan网络模式,最主要的特征就是他们的通信会直接基于mac地址进行转发

②这时宿主机其实充当一个二层交换机,Docker会维护着一个MAC地址表,当宿主机网络收到一个数据包后,直接根据mac地址找到对应的容器,再把数据交给对应的容器

③容器之间可以直接通过IP互通,通过宿主机上内建的虚拟网络设备(创建macvlan网络时自动创建),但与主机无法直接利用IP互通

④应用场景:由于每个外来的数据包的目的mac地址就是容器的mac地址,这时每个容器对于外面网络来说就相当于一个真实的物理网络设备,因此当需要让容器来的网络看起来是一个真实的物理机时,使用macvlan模式

四、Docker网络拓展:http://liuqingzheng.top/linux/Docker/11-docker网络扩展/

posted @ 2020-09-13 16:39  专业搬砖人士  阅读(224)  评论(0)    收藏  举报