一、Docker 网络管理简介
为什么需要Docker网络管理
容器的网络默认与宿主机、与其他容器都是相互隔离。
容器中可以运行一些网络应用(如nginx、web应用、数据库等),如果要让外部也可以访问这些容器内运行的网络应用,那么就需要配置网络来实现。
有可能有的需求下,容器不想让它的网络与宿主机、与其他容器隔离。
有可能有的需求下,容器根本不需要网络。
有可能有的需求下,容器需要更高的定制化网络(如定制特殊的集群网络、定制容器间的局域网)。
有可能有的需求下, 容器数量特别多,体量很大的一系列容器的网络管理如何 ……
因此容器的网络管理是非常重要的
Docker中有哪些网络驱动模式
bridge network 模式(网桥):默认的网络模式。类似虚拟机的nat模式
host network 模式(主机):容器与宿主机之间的网络无隔离,即容器直接使用宿主机网络
None network 模式:容器禁用所有网络。
Overlay network 模式(覆盖网络): 利用VXLAN实现的bridge模式
Macvlan network 模式:容器具备Mac地址,使其显示为网络上的物理设备
Docker网络管理命令
查看网络 – docker network ls
作用: 查看已经建立的网络对象
命令格式: docker network ls [OPTIONS]
命令参数(OPTIONS): -f, --filter filter 过滤条件(如 'driver=bridge’)
--format string 格式化打印结果
--no-trunc 不缩略显示
-q, --quiet 只显示网络对象的ID
注意: 默认情况下,docker安装完成后,会自动创建bridge、host、none三种网络驱动
命令演示:
创建网络 – docker network create
作用: 创建新的网络对象
命令格式: docker network create [OPTIONS] NETWORK
命令参数(OPTIONS): -d, --driver string 指定网络的驱动(默认 "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)
注意: host和none模式网络只能存在一个 docker自带的overlay 网络创建依赖于docker swarm(集群负载均衡)服务 192.168.0.0/16 等于 192.168.0.0~192.168.255.255 192.168.8.0/24 172.88.0.0/24 等于 172.88.0.0~172.88.0.255
命令演示:
网络删除 – docker network rm
作用: 删除一个或多个网络
命令格式: docker network rm NETWORK [NETWORK...]
命令参数(OPTIONS): 无
查看网络详细信息 – docker network inspect
作用: 查看一个或多个网络的详细信息
命令格式: docker network inspect [OPTIONS] NETWORK [NETWORK...]
或者 docker inspect [OPTIONS] NETWORK [NETWORK...]
命令参数(OPTIONS): -f, --format string 根据format输出结果
使用网络 – docker run --network
作用: 为启动的容器指定网络模式
命令格式: docker run/create --network NETWORK
命令参数(OPTIONS): 无
注意: 默认情况下,docker创建或启动容器时,会默认使用名为bridge的网络
网络连接与断开 – docker network connect/disconnect
作用: 将指定容器与指定网络进行连接或者断开连接
命令格式: docker network connect [OPTIONS] NETWORK CONTAINER
docker network disconnect [OPTIONS] NETWORK CONTAINER
命令参数(OPTIONS): -f, --force 强制断开连接(用于disconnect)
二、Docker网络模式简介
bridge 网络模式(一)
特点: 宿主机上需要单独的bridge网卡,如默认docker默认创建的docker0。
容器之间、容器与主机之间的网络通信,是借助为每一个容器生成的一对veth pair虚拟网络设备对,进行通信的。一个在容器上,另一个在宿主机上。
每创建一个基于bridge网络的容器,都会自动在宿主机上创建一个veth**虚拟网络设备。
外部无法直接访问容器。需要建立端口映射才能访问。
容器借由veth虚拟设备通过如docker0这种bridge网络设备进行通信。
每一容器具有单独的IP