使用 docker compose 的最佳部署策略(LAMP 堆栈)

Posted

技术标签:

【中文标题】使用 docker compose 的最佳部署策略(LAMP 堆栈)【英文标题】:Best deployment strategy with docker compose (LAMP stack) 【发布时间】:2018-06-29 21:17:23 【问题描述】:

我决定在我的所有项目中开始使用 docker,并且我对部署方面的最佳实践很感兴趣。

如果我有一个本地 docker 环境,即运行 php-apache、mysql 和 redis 服务,那么部署时最好的策略是什么?您是否有一个用于生产的自定义 docker-compose 配置,它删除了 redis 和 mysql 服务(假设您希望它们在自己的专用服务器上)?

【问题讨论】:

如果你要无缘无故地对我投反对票,至少有勇气告诉我原因。我知道 *** 是针对编程相关问题的,但最后我检查了一下,部署是其中很大一部分。 我建议从官方文档 docs.docker.com/compose/production 开始。我还将研究负载平衡存储,因为您不再需要考虑在特定主机上运行的服务。我发现 docker 和部署最有趣的一件事是,您可以使用 swarms/clusters 来扩展您需要按需扩展的服务。请注意,我没有投反对票。 感谢 JimL - 这是有道理的。因此它可以与添加的服务一起部署,并使用群/集群,它只会根据需要创建更多。您是否熟悉它如何使所有集群之间的所有数据库数据保持同步,因为听起来每个人都有自己的数据库实例(如果这是它部署的服务之一) 【参考方案1】:

有许多可行的方法可以在生产环境中运行 PHP 容器,因此要全面回答您的问题有点困难。我将提供几个选项:

使用Docker Cloud 之类的容器托管服务通过内置的 Apache 服务托管您的 PHP 代码。 使用托管在您自己的服务器上的编排服务(如Swarm 或Kubernetes)。您将在此处进行更多设置,但它也会为您提供更多控制权。还有一些服务可以让这更容易,例如Rancher 或Codemason。 在一台机器上运行 docker-compose。当然,它不是水平可扩展的,但如果您只是在处理一个副项目或小型应用程序,您可以在一台服务器上运行所有容器来启动。

作为关于数据库容器的说明,您可以将您的数据库容器化,并且假设您将实际数据放在一个卷中并有一个合理的备份系统,那么容器没有理由不这样做注意安全。您可能希望首先为您的数据库运行一个容器或使用托管数据库服务,因为跨多个容器扩展数据库可能会变得复杂(但here's a little bit about how you might do it with MySQL)。

【讨论】:

【参考方案2】:

我想我会自己回答这个问题。

在深入挖掘之后,我发现将数据库部署在容器中并不是一个好主意。如果我使用 swarm,则很难在整个系统中保持数据完整性。

看起来大多数人只是单独托管数据库,并且只在本地开发环境中将数据库容器化。

因此,对于部署,目前最好的选择是仅部署已配置的 Web 服务器和任何其他无状态服务器要求。

【讨论】:

以上是关于使用 docker compose 的最佳部署策略(LAMP 堆栈)的主要内容,如果未能解决你的问题,请参考以下文章

Docker-Compose部署tomcat与redis及mysql

Docker--------docker-compose编排最佳实战

docker-compose编排最佳实战(多服务)

使用docker部署nginx+tomcat架构:使用docker-compose简化部署操作

idea 使用docker插件部署docker-compose失败?

docker-compose概述与编排部署