在Docker Swarm模式下链接应用程序

我想知道如何链接到泊坞窗群模式的Web应用程序到数据库。 我是docker群模式的新手,在本地机器上有一个基本的群集设置。 任何链接将是伟大的。

示例:托pipe一个drupal应用程序(连接drupal cms容器和mysql数据库容器)。

谢谢

正确的,使用自定义networking是前进的方向。 一个非常简单的例子,让你开始;

创build一个“覆盖”networking(覆盖networking允许容器进行通信,即使它们在群中的不同节点上运行);

docker network create --driver=overlay my-network 

创build一个名为my-db的数据库服务,并将其附加到my-networknetworking。 没有必要“发布”数据库端口,因为Drupal将通过my-networknetworking连接数据库。 如果希望公开访问数据库,则只发布数据库端口。

 docker service create \ --name=my-db \ -e MYSQL_ROOT_PASSWORD=topsecret \ -e MYSQL_DATABASE=drupal\ -e MYSQL_USER=drupal-user \ -e MYSQL_PASSWORD=secret \ --network=my-network \ mysql:5.7 

创build一个drupal服务(名为mysite ),并将其连接到同一个networking。 发布网站的端口,因为你希望它可以公开访问

 docker service create \ --name=mysite \ --network=my-network \ --publish=8080:80 \ drupal:8.2-apache 

服务创build完成后,容器正在运行(您可以使用docker service ls检查状态),您可以在浏览器中访问<host-ip>:8080 。 在群集模式下, <host-ip>可以是群中任何主机的IP地址。 “路由网格”将自动将networking连接路由到容器运行的节点。

现在,使用您在MYSQL_USERMYSQL_PASSWORD设置的用户名/密码,并使用my-db作为数据库的主机名(在高级选项下)来configurationdrupal,在使用MYSQL_USERnetworking时,您可以通过连接到同一networking上的其他服务他们的名字。

Drupal配置

这只是一个很快的例子。 有些东西要看是什么;

  • 卷(保存上传数据和卷中的用户数据,以便更新容器时可以保存信息)
  • 秘密; 传递用户名和密码作为环境variables是不安全的。 Docker 1.13将引入docker secrets ,这允许您以更安全的方式传递数据库凭证。 文档还没有生效,但你可以在GitHub上find它们

在Docker中使用链接显然更多的是为什么连接到容器(尽pipe我自己仍然使用这种方法)

“新”方法是使用dockernetworking,您可以在这里阅读更多关于它的信息: https : //docs.docker.com/engine/userguide/networking/get-started-overlay/

希望这可以帮助