Docker分离关注点/服务

时间:2016-04-01 11:57:25

标签: docker

我有一个laravel项目,我正在使用docker。目前我正在使用一个容器来托管我的项目所需的所有服务(apache,mySQL等)以及所需的依赖项(项目文件,git,composer等)。

从我正在阅读的内容来看,目前的最佳做法是将每个服务放入一个单独的容器中。到目前为止,这似乎很简单,因为这些服务被设计为长度运行(apache服务器,mySQL服务器)。当我使用-d启动这些“服务”容器时,它们会继续运行(docker ps),因为它们的主要流程会持续运行。

但是,当我从项目容器中删除所有服务时,没有剩下的主要流程可以继续运行。这意味着我的容器一旦旋转就会立即退出。

read the 'hacks'正在运行其他流程,例如tail -f /dev/nullsleep infinityusing interactive模式,installing supervisord(我认为最终会看到没有进程这样的容器?)甚至让容器在前台运行(占用终端控制台......)。

如何将这样的容器联网以使其像抽象服务一样运行但在没有这些黑客的情况下分离?我似乎无法在官方码头文档中找到关于此的更多信息,也无法找到其他项目的任何示例(请链接任何项目)

编辑:我不是在谈论用于存储我的项目流程的数据的卷/存储容器,而是我如何使用容器来存储项目本身和它的依赖关系不是服务(项目文件,git,作曲家)

2 个答案:

答案 0 :(得分:0)

运行容器时尝试使用标志运行...

docker run -dt ..... etc
你可能会尝试.....

docker run -dti ..... etc

让我知道这是否带来任何快乐。我一直在为我工作。

我知道你想避免乱砍,但如果上述失败,那么还要添加......

CMD cat 

到你的Dockerfile的末尾 - 它是一个黑客,但是最干净的黑客:)

答案 1 :(得分:0)

所以在阅读this几次以及Joachim Isaksson的评论之后,我终于明白了。工具不需要容器连续运行即可使用。正确分离项目文件,服务(mySQL,apache)和工具(git,composer)的方式不同。

项目文件保存在数据卷容器中。这些服务是网络化的,因为它们暴露了端口。这些工具位于自己的容器中,它们共享项目文件数据量 - 它们没有联网。日志,数据库和其他输出可以保存在不同的卷中。

如果您希望运行其中一个工具,可以使用docker run传递相关命令来启动工具容器。然后,该工具将操作共享卷中持久存储的目录中的数据。只要操作共享卷中的数据的命令运行然后容器停止,容器就会持久存在。

我不知道为什么这让我花了很长时间才能掌握,但这对我来说是一个很好的时刻。