方式一(IP通信)
两个容器可以想象成两个虚拟机,虚拟机直接互信通信,当然通过IP进行通信。那么我们可以得出:容器间通信,需要容器内配有属于同一个网络的IP。
容器间通过IP通信,走网络传输数据,和我们之前的生产环境出奇的一致,很方便理解。
如何为容器添加IP呢?
请参考这个《docker 创建容器时指定容器ip》文章。
今天我们聊点新鲜的,如何为一个容器添加一个网卡。
假设你已经启动了一个容器,名为centos7_test。
之前启动centos7_test容器时,执行了--network=none,选择了不创建网卡模式。
此时centos7_test容器内是一张网卡都没有的,那么想为它添加一个网卡该怎么办呢?
[root@cgls ~]# docker network connect bridge centos7_test
我们选择为centos7_test容器添加一个bridge 网络的ip,由于bridge 网络会自动分配一个172.17.0.0/16网段的ip。此刻你的容器就成功被添加了网卡。
方式二(Docker DNS Server)
在实际部署过程中,有时候我们一开始不知道各容器的IP是多少,但是为了能连通各容器,docker daemon 使用内嵌的 DNS server,使容器通过“容器名”进行通信。
启动两个容器
[root@cgls ~]# docker run -itd --name centos7_test1 centos
[root@cgls ~]# docker run -itd --name centos7_test2 centos
此刻可以通过容器name进行互相访问。
方式三(joined 容器)
joined 容器,顾名思义通过容器进行连接。说白了就是多个容器共享一个网络栈,共享网卡和配置信息,这些容器共同组成了一个大容器。:
先创建一个
[root@cgls ~]# docker run -itd --name centos7_test3 centos
然后创建新容器并通过 --network=container:centos7_test3 指定 jointed 容器为 centos7_test3
[root@cgls ~]# docker run -itd --name centos7_test4 --network=container:centos7_test3 centos
centos7_test3 与centos7_test4 此刻都在一个虚拟的大容器中,通信也是OK的。