Consul 和 Tomcat 在同一个 docker 容器中
Consul and Tomcat in the same docker container
这是一个由两部分组成的问题。
第一部分:
在同一个 docker 容器中 运行 Consul 和 Tomcat 的最佳方法是什么?
我已经构建了自己的映像,正确安装了 Tomcat 和 Consul,但我不确定如何启动它们。我尝试将这两个调用作为 CMD 放在 Dockerfile 中,但没有成功。我试图将 Consul 作为 ENTRYPOINT (Dockerfile) 和 Tomcat 在 "docker run" 命令中调用。反之亦然,但我感觉这也不是什么好办法。
docker 将在一个 AWS 实例中 运行。每个 docker 容器将 运行 Consul 作为服务器,在另一个 AWS 实例中注册自己。 Consul 和 Consul-template 将被集成到适当的负载平衡中。这样,我的 HAproxy 实例将能够在我插入或拔出容器时正确转发请求。
第二部分:
在我做的个别测试中,docker 容器能够到达我的主 Consul 服务器(领导者),但它无法将自己注册为 "alive" 节点。
阅读 Consul 服务器上的日志,我认为这与我公开和发布的端口有关。在 AWS 中,我已经允许在该特定安全组中的实例之间使用 TCP 和 UDP 中的所有端口进行通信。
你知道我应该公开和发布哪些端口以允许独立领事(aws 实例)和领事服务器(运行在 aws 容器内的 docker 容器内进行正确通信) ? 运行 docker 容器的命令是什么:docker 运行 -p 8300:8300 .........
谢谢。
我会使用 ENTRYPOINT 在 docker 运行 上启动脚本。
类似
ENTRYPOINT myamazingbashscript.sh
语法可能不对,但你明白了
脚本应该启动这两个服务,最后应该 tail -f tomcat 日志(或任何日志)。
tail -f 将阻止容器退出,因为 tail -f 命令永远不会退出,它还会帮助您查看 tomcat 正在做什么
执行... docker logs -f 以查看 docker 运行
之后的日志
请注意,因为容器不会退出,您可以使用... docker exec -it containerName bash
这让您可以在容器内部四处嗅闻
通常不是将两个服务放在一个容器中的最佳方法,因为它破坏了关注点的分离和可重用性,但您可能有充分的理由
要构建,请使用 docker 构建,然后 运行 和 docker 运行 如您所述。
如果您决定采用 2 容器解决方案,那么您将需要公开容器之间的端口以允许它们相互通信。您可以使用 volumes_from
在容器之间共享文件
这是一个由两部分组成的问题。
第一部分: 在同一个 docker 容器中 运行 Consul 和 Tomcat 的最佳方法是什么?
我已经构建了自己的映像,正确安装了 Tomcat 和 Consul,但我不确定如何启动它们。我尝试将这两个调用作为 CMD 放在 Dockerfile 中,但没有成功。我试图将 Consul 作为 ENTRYPOINT (Dockerfile) 和 Tomcat 在 "docker run" 命令中调用。反之亦然,但我感觉这也不是什么好办法。
docker 将在一个 AWS 实例中 运行。每个 docker 容器将 运行 Consul 作为服务器,在另一个 AWS 实例中注册自己。 Consul 和 Consul-template 将被集成到适当的负载平衡中。这样,我的 HAproxy 实例将能够在我插入或拔出容器时正确转发请求。
第二部分: 在我做的个别测试中,docker 容器能够到达我的主 Consul 服务器(领导者),但它无法将自己注册为 "alive" 节点。
阅读 Consul 服务器上的日志,我认为这与我公开和发布的端口有关。在 AWS 中,我已经允许在该特定安全组中的实例之间使用 TCP 和 UDP 中的所有端口进行通信。
你知道我应该公开和发布哪些端口以允许独立领事(aws 实例)和领事服务器(运行在 aws 容器内的 docker 容器内进行正确通信) ? 运行 docker 容器的命令是什么:docker 运行 -p 8300:8300 .........
谢谢。
我会使用 ENTRYPOINT 在 docker 运行 上启动脚本。
类似
ENTRYPOINT myamazingbashscript.sh
语法可能不对,但你明白了
脚本应该启动这两个服务,最后应该 tail -f tomcat 日志(或任何日志)。
tail -f 将阻止容器退出,因为 tail -f 命令永远不会退出,它还会帮助您查看 tomcat 正在做什么
执行... docker logs -f 以查看 docker 运行
之后的日志请注意,因为容器不会退出,您可以使用... docker exec -it containerName bash
这让您可以在容器内部四处嗅闻
通常不是将两个服务放在一个容器中的最佳方法,因为它破坏了关注点的分离和可重用性,但您可能有充分的理由
要构建,请使用 docker 构建,然后 运行 和 docker 运行 如您所述。
如果您决定采用 2 容器解决方案,那么您将需要公开容器之间的端口以允许它们相互通信。您可以使用 volumes_from
在容器之间共享文件