在Docker Swarm模式下链接应用程序
我想知道如何链接到泊坞窗群模式的Web应用程序到数据库。 我是docker群模式的新手,在本地机器上有一个基本的群集设置。 任何链接将是伟大的。
示例:托pipe一个drupal应用程序(连接drupal cms容器和mysql数据库容器)。
谢谢
正确的,使用自定义networking是前进的方向。 一个非常简单的例子,让你开始;
创build一个“覆盖”networking(覆盖networking允许容器进行通信,即使它们在群中的不同节点上运行);
docker network create --driver=overlay my-network
创build一个名为my-db
的数据库服务,并将其附加到my-network
networking。 没有必要“发布”数据库端口,因为Drupal将通过my-network
networking连接数据库。 如果希望公开访问数据库,则只发布数据库端口。
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_USER
和MYSQL_PASSWORD
设置的用户名/密码,并使用my-db
作为数据库的主机名(在高级选项下)来configurationdrupal,在使用MYSQL_USER
networking时,您可以通过连接到同一networking上的其他服务他们的名字。
这只是一个很快的例子。 有些东西要看是什么;
- 卷(保存上传数据和卷中的用户数据,以便更新容器时可以保存信息)
- 秘密; 传递用户名和密码作为环境variables是不安全的。 Docker 1.13将引入
docker secrets
,这允许您以更安全的方式传递数据库凭证。 文档还没有生效,但你可以在GitHub上find它们
在Docker中使用链接显然更多的是为什么连接到容器(尽pipe我自己仍然使用这种方法)
“新”方法是使用dockernetworking,您可以在这里阅读更多关于它的信息: https : //docs.docker.com/engine/userguide/networking/get-started-overlay/
希望这可以帮助