docker网络原理,docker教程
Docker在启动时创建虚拟桥docker0。 默认地址为172.17.42.1/16,表示容器启动后
网桥连接到docker0,并自动分配给IP地址。
更改docker的默认网络配置:
#系统停止推动器
# IP link set dev docker 0下装
# IP addr del 172.17.42.1/24 dev docker 0
# ipadd radd 192.168.0.1/24 devdcoker 0
# ip link set dev docker0 up
# CP/lib/systemd/system/docker.service/etc/systemd/system/docker.service
# vim/etc /系统/系统/docker.service
服务
Type=notify
execstart=/usr/myd ZT/docker daemon-HFD ://-- bip=' 192.168.0.1/24 '
.
#系统后台重新加载
#系统启动推动器
容器的四种网络模式:
桥接模式、主机模式、容器模式、无模式
启动容器时可以通过--net参数指定,缺省为桥接模式。
以下是docker网络初始化的过程:
另一方面,网桥模式的实现步骤主要为以下:
(1)代理后台程序利用veth pair技术在主计算机上创建两个虚拟网络接口设备,并假定如下
veth0和veth1。 veth pair技术的特性是无论哪个veth接收到网络消息
信息会发送给对方。
)2) Docker Daemon在Docker Daemon创建的docker0桥上添加veth0。 保证宿主机的网络消息可以发送到veth0;
)3) Docker Daemon在Docker Container所属的namespace下添加veth1,并改名为eth0。
以此方式,一旦宿主机的网络消息发送到veth0,它就立即被eth0接收并从宿主机发送回
坞站容器网络连接性; Docker Container还保证单独使用eth0来实现容器网络
联系环境的隔离性。
bridge网桥模式的Docker Container并没有为开发人员涵盖一切。 最明显的是,
在此模式下,Docker Container没有公共IP。 也就是说,它与宿主机的eth0不在同一网段上。 作为结果
结果,除宿主机以外的世界无法直接与容器通信。 虽然NAT模式通过中间处理实现
在这方面,NAT模式仍然存在问题和不便。 例如,所有:容器都必须在主机上与端口、容器竞争
内部服务的访问者需要使用服务发现来了解服务的外部端口等。 另外,NAT模式处于三层
因为是网络上的实现手段,所以一定会影响网络的传输效率。
docker run -it --name vm3 ubuntu
添加桥后,桥上有桥
二、主机网络模式:
主机模式是对网桥模式的补充。 使用主机模式的Docker Container可以直接使用
宿主机的IP地址与外部进行通信,并且如果宿主机的eth0是公用IP,则容器也具有该公用
有IP。 容器中的服务端口也可以使用宿主机端口,不需要添加NAT转换。 当然,
如果有这样的便利,就会失去其他特性的一部分。 最明显的是Docker Container网络环境的隔离性
弱化是容器不再具有隔离的独立网络堆栈。 此外,使用主机模式的Docker Container
但是,容器内部的服务与以往的状况没有差别,可以无改造地使用,但是网络的隔离性弱
化,该容器与宿主机共享竞争网络堆栈的使用; 此外,容器内部将不再有所有端口资金
源是因为某些端口资源已被宿主机自身的服务占用,而某些端口已用于bridge网络
联系人容器的端口映射。
docker run-it---- name VM3----nethostubuntu
与物理机相同
三.容器网络模式:
)1)查找other container (即需要共享网络环境的容器)的网络namespace;
)2)使用新创建的Docker Container (也是需要共享其他网络的容器) (namespace )
other container的namespace。
德奥
cker Container 的 other container 网络模式,可以用来更好的服务于容器间的通信。在这种模式下的 Docker Container 可以通过 localhost 来访问 namespace 下的其他容器,传输
效率较高。虽然多个容器共享网络环境,但是多个容器形成的整体依然与宿主机以及其他
容器形成网络隔离。另外,这种模式还节约了一定数量的网络资源。但是需要注意的是,
它并没有改善容器与宿主机以外世界通信的情况。 docker run -it --name vm4 --net container:vm1 ubuntu
和vm1相同
四、None 网络模式:
网络环境为 none,即不为 Docker Container 任何的网络环境。一旦 Docker Container 采用了
none 网络模式,那么容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。
可以说 none 模式为 Docker Container 做了极少的网络设定,但是俗话说得好“
少即是多”
,在
没有网络配置的情况下,作为 Docker 开发者,才能在这基础做其他无限多可能的网络定制
开发。这也恰巧体现了 Docker 设计理念的开放。
在 none 网络模式下分配固定 ip:
netns 是在 linux 中提供网络虚拟化的一个项目,使用 netns 网络空间虚拟化可以在本地虚拟
化出多个网络环境,目前 netns 在 lxc 容器中被用来为容器提供网络。
使用 netns 创建的网络空间独立于当前系统的网络空间,其中的网络设备以及 iptables 规则
等都是独立的,就好像进入了另外一个网络一样。
这种方式创建没有网络,可以自己指定设置网络。
检查网络: