1、查看网路地址
使用命令ip addr
查看网络的基本信息
网络实例
>ip addr
(本地网络)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
(虚拟机)
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:07:51:6a brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.80.130/24 brd 192.168.80.255 scope global dynamic noprefixroute ens33
valid_lft 1386sec preferred_lft 1386sec
inet6 fe80::d3a5:5223:86fa:9b9/64 scope link noprefixroute
valid_lft forever preferred_lft forever
(docker内网络地址)
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:7c:1d:c8:07 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:7cff:fe1d:c807/64 scope link
valid_lft forever preferred_lft forever
(成对出现的虚拟网络,173对接虚拟机,172对接容器内部)
173: veth72cfa71@if172: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 5e:3a:04:b9:3e:e0 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::5c3a:4ff:feb9:3ee0/64 scope link
docker安装后会有一个docker0网卡,每启动一个docker容器,docker就会通过桥接模式给此容器分配一个ip,使用的技术是evth-pair
evth-pair
就是一对虚拟的网络设备,他们都是成对出现的。一段链接协议,一段彼此相连。相当于充当一个桥梁
docker容器之间的链接 ovs的链接都是使用的是evth-pair
技术
2、容器之间的网络通信原理
容器之间的网络原理:
安装docker之后会自动有一个docker0,相当于路由器。没有docker容器(图中的tomcat01和tomcat02)创建之后,会通过evth-pair
技术,创建一个桥接和docker0链接 ,然后tomcat01要和tomcat02通信时,会通过docker0。在所有的容器都不指定网路(--net
指定网络)的情况下,都是docker0路由,docker会给容器默认分配一个可用ip
默认的可用ip段是172.17.0.1/16
,后面的16是指前两位为网络号,后面的两位为主机号,则可以有255*255-2个可用的网络地址可以用。
删除之后,对应的网桥就会被删除掉
3、--link指令
在默认的请款下,在容器1中直接ping容器2的名称是ping不同的,只能使用IP地址。但是如果容器重启之后IP地址可能会变化,所以需要通过--link
设置一下,可以直接通过容器名来ping通容器,而不是地址
> docker exec -it tomcat01 ping tomcat02
ping: tomcat02: Name or service not known
使用--link
链接连个容器
docker run -d -P --name tomcat03 --link tomcat02 tomcat
然后再tomcat03 ping tomcat02 就可以ping通了
docker exec -it tomcat03 ping tomcat02
其实质就是在hosts
文件中增加了对tomcat02的一个地址映射
但是如果tomcat02容器要pingtomcat03还是不行,也需要单独设置一次,所以不推荐使用
3、自定义网络
通过docker network ls
查看所有网络
>docker network ls
NETWORK ID NAME DRIVER SCOPE
c1db37cefcbf bridge bridge local
da7fc10660c8 host host local
887ff36c6dc8 none null local
bridge
桥接模式,docker默认使用的网络模式
none
不配置网络
host
主机模式,和宿主机共享网络
container
容器网络联通(少用)
(1)、创建网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
创建成功之后查看
> docker network ls
NETWORK ID NAME DRIVER SCOPE
c1db37cefcbf bridge bridge local
da7fc10660c8 host host local
3bf8c39536e1 mynet bridge local
887ff36c6dc8 none null local
> docker network inspect mynet
[
{
"Name": "mynet",
"Id": "3bf8c39536e1221c76b86502fd8b6764a2b099f88b10909dc334799a93f1a9e7",
"Created": "2021-08-08T03:48:24.730724726-07:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
(2)、在启动容器的时候使用自定义的网络
设置docker容器使用自定义网络
docker run -d -P tomcat01 --net mynet tomcat
--net mynet
设置自定义网络mynet
docker run -d -P tomcat02 --net mynet tomcat
使用自定义网络的优点是可以直接使用容器名进行通信
即直接使用docker exec -it tomcat01 ping tomcat02
是可以ping通的,默认的网络不具有这个功能
默认的网络如果要使用这个功能,还需要通过--link
进行设置
4、网络之间的通信
默认网络docker0
和自定义网络mynet
之间的联通
网络和网络之间是不能直接联通的,但是网络和可以不同网络的容器联通,
使用的命令是docker network connect 网络名 另一个网络中容器名
底层就是将=另一个网络中的容器放在当前网络下
网友评论