Docker网络
我们docker容器之间的通信都是基于docker网络的
我们在下载docker的时候会自动下载一个docker0的东西,相当于docker官方的一个路由器,用来对docker容器进行路由的转发,去进行通信
我们可以使用ip addr去查看
如果在docker容器中提示我们没有这个命令,我们可以apt-get install net-tools下载一下
他是一个B类的地址,也就是说,它最多可以有216个地址,然后我们每个容器都有两个地址,是一对的
一个地址是它容器内的地址,一个地址是暴露在外面的地址,通过这个暴露的地址,我们可以进行docker容器之间的通信
我们进行通信的时候是通过
docker0中的路由表去转发通信的,和我们计算机网络之间的通信一样
docker0的网络地址
--link
我们两个容器的IP地址每次在启动之后都是不相同的,那么我们作微服务,不能一直去变换我们的地址,所以我们就需要去通过服务名字去通信
# 我们直接去ping是ping不通的
$ docker exec -it test2 ping test1
# 我们使用--link
$ docker run -itd -P --name test3 --link test2 ubuntu:20.04
# 接下来再去ping就可以ping通
注意:如果出现这个错误unable to start container process: exec: "ping": executable file not found in $PATH: unknown说明容器没有安装ping命令,所以要先安装一下ping命令
# 我们使用docker network ls查看所有的docker网络
NETWORK ID NAME DRIVER SCOPE
09fa2c0dd353 bridge bridge local
6de96ff84e6f host host local
3f6aee41fa80 none null local
# 那个bridge就是我们的docker0,使用docker network inspect 09fa2c0dd353 查看一下
得到我们所有的容器的网络信息,当然也可以得到我们docker的网络信息
我们的test3绑定了test2我们可以在test3中的host文件中看一下
$ docker exec -it test3 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3 test2 b4ffdebbf951
172.17.0.4 f0a50ba20717
可以看到我么的
test2被绑定在172.17.0.3这个地址上,所以我们可以通过服务名字去进行通信,否则只能通过ip地址去通信
--link就是加了一个静态域名解析
但是现在已经不建议使用--link了
我们要自定义网络,不用 docker0