赞
踩
Docker在启动时会开启一个虚拟网桥设备docker0,默认的地址为172.17.0.1/16,容器启动后都会被桥接到docker0上,并自动分配到一个ip地址
实验:
1.查看docker的网络有哪些(发现有三种, bridge,host,none)
[root@server1 ~]# docker network ls
2.查看server1上的ip,发现docker0
[root@server1 ~]# ip addr
(一)docker网络中的bridge网络模式
bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的,但容器通过宿主机的NAT规则后可以访问外网。
Bridge 桥接模式的实现步骤主要如下:
Bridge桥接模式的缺陷:
实验:
1.创建一个别名为vm1的容器并查看其ip,发现其ip为 172.17.0.3/16(这是因为当容器桥接docker0后,会自动分配ip地址,然后逐渐递增)
[root@server1 ~]# docker run -it --name vm1 ubuntu
root@6269c5f20354:/# ip addr
2.设备vethed03df5连接在了docker0上
#docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口。
[root@server1 ~]# brctl show
3.查看真实物理机上的ip,发现多了一个虚拟网卡,且注意vethed03df5@if4与容器间的是成对的
[root@server1 ~]# ip addr show
4.查看vm1的情况中的Pid(每个容器都会有一个独立的Pid)
[root@server1 ~]# docker inspect vm1 | grep Pid
5.查看关于此Pid容器网络的文件(每一个独立的Pid都会在/proc目录下有一个相应的以Pid为名的目录,这个目录里面的ns目录有着关于这个Pid容器网络的文件):
[root@server1 ~]# cd /proc/1872/
[root@server1 1872]# ls
[root@server1 1872]# cd ns/
[root@server1 ns]# ll
注意:
veth设备是成双成对出现的,一端是容器内部命名为eth0,一端是加入到网桥并命名的veth*(通常命名为veth*),它们组成了一个数据传输通道,一端进一端出,veth设备连接了两个网络设备并实现了数据通信
(二)docker网络中的host网络模式
实验:
1.重新创建host网络模式的一个容器vm2并查看ip,会发现此时的ip与宿主机(docker0)中的ip一样
[root@server1 ~]# docker run -it --name vm2 --network=host ubuntu
root@server1:/# ip addr
root@server1:/# [root@server1 ~]#
2.证明(容器vm2中的ip和宿主机(docker0)中的ip一样):
[root@server1 ~]# ip a
(三)docker网络中的none网络模式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。