docker容器从入门到痴迷(推荐)

2020-06-17 06:58:37易采站长站整理

docker0 并不是正常的网络接口,只是一个在绑定到这上面的其他网卡间自动转发数据包的虚拟以太网桥,可以使容器与主机相互通信、容器与容器间相互通信。

docker 每创建一个容器,就会创建一对对等接口(Peer Interface),类似于一个管子的两端,在一边可以收到另一边发送的数据包。docker会将对等接口中的一个做为 eth0 接口连接到容器上,并使用类似于vethAQI2QT 这样的惟一名称来持有另一个,该名称取决于主机的命名空间。通过将所有 veth* 接口绑定到 docker0 桥接网卡上,docker 在主机和所有 docker 容器间创建一个共享的虚拟子网。

docker NAT 网络

docker 容器默认通过 nat 方式访问网络,docker 启动时会在宿主主机上创建一个名为 docker0 的虚拟网络接口,docker0 只是一个在绑定到这上面的其他网卡间自动转发数据包的虚拟以太网桥,它可以使容器和主机相互通信、容器与容器间通信。

docker0 的网关地址是172.18.0.1,掩码是 16 位,提供了 65534 个IP地址。

NAT 方式,虚拟器容器可以访问外网(宿主机以外),但宿主机以外的机器不能访问容器内网。

docker Bridage 网络

docker 容器可以通过 bridge 方式访问网络。

bridge方式,虚拟器容器可以访问外网(宿主机以外),宿主机以外的机器也能访问容器内网。

6. docker pipework

docker 自身的网络功能比较简单,不能满足很多复杂的应用场景。因此有很多开源项目用来改善 docker 的网络功能,如 pipework、weave、flannel 等。

pipework 是由 docker 的工程师 Jérôme Petazzoni 开发的一个 docker 网络配置工具,由 200 多行 shell 实现,方便易用。

安装 pipework


git clone https://github.com/jpetazzo/pipework
cp pipework/pipework /bin/


wget [http://172.17.1.240/docker/software/pipework](http://172.17.1.240/docker/software/pipework)
chmod a+x pipework
cp pipework /bin/

运行容器


docker run -d --net='none' --name='centos9' docker-centos6.10-hadoop-spark

配置容器网络,并连到网桥 docker0 上;网关在IP地址后面加 @ 指定。


pipework docker0 centos9 172.18.0.100/16@172.18.0.1

7. docker 网络端口映射

容器如果使用 docker0 虚拟网络,那么容器的网络是 172.17.0.0/16,容器可以通过 NAT 方式访问外网;但外网不能访问内网。如果容器使用 br0 虚拟网络,容器和服务器可以在同一个网络地址段;容器可以访问外网;外网也可以访问容器网络。
对于使用 docker0 虚拟网络的容器,可以通过端口映射的方式,让外网访问容器某些端口。