一、Docker网络基本介绍
docker
使用Linux桥接网卡
,在宿主机虚拟一个docker容器网桥(docker0)
,docker启动一个容器时会根据docker网桥的网段分配给容器一个IP地址,称为Container-IP
,同时Docker网桥是每个容器的默认网络网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Container-IP访问到容器。
如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过-p
或-P
参数来启用,访问容器的时候就通过宿主机IP:容器端口
访问容器。
二、Docker默认网络
通过docker network ls
查看默认网路,安装Docker
时自动创建
我们通过使用docker run
创建Docker容器
时,可以用--net
选项指定容器的网络模式
,Docker
可以使用以下4种网络模式
名称 |
备注 |
bridge模式 |
使用 --net=bridge 指定,为每一个容器分配、设置 ip ,并将容器连接到 docker0 虚拟网桥上,这也是默认网络模式 |
host模式 |
使用 --net=host 指定,容器不会创建自己的网卡,配置 ip 等,而是使用宿主机的 ip 和端口 |
none模式 |
使用 --net=none 指定,容器有独立的Network namespace,但并没有对其进行任何网络设置 |
container模式 |
使用 --net=container:NAME_or_ID 指定,新创建的容器不会创建自己的网卡和配置自己的ip,而是和一个指定的容器共享ip、端口范围 |
三、详解4种网络模式
3.1 bridge模式
当Docker server启动时,会在主机上创建一个名为docker0
的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中
当创建一个 Docker 容器
的时候,同时会创建了一对 veth pair接口
(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0
;另一端在本地并被挂载到docker0 网桥
,名称以 veth
开头(例如 vethAQI2QT
)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络
3.2 Host模式
相当于Vmware
中的NAT模式
,与宿主机在同一个网络中,但没有独立IP地址
。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace
,而是和宿主机共用一个Network Namespace
。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。可以通过 --net=host 指定使用 host 网络。
3.3 Container模式
Docker网络container模式
是指定其和已经存在的某个容器共享一个 Network Namespace,此时这两个容器共同使用同一网卡、主机名、IP 地址,容器间通讯可直接通过本地回环 lo 接口通讯
。但这两个容器在其他的资源上,如文件系统、进程列表等还是隔离的。
3.4 None模式
在none模式下,并不为Docker容器进行任何网络配置
也就是说,这个Docker容器没有网卡、ip、路由等信息,只有一个lo接口lo标识代表禁用网络功能,即:127.0.0.1,本地回环的意思
需要我们自己为Docker容器添加网卡、配置IP等
这种方式用的比较少
四、常用命令
注释 |
命令 |
查看网络 |
docker network ls |
创建网络 |
docker network create 网络名称 |
查看网络详细信息 |
docker network inspect 网络名称 |
将容器连接到指定网络 |
docker network connect 网络名称 容器名称 |
断开容器的网络 |
docker network disconnect 网络名称 容器名称 |
删除所有不存在的网络缓存 |
docker network prune |
删除一个或多个网络 |
docker network rm 网络名称 |
值得注意一点的是,在创建网络的时候可以设置一系列可选参数
--driver
:驱动程序类型,默认 “bridge”--gateway
:主子网的IPV4和IPV6的网关,如192.168.0.1--subnet
:代表网段的CIDR格式的子网,如192.168.0.0/16、172.88.0.0/24