假设我有一台运行Docker的服务器。为了创建一个简单的负载平衡系统,我在一个单独的容器中运行两个应用程序实例。它们都与驻留在单独容器中的数据库通信。为了访问数据库,我需要通过容器链接提供其IP地址(每次我杀死容器时都会更改,因为我重建它)。链接通过环境变量提供数据库的IP。
总共有三个容器。其中两个需要知道第三个的IP地址(通过环境变量),但是我必须创建两个容器链接并为同一个IP地址命名两个链接。
$ docker run -d --name dbcontainer company/database:1.1
$ docker run -d --name appinstance0 company/app:2.1 --link dbcontainer:dblink0
$ docker run -d --name appinstance1 company/app:2.1 --link dbcontainer:dblink1
appinstance0
现在可以使用DBLINK0_PORT_1234_TCP_ADDR
而appinstance1
可以使用DBLINK1_PORT_1234_TCP_ADDR
来了解数据库容器的IP地址。
两个变量都包含完全相同的信息。因此,如果我决定添加另一个实例,我将不得不创建一个dblink2
等等......这远非实用。引用容器的IP地址有不同的方法吗?我想只有一个包含数据库容器IP地址的变量。
答案 0 :(得分:3)
引用容器的IP地址有不同的方法吗?
是的,docker links also define hostnames。因此,您可以选择不使用环境变量来获取数据库IP地址。
您可以按照以下步骤启动容器:
$ docker run -d --name dbcontainer company/database:1.1
$ docker run -d --name appinstance0 company/app:2.1 --link dbcontainer:dblink
$ docker run -d --name appinstance1 company/app:2.1 --link dbcontainer:dblink
如果你的app配置文件将mysql主机设置为dblink
。
还有其他方法可以发现您的数据库IP地址,但没有docker,因此您必须学习如何使用其他工具执行该任务。如果您想了解更多信息,请搜索"服务发现和docker"。