如何在开发和生产环境中使用Docker?

3
我们目前在生产和开发环境中都使用chef。我喜欢docker的概念,可以为不同的服务角色启动独立的容器。我认为在构建开发环境时它将非常有效。但是我有点不确定我们应该如何在生产环境中使用它(或者我应该在生产环境中使用它吗?)。
在生产环境中,每个服务已经在它们专用的服务器实例上运行。我感觉在容器内运行它们而不是直接在主机操作系统上运行是低效的。
另一方面,如果我们只在开发环境中使用docker,我们最终将编写2份系统配置,一份在docker中,一份在chef中,这也不是理想的情况。
欢迎提出任何建议或意见。
2个回答

6
在生产环境中,每个服务已经在其专用服务器实例上运行。我认为将它们放置在容器内而不是直接在主机操作系统上运行是低效的。
Docker在生产环境中的优势在于轻松部署。为了使性能达到最佳状态,在每台生产机器上安装Docker,并让这些Docker主机仅运行一个容器。这样,您的应用程序将像以前一样访问相同数量的系统资源。
为了减少Docker可能引起的开销,有一些技巧:

快速网络

默认情况下,Docker会为您的容器创建一个新的网络堆栈,但如果您在运行新容器时使用--net=host选项,则容器将使用Docker主机的网络堆栈。这将使您的容器在网络性能方面没有任何开销。
还要注意,当使用--net=host时,您不需要使用-p docker run选项发布端口,也不需要暴露它们。容器进程中的任何监听端口都可以在Docker主机IP上访问。

快速文件系统

Docker容器文件系统是联合文件系统,与非分层文件系统相比较慢。为了保持良好的磁盘性能,请确保在容器中运行的进程在Docker数据卷上进行密集的读/写操作。数据卷不是容器分层文件系统的一部分,将具有您的Docker主机文件系统的性能。


1

Docker实际上非常高效 - 开销并不大,因为它不像虚拟化层,它只是一个带有自己命名空间和文件系统的容器。将相同的设置部署到生产环境中有几个优点:

  1. 您只需要测试一次 - 与本地运行的完全相同的内容在生产环境中运行,并且配置问题的可能性非常小。
  2. 您可以为所有实例使用完全相同的云映像,该映像是基本的Linux和Docker - 其他所有内容都由Docker处理,因此Chef / Puppet的需求量减少了90%。
  3. 使用docker跟踪配置更改可能更容易,因为基本上没有涉及脚本编写,因此对其他配置管理工具的需求也较少。
  4. 如果您想利用多个CPU,则可以在生产主机上运行多个相同镜像的容器,而无需担心这些进程如何相互协作,因为每个进程都有自己的文件系统等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接