2

我想知道我们如何在 docker swarm 模式下将 webapp 链接到数据库。我对 docker swarm 模式非常陌生,并且在我的本地机器上进行了基本的集群设置。任何链接都会很棒。

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

谢谢

4

2 回答 2

4

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

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

docker network create --driver=overlay my-network

创建一个名为 的数据库服务my-db,并将其附加到my-network网络。不需要“发布”数据库端口,因为 drupal 将通过my-network网络与数据库连接。如果您希望数据库可公开访问,则仅发布数据库端口。

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

创建一个 drupal 服务(名为mysite),并将其附加到同一网络。发布站点的端口,因为您希望它可以公开访问

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

服务创建好,容器运行后(可以用 来查看状态docker service ls),就可以<host-ip>:8080在浏览器中访问了。在 swarm 模式下,<host-ip>可以是 swarm 中任何主机的 IP 地址。“路由网格”会自动将网络连接路由到容器运行所在的节点。

MYSQL_USER现在,要配置 drupal,使用您在和中设置的用户名/密码MYSQL_PASSWORD,并my-db用作数据库的主机名(在高级选项下) - 当使用 docker 网络时,您可以通过它们的名称连接到同一网络上的其他服务。

drupal 配置

这只是一个非常简单的例子。需要研究的一些事情是;

  • 卷(将上传和用户数据保存在卷中,以便在更新容器时信息可以保留)
  • 秘密;将用户名和密码作为环境变量传递是不安全的。Docker 1.13 将引入docker secrets,它允许您以更安全的方式传递数据库凭据。文档尚未上线,但您可以在 GitHub 上找到它们
于 2017-01-16T23:54:22.170 回答
2

在 docker 中使用 Links 显然是连接容器的原因(尽管我自己仍然使用这种方法)

“新”的方法是使用 docker 网络,您可以在此处阅读更多信息: https ://docs.docker.com/engine/userguide/networking/get-started-overlay/

希望这可以帮助

于 2017-01-16T22:23:46.543 回答