我才真正开始接触 Docker。我想将现有的应用程序基础架构放入容器中,以提供一致且隔离的环境,并更轻松地部署。
我的设置
我正在运行许多服务/守护进程(Redis、ES、PG、NGINX)以及一些工作人员(需要与 PG 和 Redis 通信)。我有 3 个 ruby Web 应用程序服务和一个 faye 服务,它们都需要与 Redis、PG 和 ES 通信。 NGINX 需要反向代理到应用程序。
容器策略
我想知道的第一件事是,对于 docker 和这些服务,您会使用哪种策略。
Dockerfile
您会/可以为所有容器创建一个 Dockerfile,还是将它们拆分? 即 Redis-Dockerfile、Web01-Dockerfile 等
开发与生产
在开发中,我希望在容器上立即更新文件更改(即从主机 FS 安装在容器中的路径)。安装点可能因开发人员而异。您将如何设置?
在生产中,我可以克隆主机上的应用程序存储库并挂载到虚拟机中,也可以克隆容器本身内的应用程序代码。
我知道用于挂载卷的 -v 标志,所以我想您可以设置一些环境变量来使主机挂载点可配置。
最佳答案
容器策略:这是一个常见问题。这真的取决于你想用你的应用程序做什么。
Dockerfile:每个镜像需要一个 Dockerfile。所以,如果你制作一个“一体式”容器,它就是一个 Dockerfile;如果您将应用程序拆分到具有不同角色(Redis、DB、Web ......)的多个容器中,那就是许多不同的 Dockerfile。
Dev vs Prod:这真的取决于语言/框架/等。你使用的。
ADD
后跟昂贵的构建/依赖步骤),这是一个好方法。/myapp
中。在开发 Dockerfile 中,您将声明 /myapp
为 VOLUME
,并且开发人员需要将其本地源副本绑定(bind)挂载到 /我的应用程序
。在生产 Dockerfile 中,您将使用 ADD
将源代码复制到 /myapp
。构建过程也会有细微差别。最后一种方法并不理想(因为当 dev 和 prod 环境尽可能接近时会更好!)但在某些情况下(当构建新容器非常长时)它会很有帮助。
关于Docker - 关于使用 Redis、Postgres、ElasticSearch、NGINX、Workers 和多个 ruby 应用程序设置 Web 应用程序的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21086434/