我想知道我们如何在 docker swarm 模式下将 webapp 链接到数据库。我对 docker swarm 模式非常陌生,并且在我的本地机器上进行了基本的集群设置。任何链接都会很棒。
示例:托管一个 drupal 应用程序(连接 drupal cms 容器和 mysql 数据库容器)。
谢谢
我想知道我们如何在 docker swarm 模式下将 webapp 链接到数据库。我对 docker swarm 模式非常陌生,并且在我的本地机器上进行了基本的集群设置。任何链接都会很棒。
示例:托管一个 drupal 应用程序(连接 drupal cms 容器和 mysql 数据库容器)。
谢谢
正确,使用自定义网络是前进的方向。一个非常简单的例子让你开始;
创建一个“覆盖”网络(覆盖网络允许容器进行通信,即使它们运行在 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 网络时,您可以通过它们的名称连接到同一网络上的其他服务。
这只是一个非常简单的例子。需要研究的一些事情是;
docker secrets
,它允许您以更安全的方式传递数据库凭据。文档尚未上线,但您可以在 GitHub 上找到它们在 docker 中使用 Links 显然是连接容器的原因(尽管我自己仍然使用这种方法)
“新”的方法是使用 docker 网络,您可以在此处阅读更多信息: https ://docs.docker.com/engine/userguide/networking/get-started-overlay/
希望这可以帮助