docker容器学习--------网络管理+容器间互连
容器的四种网络模式:
bridge桥接模式、host模式、container模式和none模式,启动容器的时候可以使用 --net 参数指定,默认是桥接模式
网络的基本管理
桥接模式:
默认的一种模式。
Host网络模式:
host 模式是 bridge 桥接模式很好的补充。采用 host 模式的 Docker Container,可以直接使用
宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公
有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换。当然,
有这样的方便,肯定会损失部分其他的特性,最明显的是 Docker Container 网络环境隔离性
的弱化,即容器不再拥有隔离、独立的网络栈。另外,使用 host 模式的 Docker Container 虽
然可以让容器内部的服务和传统情况无差别、无改造的使用,但是由于网络隔离性的弱
化,该容器会与宿主机共享竞争网络栈的使用;另外,容器内部将不再拥有所有的端口资
源,原因是部分端口资源已经被宿主机本身的服务占用,还有部分端口已经用以 bridge 网
络模式容器的端口映射。
container网络模式
None网络模式
网络环境为 none,即不为 Docker Container 任何的网络环境。一旦 Docker Container 采用了
none 网络模式,那么容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。
可以说 none 模式为 Docker Container 做了极少的网络设定,但是俗话说得好“少即是多”
在没有网络配置的情况下,作为 Docker 开发者,才能在这基础做其他无限多可能的网络定制开发。
这也恰巧体现了 Docker 设计理念的开放。在 none 网络模式下分配固定 ip:
netns 是在 linux 中提供网络虚拟化的一个项目,使用 netns 网络空间虚拟化可以在本地虚拟
化出多个网络环境,目前 netns 在 lxc 容器中被用来为容器提供网络。
使用 netns 创建的网络空间独立于当前系统的网络空间,其中的网络设备以及 iptables 规则
等都是独立的,就好像进入了另外一个网络一样。
创建网络环境删除网络环境
制作软链接,创建一个网络环境
[root@server1 netns]# ip link add name veth0 type veth peer name veth1
这里我们添加了一对veth设备,veth设备是成对出现的,两个设备之间的数据是相互贯通的
[root@server1 netns]# brctl addif docker0 veth0
添加桥接
查看设备状态为DOWN激活设备
[root@server1 netns]# ip link set veth1 netns 18295 将eth1加入到创建的网络空间,此时在宿主机里已经找不到ethnic
的信息了
[root@server1 netns]# ip netns exec 18295 ip link set veth1 name eth0 给容器设置新的网卡
[root@server1 netns]# ip netns exec 18295 ip link set up dev eth0 开启eth0
[root@server1 netns]# ip netns exec 18295 ip addr add 172.17.0.100/24 dev eth0 设置ip
[root@server1 netns]# ip netns exec 18295 ip route add default via 172.17.0.1 设置网关
宿主机里面找不到veth1了
容器间互连
--link 参数可以在不映射端口的前提下为两个容器间建立安全连接, --link 参数可以连接一个
或多个容器到将要创建的容器。
--link 参数的格式为 --link name:alias,其中 name 是要链接的容器的名称,alias 是这个连
接的别名。