[ Docker网络 | 青训营笔记 ]

85 阅读2分钟

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