docker容器的网络基础
查看运行docker守护进程机器上的网络设备
json@json:~$ ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:57:df:ca:cb
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
enp5s0 Link encap:Ethernet HWaddr 28:d2:44:17:82:58
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:654 errors:0 dropped:0 overruns:0 frame:0
TX packets:654 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:58600 (58.6 KB) TX bytes:58600 (58.6 KB)
wlp4s0 Link encap:Ethernet HWaddr 24:fd:52:63:a8:a8
inet addr:192.168.1.119 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::dc67:d0a0:6619:994/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:45902 errors:0 dropped:0 overruns:0 frame:23765
TX packets:19165 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:35513178 (35.5 MB) TX bytes:2647874 (2.6 MB)
Interrupt:17
docker0 的网络设备
docker的守护进程就是通过docker0为docker的容器提供网络连接的各种服务
docker0实际上就是linux的虚拟网桥
网桥
根据OSI的七层模型中,网桥是使数据链路层的设备。它用来通过网络设备的物理地址来对网络进行划分并且传递数据。
Linux虚拟网桥的特点
1.可以设计IP地址
2.相当于拥有一个隐藏的虚拟网卡
docker0默认地址划分
Ip:172.17.42.1 子网掩码:255.255.0.0
MAC:02:42:ac:11:00:00 到 02:42:ac:11:ff:ff
总共提供了65534个地址
docker在容器启动时实际上要创建两端,一端在容器上,而另一端是运行在运行docker容器的主机上。
查看网桥:
1.安装网桥管理工具
sudo apt-get install bridge-utils
2.查看网桥设备
sudo brctl show
3.运行一个容器
4.查看容器的IP
ifconfig
5.查看网桥设备
sudo brctl show
这时在docker0后面的interfaces中多了一个参数,这就是docker在容器创建时,为容器连接docker0 所创建的一个网络接口。
同样使用 ifconfig命令也可以查到这个网络接口
修改docker0默认ip范围
当docker0提供的默认IP地址范围,不能满足我们希望为容器分配的IP地址时可以通过linux自带的修改docker0地址
$sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0
使用自定义虚拟网桥
1.添加虚拟网桥
a.添加网桥:$sudo brctl addbr bro
b.设置ip和子网掩码:$sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0
2.更改docker守护进程的启动配置
修改/etc/default/docker 中添加DOCKER_OPS值 -b=br0
$sudo vim /etc/default/docker
后面追加
DOCKER_OPS="-b=br0"
3.重启docker
$sudo service docker restart
4.查看设置是否成功
$ps -ef | grep docker