天天看点

Docker之容器互联实现容器间通信

一、Link方式实现本机容器间互联通信

自定义容器名

连接系统依据容器名称执行,所以首先需要自定义容器名称。

使用--name标记可以为容器自定义名称:

使用docker ps 查看容器的命名:

Docker之容器互联实现容器间通信

也可以使用docker inspect来查看容器名称:

注意:容器名称是唯一的,如果创建了mysqldb,需要在此创建需要将同名容器删除掉在去创建。

容器互联

容器互联大体有以下三种方式,使用link进行容器互联:

基于volume的互联

基于link的互联

基于网络的互联

使用--link参数让容器间进行交互:

首先创建数据库容器:

然后创建web容器,并将其连接到db容器:

此时web容器与db容器建立了互联关系。

注意:--link参数格式为--link name:alias,其中name是要链接的容器名称,alias是这个连接的名称。

Docker通过两种方式为容器公开连接信息:

环境变量

更新/etc/hosts文件

使用env命令查看web容器的环境变量:

其中MYSQLDB_开头的环境变量是供web容器连接db容器使用。

登陆web容器ping通mysqldb:

Docker之容器互联实现容器间通信

二、使用自定义网桥实现容器跨主机互联通信

Docker默认的网桥是docker0。此网桥只会在本机连接所有容器。

容器的虚拟网卡在主机上看一般叫做veth*而docker0网桥把所有这些网卡桥接在一起,如下:

Docker之容器互联实现容器间通信

通过ip命令查看到的docker网络信息如下:

Docker之容器互联实现容器间通信

这样可以把这个网络看成一个私有网络,如果要让外网连接到容器中,就需要做端口映射,即-p参数。

例如:主机A和主机B的网卡一都连着物理交换机的同一vlan10,这样网桥一和网桥三就相当于在同一物理网络中,而容器一、容器三、容器四也在同一个网络中,它们之间可以相互通信,而且可以跟同一vlan种的其他物理机器互联,如下图所示:

Docker之容器互联实现容器间通信

创建跨多个主机容器联网:

创建网桥br0,编辑br0配置文件:

编辑本机网卡配置文件ens33,主要添加配置参数BRIDGE=br0:

重启网卡:

查看本地网络信息:

Docker之容器互联实现容器间通信

删除docker0的默认网桥信息:

修改docker的桥接网卡为br0,centos7为例:

重启docker服务!

创建docker容器:

进入容器并测试,201为另一台宿主机:

Docker之容器互联实现容器间通信

可以通过docker inspect命令查看容器网络该容器ip地址为192.168.158.5,信息如下:

Docker之容器互联实现容器间通信

在另一台宿主机做同样的网桥设置,创建容器,查看该容器ip地址:

Docker之容器互联实现容器间通信

在主机上Ping这台宿主机容器Ip,可以看到能够ping通:

Docker之容器互联实现容器间通信