当 docker 启动时,会在主机上创建一个 docker0 的虚拟网卡。他随机挑选 RFC1918 私有网络中的一段地址给 docker0 。比如 172.17.0.1/16,16 位掩码的网段可以拥有 65534 个地址可以使用,这对主机和容器来说应该足够了。
docker0 不是普通的网卡,他是桥接到其他网卡的虚拟网卡,容器使用它来和主机相互通信。当创建一个 docker 容器的时候,它就创建了一个对接口,当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包,它们是绑在一起的一对孪生接口。这对接口在容器中那一端的的名字是 eth0 ,宿主主机端的会指定一个唯一的名字,比如 vethAQI2QT 这样的名字,这种接口名字不再主机的命名空间中。所有的 veth* 的接口都会桥接到 docker0 ,这样 docker 就创建了在主机和所有容器之间一个虚拟共享网络。
Docker默认网络
Docker安装后,默认会创建下面三种网络类型:
[root@172 /]# docker network ls
NETWORK ID NAME DRIVER SCOPE
7bae40b7ba3b bridge bridge local
a76157f2257d host host local
c8e7302eb8c8 none null local
启动 Docker的时候,用 --network
参数,可以指定网络类型,如:
[root@172 /]# docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bash
1、bridge:桥接网络
默认情况下启动的Docker容器,都是使用 bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了
2、none:无指定网络
使用 --network=none,
docker 容器就不会分配局域网的IP。
3、host: 主机网络
使用 --network=host
,此时,Docker 容器的网络会附属在主机上,两者是互通的。
例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。
原文链接:http://www.jb51.net/article/118396.htm