前言:
我们可能用到多个容器,但是容器之间需要网络传入,他们是怎么工作的?
有没有办法不通过ip地址强制绑定?
首先我们先运行两个tomcat的容器来做测试
[root@localhost ~]# docker run -p8080:8080 -d --name tomcat01 tomcat
#查看tomcat01容器的网络地址
[root@localhost ~]# docker exec -it tomcat01 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
5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
#在物理机器ping docker 发现是可以ping通的
[root@localhost ~]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.061 ms
#然后再启动一个容器
[root@localhost ~]#docker run -p8081:8080 -d --name tomcat02 tomcat
#查看tomacat02 ip地址
[root@localhost ~]# docker exec -it tomcat02 ip addr
#然后用tomcat02容器去ping tomcat01
[root@localhost ~]# docker exec -it tomcat02 ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.079 ms
#发现这里也是可以ping通的
小结:如果docker容器在一台物理机器上他们是可以通过docker容器内部的网络互相连接,这样可以满足我们日常一些基本需要。如果单纯做测试已经够用了。
docker 容器网络通讯原理
我们观察一些本机ip addr 跟两个容器的 ip addr
#本机网卡列表
[root@localhost ~]# 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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:a6:7d:46 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s3
valid_lft 84340sec preferred_lft 84340sec
inet6 fe80::2f81:35cd:ea79:f5cd/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:60:d5:05 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.101/24 brd 192.168.56.255 scope global noprefixroute dynamic enp0s8
valid_lft 413sec preferred_lft 413sec
inet6 fe80::8fbf:cd3f:efbe:cec/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:6e:46:04:ce 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:6eff:fe46:4ce/64 scope link
valid_lft forever preferred_lft forever
6: veth2de480d@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether da:a1:66:76:59:7b brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::d8a1:66ff:fe76:597b/64 scope link
valid_lft forever preferred_lft forever
8: veth2f77023@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 62:7d:b4:b1:30:80 brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet6 fe80::607d:b4ff:feb1:3080/64 scope link
valid_lft forever preferred_lft forever
# 观察 tomcat02容器网卡地址
[root@localhost ~]# docker exec -it tomcat02 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP>