在我们的整个系统中,不可避免的需要在同一个主机上安装部署多个服务。那如果使用Docker部署,总是存在容器间通信的问题。
Docker的网路通信问题对于小白呢?总是会给你惊喜,别怕,跟着码哥做一遍,你会发现容器间通信So easy!
在安装好Docker后,Docker会创建一个Linux网桥docker0,Docker For Mac的实现和标准Docker规范有区别,Docker For Mac没有docker0。
可以使用Docker network ls 查看,docker 网络情况
可以看到,Docker为我们创建了三个网络:bridge、host、none。
其中,网桥bridge模式是实际中常用的,也是容器启动时,默认的连接方式。我们可以通过 --network 参数 指定容器连接的网络。
场景一
以交互模式,启动两个容器busybox1、busybox2
# docker run -itd --name busybox1 busybox
# docker run -itd --name busybox2 busybox
两个容器启动后,检查网络bridge使用情况
# docker network inspect bridge
测试两个容器的互通情况,分别进入两个容器中
# docker attach container_id
# ping busybox1_ip
# ping busybox2_ip
结果证实,两个容器互通。
场景二
以 --link 参数形式,通过别名实现两个容器间的互通
# docker run -itd --name busybox3 busybox
# docker run -itd --link busybox3 --name busybox4 busybox
进入到busybox4容器中
# ping busybox3
查看下/etc/hosts文件,你会发现多了一条映射,就是它在起作用
场景三
自定义 bridge,实现容器间通信。
Docker 有一个内嵌的 DNS Server,可以实现容器间通过容器名通信。但是默认的bridge不可以。需要自定义一个bridge
# docker network create --driver bridge busybox_bridge
# docker run -itd --network busybox_bridge --name busybox5 busybox
# docker run -itd --network busybox_bridge --name busybox6 busybox
查看网络情况
# docker network inspect busybox_bridge
进入容器,测试容器间互通情况
# docker attach container_id
# ping busybox6
查看/etc/hosts文件,你发现没有任何映射路由
查看/etc/resolv.conf,是的,是 dns 在起作用
閱讀更多 碼向未來 的文章