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

我们目前正在使用厨师生产和开发环境。 我喜欢Docker的概念,为不同的服务angular色启动独立的容器。 而且我认为在开发开发环境的时候它会起到很好的作用。 我有点不清楚我们应该如何在生产环境中使用它(或者我应该在生产环境中使用它吗?)。

在生产中,每个服务已经在其专用的服务器实例上运行。 我觉得在容器中运行它们是没有效率的,而不是直接在主机操作系统上运行。

另一方面,如果我们只在开发环境中使用docker,我们最终会写2个系统configuration副本,一个在docker和一个在厨师里,这也是不理想的。

任何build议或意见,将不胜感激。

在生产中,每个服务已经在其专用的服务器实例上运行。 我觉得在容器中运行它们是没有效率的,而不是直接在主机操作系统上运行。

docker在生产中的优势是易于部署。 为了保持最佳性能,请在每台生产机器上安装docker,并让每个docker主机只运行一个容器。 这样,您的应用程序就可以像以前一样访问相同数量的系统资源。

为了减lessdocker可以引发的开销,有一些技巧:

快速的networking

默认情况下,docker会为你的容器创build一个新的networking堆栈,但是如果你在运行一个新的容器的时候使用了–net = host选项,容器将会使用docker hostnetworking堆栈。 这将使您的容器在networking性能方面没有任何开销。

另外请注意,使用--net=host ,不需要使用--net=host运行选项发布端口,也不需要公开它们。 在容器进程中的任何监听端口都可以在docker主机ip上访问。

快速的文件系统

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

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

  1. 你只需要testing“一次” – 在本地运行的产品上运行的是完全相同的东西,configuration问题的可能性非常小。
  2. 您可以为您的所有实例使用相同的精确云图,这是您使用docker的基本linux – 其他任何操作都由Docker处理,因此90%的Chef / Puppet需要照顾。
  3. 由于基本上没有涉及脚本,所以跟踪你的configuration更改对于docker来说可以说更容易,所以对其他configurationpipe理工具的需求也减less了。
  4. 如果要利用多个CPU,则可以在生产主机上运行同一映像的多个容器,并且不必担心这些进程如何一起运行,因为每个进程都有自己的FS等。