Docker搭建开发环境用的非常多,通常开发机器上既有容器形式的应用,又有本机跑着或者调试的程序,它们之间互相依赖,如何让它们之间通信顺畅,有时候是一个挺困难的事情。容器应用和容器外应用互相访问分为三种情况:
- 容器内应用和容器内应用
- 容器内应用访问容器外应用
- 容器外应用访问容器内应用
而根据两个互相通信的容器或应用在不在一台服务器上,我们又多出一个维度的情况:
- 容器或应用在一台服务器
- 容器或应用不在一台服务器
要想彻底搞清楚互相访问的问题,就需要先弄清楚docker的网络是怎么一回事。为什么网络重要,这么说吧,docker三巨头:服务(容器)、网络 & 存储,作为三巨头之一的网络,还是要多加重视的。
容器三巨头之一: 网络
常用的docker网络模式有三种:bridge、host 和 overlay,可能会有人说,“谁说的?还有macVlan和none 好吧 ?” ,注意,我说的是常用 ?,三种模式各有适用场景:
- bridge,应用都是容器形式,且都在一个宿主机上,各个容器需要互相通信的场景;
- host,容器和本机应用混杂且需要相互访问的情况;
- overlay,在不同宿主机的容器之间需要互相通信的情景。
Bridge网络
分为“default bridge”和“user-defined bridge”(自定义bridge),docker安装好后会默认创建一个bridge网络(docker0),也就是“default bridge”,未指定网络的容器会默认使用这个网络。一般使用自定义bridge较多,我们定义一个私有网络,可以将我们的应用与其他应用相隔离,这在一个共享的开发服务器上非常有用,此外,自定义网络也有下面两个优点:
- 只有用户定义的bridge