跨多个主机链接的Docker容器

Docker容器链接是要理解的重要概念,因为生产中的任何应用程序通常都将在跨多个主机的容器集群上运行。 但是简单的容器链接不允许跨主机通信。

Docker容器链接有什么问题?

Docker容器可以相互通信,如技术提示#66所示,可以手动链接,也可以如技术提示#68所示,使用Fig进行编排。 两者都使用容器链接,但是其固有的缺点是它仅限于单个主机。 如果容器跨多个主机运行,则链接不起作用。

解决办法是什么?

本技术提示将改进技术提示#66#68内置的示例,并显示如果容器在多个主机上运行,​​则可以连接这些容器。

通过显式发布主机/端口并从其他主机上的容器中使用它,可以轻松完成跨多个主机的Docker容器链接。

让我们开始吧!

  1. 启动MySQL容器为:
    docker run --name mysqldb -e MYSQL_USER=mysql -e MYSQL_PASSWORD=mysql -e MYSQL_DATABASE=sample -e MYSQL_ROOT_PASSWORD=supersecret -p 5306:3306 -d mysql

    MySQL容器将端口3306明确转发到端口5506

  2. Git存储库具有定制/execute.sh ,可创建MySQL数据源。 该命令如下所示:
    data-source add --name=mysqlDS --driver-name=mysql --jndi-name=java:jboss/datasources/ExampleMySQLDS --connection-url=jdbc:mysql://$DB_PORT_3306_TCP_ADDR:$DB_PORT_3306_TCP_PORT/sample?useUnicode=true&characterEncoding=UTF-8 --user-name=mysql --password=mysql --use-ccm=false --max-pool-size=25 --blocking-timeout-wait-millis=5000 --enabled=true

    该命令使用jboss-cli为WildFly创建JDBC资源。 它使用$DB_PORT_3306_TCP_ADDR$DB_PORT_3306_TCP_PORT变量,这些变量是根据容器链接环境变量定义的。 创建容器的环境变量的方案很奇怪。 它在变量名称本身中公开端口号。 我希望在以后的版本中对此有所改善。

    需要更新此命令,以便可以使用显式主机/端口。

    因此,将命令更新为:

    data-source add --name=mysqlDS --driver-name=mysql --jndi-name=java:jboss/datasources/ExampleMySQLDS --connection-url=jdbc:mysql://$MYSQL_HOST:$MYSQL_PORT/sample?useUnicode=true&characterEncoding=UTF-8 --user-name=mysql --password=mysql --use-ccm=false --max-pool-size=25 --blocking-timeout-wait-millis=5000 --enabled=true

    该命令的唯一更改是使用$MYSQL_HOST$MYSQL_PORT变量。 该命令已存在于文件中,但已注释。 因此,只需评论上一个,然后取消注释该评论即可。

  3. 生成映像并按以下方式运行:
    docker build -t arungupta/wildfly-mysql-javaee7 .
    docker run --name mywildfly -e MYSQL_HOST=<IP_ADDRESS> -e MYSQL_PORT=5306 -p 8080:8080 -d arungupta/wildfly-mysql-javaee7

    确保用主机的IP地址替换<IP_ADDRESS> 。 为了方便起见,我在同一主机上运行它。 在这种情况下,可以使用boot2docker ip轻松获得IP地址。

  4. 可以通过访问REST端点来快速验证部署:
    curl http://192.168.59.103:8080/employees/resources/employees/
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><collection><employee><id>1</id><name>Penny</name></employee><employee><id>2</id><name>Sheldon</name></employee><employee><id>3</id><name>Amy</name></employee><employee><id>4</id><name>Leonard</name></employee><employee><id>5</id><name>Bernadette</name></employee><employee><id>6</id><name>Raj</name></employee><employee><id>7</id><name>Howard</name></employee><employee><id>8</id><name>Priya</name></employee></collection>

这样,您的WildFly和MySQL可以在两个单独的主机上运行,​​而无需特殊配置。

请享用!

Docker允许使用Ambassador Containers进行跨主机的容器链接,但这为要访问的服务增加了一个冗余跃点。 较干净的解决方案是使用KubernetesSwarm,稍后再介绍。

Marek还在“ 在多个主机上连接Docker容器”中写了一篇更详尽的解决方案的博客。

翻译自: https://www.javacodegeeks.com/2015/01/docker-container-linking-across-multiple-hosts.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值