理解网络
首先先来看一下阿里云服务器的网络信息。
原理
- 每启动一个docker容器,docker就会给容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0的桥接,使用的是evth-pair技术。
这里启动一个tomcat容器,然后再次查询网络信息,得到结果如下:
从图里可以看到增加了54,55网卡。
什么是veth-pair
容器带来的网卡都是一对对出现的
veth-pair就是一对的虚拟设备接口,他们是成对出现的,一端连着协议,一端彼此相连
正因为有这个特性,veth-path充当一个桥梁,连接各种虚拟网络设备
2.出现的网卡成对出现
3.容器和容器之间也是可以进行通信的
结构图如下
容器互联 --Link
为实现高可用,在服务ip发生变化的时候最好能够直接进行访问,就需要通过名字进行访问。在一般情况下, 使用名字访问时会出现问题:
那么就对需要这两个网络进行链接
docker run -d -P --name tomcat03 --link tomcat02 tomcat
通过–link 进行连接之后就就可以通过名字进行访问
这是一个单向的操作,在现有docker的操作中已经不建议这样去使用了。
自定义网络(推荐使用)
自定义网络不使用docker0;docker0不支持容器名连接访问。
对所有的docker网络进行查看
网络模式
bridge:桥接模式 在docker上面搭建桥梁(默认)
none:不配置网络
host:和宿主机共享网络
container:容器网络联通(用的少,局限性大)
命令
在之前启动镜像的时候,运行的命令其实就是相当于 docker run -d -P --name tomcat01 --net bridge tomcat
;也就是说有一个默认设置 --net bridge
创建一个网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
这个网络的配置其实和一般路由器的配置是一样的,网关ip为192.168.0.1,允许的设备数量为192.168.0.2-192.168.255.255
创建完成之后查看所有的网络,出现了刚才自己创建的网络mynet
对这个网络的详细情况进行查看,其中画框的部分就是刚才自己设置的部分。之后就可以把启动的服务放进这个网络中
创建服务
接下来在创建服务的时候把他放进这个网络中
docker run -d -P --name tomcat-nettest-01 --net mynet tomcat
然后对容器详情进行查看,就可以看到这个容器的网络信息和暴露的端口的信息
测试
使用ping命令进行测试,可以看到在进行网络的设置之后,不管是使用ip还是容器名字就都可以ping通
好处
不同的集群使用不同的网络,可以保证集群是安全和健康的
网络连通
使用命令docker network connect mynet tomcat01
进行连接,连接完成之后查看docker网络mynet的配置。tomcat01就可以被分配了一个mynet的ip,也就可以直接访问过来了。需要注意的是,这个时候tomcat01也还是存在于docker0网络下的,这也就意味着这时候tomcat01这一个容器就有了两个ip。