我刚刚进入Docker.我想将现有的应用程序基础架构放在容器中,以提供一致和隔离的环境,并且更容易部署.
我的设置
我正在运行一些服务/守护程序(Redis,ES,PG,Nginx)以及一些工作人员(需要与PG和Redis交谈).我有3个Ruby应用程序服务和一个faye服务,所有这些都需要和Redis,PG和ES进行通话. Nginx将需要反向代理应用程序.
集装箱策略
我想知道的第一件事是你将在Docker和这些服务中使用哪种策略.
>您将为每个服务创建一个(例如ubuntu)容器,然后使用适当的隧道(-link)启动它们到容器?
>您将一个容器上的服务和另一个应用程序捆绑在一起吗?
>或者,你会创建一个巨大的容器吗?
Dockerfile
你/你能为所有容器制作一个Docker文件,还是将它们分开?
即Redis-Dockerfile,Web01-Dockerfile等
发展与生产
在开发中,我想对容器(即从主机FS容器中安装的路径)立即更新文件更改.开发人员的开发人员可能有所不同.你会如何设定?
在生产中,我可以克隆主机上的应用程序备份,并挂载在虚拟机中,或者我可以克隆容器本身中的应用程序代码.
我知道安装卷的-v标志,所以我想象你可以设置一些环境变量来使主机安装点可以配置.
>如果您的应用程序拥有大量部署(例如,如果您的应用程序是SAAS,并且您将为每个客户部署一个新实例),但是这些部署预计会相当小,那么您可能希望将所有内容都放在一个单一的容器,因为部署将会容易得多.
>如果您的应用程序可能会显着缩放(即,如果您希望需要多个前端,工作人员等),则可能希望将每个服务放在不同的容器中,以便您可以分别扩展每个服务.
>如果您的应用程序将拥有大量的部署,并且必须扩展,那么您将需要多个容器,并确保正确使用链接:-)
Dockerfile:每个图像需要一个Dockerfile.所以,如果你制作一个“一体化”容器,那就是一个Docker文件;如果您将应用程序拆分为具有不同角色(Redis,DB,Web …)的多个容器,这是多个不同的Docker文件.
Dev vs Prod:它真的取决于语言/框架等.你使用
>有时,你可以在你的本地机器上工作,并且每一次都建立容器(并测试它们),然后(有点像你会“尝试推入”,除了它要快得多).
如果构建新容器需要一段时间(例如,如果您使用ADD,然后是昂贵的构建/依赖性步骤),这是一个很好的方法.
>如果容器构建速度快,您可以重新重新部署新容器,每次更改某些内容时.
>您也可以使用两个稍微不同的Dockerfiles.假设你的来源将在/ myapp中.在开发Dockerfile中,您将声明/ myapp为VOLUME,并且开发人员将期望将源的本地副本绑定到/ myapp.在生产Dockerfile中,您将使用ADD将源复制到/ myapp.在构建过程中也会有微小的差异.
最后一个方法不是很理想(因为dev和prod环境尽可能的接近),但在某些情况下(当构建新的容器很长时),它有很多帮助.