一、Link方式实现本机容器间互联通信
自定义容器名
连接系统依据容器名称执行,所以首先需要自定义容器名称。
使用--name标记可以为容器自定义名称:
使用docker ps 查看容器的命名:
也可以使用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默认的网桥是docker0。此网桥只会在本机连接所有容器。
容器的虚拟网卡在主机上看一般叫做veth*而docker0网桥把所有这些网卡桥接在一起,如下:
通过ip命令查看到的docker网络信息如下:
这样可以把这个网络看成一个私有网络,如果要让外网连接到容器中,就需要做端口映射,即-p参数。
例如:主机A和主机B的网卡一都连着物理交换机的同一vlan10,这样网桥一和网桥三就相当于在同一物理网络中,而容器一、容器三、容器四也在同一个网络中,它们之间可以相互通信,而且可以跟同一vlan种的其他物理机器互联,如下图所示:
创建跨多个主机容器联网:
创建网桥br0,编辑br0配置文件:
编辑本机网卡配置文件ens33,主要添加配置参数BRIDGE=br0:
重启网卡:
查看本地网络信息:
删除docker0的默认网桥信息:
修改docker的桥接网卡为br0,centos7为例:
重启docker服务!
创建docker容器:
进入容器并测试,201为另一台宿主机:
可以通过docker inspect命令查看容器网络该容器ip地址为192.168.158.5,信息如下:
在另一台宿主机做同样的网桥设置,创建容器,查看该容器ip地址:
在主机上Ping这台宿主机容器Ip,可以看到能够ping通: