Rob*_*ert 69 lamp web-applications puppet vagrant docker
在黑暗时代,我通常用于开发LAMP Web应用程序的设置是在我的机器上进行本地测试.PHP(在我的例子中),数据库和Web服务器都是本机安装的.
服务器设置了Apache和MySQL的标准安装,我有多个虚拟主机用于Web应用程序的不同部分.当我对我在本地计算机上的结果感到满意时,我会登录到服务器和git pull
登台环境.假设一切都在服务器上运行,就像在我的机器上一样,我会为生产做同样的事情.
新起点…
所以现在我从头开始创建一个全新的Web应用程序,我想以"正确的方式"来做.我已经读过Docker,Vagrant和Puppet(以及Chef,虽然我个人更喜欢Puppet的依赖系统,而不是Chef的迭代过程).尽管我已经完成了所有的研究,但似乎仍有几个问题似乎无法找到答案:
是否应该为Web服务器(例如Apache),数据库服务器(例如MySQL)和Web应用程序的每个部分设置单独的Docker容器?
当我谈论Web应用程序的某些部分时,我的意思是像mysite.com,controlpanel.mysite.com等.这些"部分"将共享相同的数据库.
由于Docker似乎为Web和数据库服务器之类的东西提供了现成的容器,所以至少应该将这些容器放在单独的容器中.我的网络应用程序的不同部分也应该在不同的容器中吗?
Docker容器似乎被设计为可替换的,而不是我必须更新其中的软件.他们写的数据我不想放松怎么样?
数据库服务器将管理与我的数据库内容相关的文件(我想要备份).Web服务器将创建日志,我的Web应用程序将管理各种文件和缓存等.所有这些文件都需要在应用程序的容器之外写入(因为我可能在更新时替换它们?),所以他们去哪里?直接进入主机的文件系统?或者单独进入"Docker Volume"?如果他们进入Docker卷,我应该为数据库,Web服务器,应用程序等使用单独的卷吗?我可以像现在这样使用本地机器上的SFTP轻松访问内容吗?我不想在这里放松任何便利!
使用Puppet为开发服务器和生产服务器创建和管理Docker容器是一个好主意吗?
看来Puppet支持直接管理Docker容器,所以这似乎是从头开始轻松设置服务器或生产环境(使用Vagrant)的一种相当好的方法.
希望我已经问了一些相关的问题; 为开发和生产类似LAMP的网络应用程序获得一些适当的"最佳实践"会很棒,我发现它似乎没那么多!
Tho*_*eil 46
是否应该为Web服务器(例如Apache),数据库服务器(例如MySQL)和Web应用程序的每个部分设置单独的Docker容器?
这个问题没有正确的答案.如果您将在生产中使用docker,那么尝试在开发环境中运行docker容器,因为它们将在生产中.否则,最简单的方法就是使用docker容器.
该搬运工中心提供准备去容器PHP,数据库等,并很容易使用.另一方面,您必须将它们链接在一起以允许它们进行交互.对于开发环境,如果您使用多个容器,我建议使用docker-compose.
另一条路径是构建一个最接近您的生产机器的docker镜像(假设您只有一台机器),它将运行数据库,Web服务器和PHP.来自这种图像的容器必须运行多个进程.这可以通过不同方式实现.看一下主管或者phusion/baseimage.
当我谈论Web应用程序的某些部分时,我的意思是mysite.com,controlpanel.mysite.com等.
你可以将它们分开.如果这些应用程序需要共享会话,请确保会话存储在数据库或所有人都可访问的docker卷上.
Docker容器似乎被设计为可替换的,而不是我必须更新其中的软件.他们写的数据我不想放松怎么样?
Docker有一个称为卷的东西,允许将数据写在容器外的文件系统上.使用卷的方法有多种:您可以将目录从docker主机挂载到容器卷,也可以使用数据卷容器或命名卷.
Docker卷是一个重要的概念,值得花些时间来掌握它们.
如果要从docker主机轻松访问容器使用的数据,则可以在docker主机上安装目录.虽然对于文件的权限和所有权可能很棘手
关于备份,请查看docker用户指南,其中详细介绍了您需要了解的有关卷的所有信息.
使用Puppet为开发服务器和生产服务器创建和管理Docker容器是一个好主意吗?
最佳实践是在您的开发环境中运行,就像在生产环境中运行一样.如果所有工作都不会用于生产环境,那么为您的开发环境正确设置puppet是没有意义的.只有shell配置,拥有一个为Dock配置VM的Vagrant文件非常简单; 恕我直言木偶/厨师/ ...是矫枉过正.
你问的是正确的问题,但没有适合所有情况的答案.在我看来,有两种方法可以做:
sch*_*unk 13
虽然@Thomasleveil的答案已经非常好并涵盖了所有重要部分,但我想补充一些其他要点.
当您使用Vagrant 配置虚拟机时,通常使用Puppet或Chef为您的服务器安装所需的软件包......以及一些shell脚本.PuPHPet是配置基于虚拟机的LAMP堆栈以及学习Puppet和Vagrant如何在更复杂的设置中协同工作的绝佳来源.顺便提一下,另一种方法是Protobox.
当您使用Vagrant的Docker容器时,就像使用VM一样.然后,vagrant up
您基本上使用Docker 提供程序运行docker容器.Vagrant将从Dockerfile为您构建容器或使用现有图像,或多或少像docker-compose
(fig
)并运行它们.
选择Vagrant用于Docker设置的一个主要原因是,如果您或您的团队在Windows环境中部分工作,则Vagrant允许您保持设置一致,无论您的主机系统是什么(请参阅主机VM).
如果您使用的是OS X,则可以使用docker-compose
Virtual Box VM,如果您使用的是Linux,则可以本机使用Docker.ssh
无论您使用的是Windows还是OS X,它始终都可以通过boot2docker(或其他Docker Host VM)登录.
注意:您不应该SSH到您的容器,但这是另一个主题.
截至2015年2月
docker-compose
对我来说感觉有点尴尬,并且还能更有效地处理容器的启动,停止和重建.
Vagrant具有指定不同主机VM的优点,例如.每个项目,如果你喜欢这样的设置.
注意:还有一个Docker配置器,它与Puppet构建过程更相关.
是否应该为Web服务器(例如Apache),数据库服务器(例如MySQL)和Web应用程序的每个部分设置单独的Docker容器?
使用Docker容器时,您基本上运行单个隔离的进程.应避免使用监督,LAMP堆栈也不需要使用监督.
所以我的答案肯定是:是的,应该有单独的容器!
当我谈论Web应用程序的某些部分时,我的意思是mysite.com,controlpanel.mysite.com等.
这取决于您的需求,我建议您阅读12factor应用程序文档,该文档以非常详细的方式描述了要处理的重要事项.
Docker容器似乎被设计为可替换的,而不是我必须更新其中的软件.他们写的数据我不想放松怎么样?
除了@ Thomasleveil的答案之外,我还建议你为Amazon S3,SFTP或WebDAV等用户上传提供单独的存储后端.
在我看来,您的Web应用程序容器应被视为访问数据库和存储后端(服务)的客户端应用程序,而不是在生产环境中运行时依赖卷中的数据.
使用Puppet为开发服务器和生产服务器创建和管理Docker容器是一个好主意吗?
我不知道Puppet的编排功能,但是对于构建容器,如果你使用Vagrant,我认为不需要Puppet,因为Vagrant的原生Docker配置器.
奖金
对于上面描述的所有内容,您可以查看我的基于Yii 2.0 Framework的12factor PHP应用程序模板以及dockerized LAMP堆栈. 使用Docker,您还可以轻松地将反向代理或selenium测试容器插入到项目中,因为它们作为预构建映像存在,可以在几分钟内下载和配置,并在几秒钟内启动.