互联网技术 / 互联网资讯 · 2024年3月14日

Docker 跨容器通信与链接实现云计算场景指南

概述与原理

链接用于让容器彼此发现并安全地传递关于一个容器的信息给另一个容器。设置链接时,会在源容器与接收容器之间建立一条通信管道,接收容器就能访问源容器的选定信息。通过 –link 标志可以创建这种连接关系。

下面通过一个简单的示例来说明:先创建一个包含数据库的容器,再将一个应用容器与之建立链接,从而实现跨容器的数据访问与合作。

步骤一:创建数据库容器

首先创建一个新的数据库容器。以 PostgreSQL 为例,可以使用如下命令:

$ docker run -d --name db training/postgres

该命令会从 training/postgres 映像启动一个名为 db 的后台容器,容器中已配置好 PostgreSQL 数据库。

步骤二:移除要被替换的应用容器

为了让新容器与数据库容器建立链接,需要先移除原有的应用容器:

$ docker rm -f web

步骤三:创建应用容器并链接数据库

现在创建一个新的应用容器,并将其与数据库容器链接起来。链接的形式为 –link alias,其中 alias 是在接收容器中使用的简短名称。

示例命令:

$ docker run -d -P --name web --link db:db training/webapp python app.py

在上述命令中,--link db:db 的含义是:将名称为 db 的源容器链接到名为 web 的目标容器,目标容器中对源容器的引用别名为 db。

关于 –link 的两种形式

  • –link:alias:alias 是我们在接收容器中使用的名称别名。
  • –link:当只写 –link 时,别名与源容器名称相同。

如果将前面的示例改为简化形式,命令如下:

$ docker run -d -P --name web --link db training/webapp python app.py

步骤四:检查链接是否建立

可以使用以下命令查看链接信息:

$ docker inspect -f "{{ .HostConfig.Links }}" web

输出可能类似于:

[/db:/web/db]

从输出中可以看到 web 容器已链接到 db 容器,别名为 web/db。这使得 web 容器能够访问 db 容器的相关信息与服务。

链接容器的实际作用

通过链接,源容器可以向接收容器提供自身的信息。在本示例中,接收方 web 能访问源容器 db 的信息。DockeR 在容器之间创建了一个安全隧道,避免在外部公开端口进行通信;在启动 db 容器时,即使未使用 -P 或 -p 进行端口映射,这也让跨容器通信成为可能。

在实际应用中,链接信息通常以两种方式对接收容器暴露:

  • 环境变量
  • 更新 /etc/hosts 文件

注意事项与兼容性

需要了解的是,随着容器编排工具和 Docker 的更新,–link 机制在许多场景中被逐步替代为基于网络的服务发现与暴露的更现代方案(如 Docker 的网络、容器编排系统的服务发现、DNS 解析等)。在新项目中,推荐结合网络驱动和服务发现机制来实现容器间通信的可维护性与扩展性。

示意图占位:

[[[IMG_1]]]

[[[IMG_2]]]