一、Docker的四种网络模式
1.bridge –network bridge 为每一个容器分配、设置 ip ,并将容器连接到 docker0 虚拟网桥上,这也是默认网络模式
2.host –network host 容器不会创建自己的网卡,配置 ip 等,而是使用宿主机的 ip 和端口
3.container –network 容器名称或id 新创建的容器不会创建自己的网卡和配置自己的ip,而是和一个指定的容器共享ip、端口范围
4.none –network none 容器有独立的Network namespace,但并没有对其进行任何网络设置
桥接模式–bridge
Docker服务启动 时,默认会创建一个名称为 docker0 网桥(其上有一个名称为 docker0 内部接口)。该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker会 默认指定docker0 的 ip地址和子网掩码,让主机和容器之间可以通过网桥相互通信。
主机模式–host
不创建任何网络接口,直接使用宿主机的 ip地址与外界进行通信,不再需要额外进行NAT转换。在主机模式下不能publish port。容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。容器共享宿主机网络ip,这样的好处是外部主机与容器可以直接通信。Docker启动时指定–network=host或-net=host,如果还指定了-p映射端口,此时就会有如下警告:NARNING: Published ports are discarded when using host network mode1并且通过-p设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。可以选择无视这个警告或者使用Docker的其他网络模式,例如–network=bridge
容器模式–container
新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的ip,而是和一个指定的容器共享ip、端口范围等。两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
none模式
在none模式下,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、ip、路由等信息,只有一个lo接口。
二、常用命令
查看网络
docker network ls
创建网络
#基础用法
docker network create 网络名称
#创建网络时是可以添加一系列参数的:
–driver:驱动程序类型
–gateway:主子网的IPV4和IPV6的网关
–subnet:代表网段的CIDR格式的子网
mynet:自定义网络名称
docker network create --driver=bridge --gateway=192.168.137.1 --subnet=192.168.137.0/16 mynet
不指定任何选项的时候默认的–driver(网络模式)也是bridge(桥接)
但是gateway和subnet会自动生成
查看网络数据源
docker network inspect 网络名称
将容器连接到指定网络
docker network connect 网络名称 容器名称
断开容器的网络
docker network disconnect 网络名称 容器名称
删除所有不在使用的网络
docker network prune
删除一个或多个网络
docker network rm 网络名称
使用示例
创建容器时挂载网络
创建一个桥接类型的网络
docker network create --driver=bridge --gateway=192.168.137.1 --subnet=192.168.137.0/16 myNet1
创建并运行容器时指定网络
docker run --name containerName -p 80:80 -d --network myNet1 myNginx
不想用时可以断开网络
docker network disconnect myNet1 myNginx
容器已存在时连接到新网络
创建一个桥接类型的网络
docker network create --driver=bridge --gateway=192.168.137.1 --subnet=192.168.137.0/16 myNet2
为容器连接新的网络
执行后myNginx容器的网络就变成了myNet2
docker network connect myNet2 myNginx
不想用时可以断开网络
docker network disconnect myNet2 myNginx