docker互联机制实现便捷互访

何为容器互联 & 为何需要容器互联

容器的互联是一种让多个容器中应用进行快速交互的方式,它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的 ip 地址。

容器互联实现示例

使用 --link 参数可以让容器之间安全进行交互;--link参数的格式--link name:alias, 其中 name 是要连接的容器名称, alias 是这个连接的别名.

首先创建一个新的容器,命名为redis,并让其处于运行状态

docker run -itd --name redis docker.io/redis:latest /bin/bash

创建一个新的 web 容器, 并将它连接到 redis 容器

docker run -d -p 8080:8080 --name web --link redis:aliasRedis docker.io/centos:latest /bin/bash

注意:建立互联关系的时候,源容器必须处于运行状态,及容器redis必须处于运行状态。

使用docker ps --no-trunc来查看容器的连接


可以看到自定义命名的容器,redis和web,redis容器的names列有redis也有web/aliasRedis;这表示web容器连接到redis容器,这允许web容器访问redis容器的信息。
docker相当于在两个互联的容器之间创建了一个虚拟通道,而且不用映射它们的端口到宿主主机上。在启动redis容器的时候并没有使用-p和-P标记,从而避免了暴露redis服务端口到外部网络上。

docker为容器公开连接信息的方式

方法一:通过添加host信息到父容器的/etc/hosts文件

下面是父容器web的hosts文件:

这里有两个hosts信息,第一个是web容器,web 容器用自己的id作为默认主机名(172.17.0.3 6b076bb7fa71),第二个是redis容器的ip、别名、容器id和主机名(172.17.0.2 aliasRedis 1e9335f91497 redis)。
用ping来测试redis(aliasRedis)容器,它会解析成172.17.0.2;用户可以连接多个子容器到父容器,比如可以连接多个web到同一个redis容器上。

方法二:更新环境变量

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

原文地址:https://www.cnblogs.com/wholj/p/10559848.html