【发布时间】:2014-11-26 04:21:55
【问题描述】:
在黑暗时代,我开发 LAMP Web 应用程序的常用设置是在我的机器上进行本地测试。 PHP(在我的例子中)、数据库和网络服务器都是本地安装的。
服务器设置了 Apache 和 MySQL 的标准安装,我有多个虚拟主机用于 Web 应用程序的不同部分。当我对本地计算机上的结果感到满意时,我登录到服务器并在暂存环境中执行git pull。
假设服务器上的一切都和我的机器上一样好,我会为生产做同样的事情。
新的开始……
所以现在我要从头开始一个全新的 Web 应用程序,我想以“正确的方式”来做。我已经阅读了有关 Docker、Vagrant 和 Puppet 的信息(以及 Chef,尽管我个人更喜欢 Puppet 的依赖系统而不是 Chef 的迭代过程)。尽管我已经完成了所有研究,但似乎仍有几个问题我似乎无法找到答案:
是否应该为 Web 服务器(如 Apache)、数据库服务器(如 MySQL)和 Web 应用程序的每个部分提供单独的 Docker 容器?
当我谈到网络应用程序的部分时,我指的是 mysite.com、controlpanel.mysite.com 等。这些“部分”将共享同一个数据库。
由于 Docker 似乎为 Web 和数据库服务器之类的东西提供了现成的容器,因此这些东西似乎至少应该放在单独的容器中。我的 Web 应用程序的不同部分也应该放在单独的容器中吗?
Docker 容器似乎被设计为可替换的,而不是我必须更新其中的软件。他们写的我不想丢失的数据呢?
数据库服务器将管理与我的数据库内容相关的文件(我将要备份)。 Web 服务器将创建日志,我的 Web 应用程序将管理各种文件和缓存等。所有这些文件都需要在应用程序的容器之外编写(因为我可能会在更新时替换它们?),那么它们去哪里了?直接进入主机的文件系统?还是放到一个单独的“Docker Volume”中?
如果它们进入 Docker 卷,我应该为数据库、Web 服务器、应用程序等使用单独的卷吗?我还能像现在一样在本地机器上使用SFTP 轻松访问内容吗?我不想在这里失去任何便利!
使用 Puppet 为开发服务器和生产服务器创建和管理 Docker 容器是个好主意吗?
Puppet 似乎支持直接管理 Docker 容器,因此这似乎是一种从头开始轻松设置服务器或生产环境(使用 Vagrant)的相当不错的方法。
希望我已经提出了一些相关问题;如果能获得一些适当的“最佳实践”来开发和生产类似 LAMP 的 Web 应用程序,那就太好了。只是我发现的似乎并不多!
【问题讨论】:
标签: web-applications vagrant docker puppet lamp