Docker镜像用于应用程序打包

显然,似乎有两种应用程序打包和部署的做法

  1. 创build一个docker镜像并部署它
  2. 从头开始构build和部署应用程序。

我很困惑如何使用选项1)。 前提是你可以在任何平台上使用Docker镜像并重新使用它。 但是,在实践中,这是一个可行的解决scheme,因为环境往往具有平台和应用程序特定的configuration? 我的testing环境中的docker镜像不能部署到产品,因为它包含模拟和testing级configuration。

将应用程序打包为Docker镜像的想法是将所有外部/系统configurationembedded到应用程序本身中。 即:任何特定版本的外部引擎,如Java或ruby; 基本的GNU / Linux软件在你的系统中(不是不同版本的awk或grep)等等

从我的观点来看,在开发和生产的图像之间可能会有一些细微的差异,但是这种差异应该是像日志级别这样的小configuration参数或类似的东西。 使用应用程序的分发系统的容器的优点是避免所有与外部差异有关的痛苦,也是一个新的方法来解决“networking大小架构”和弹性平台的问题,以一种新的标准方式来部署它们。 在testing/开发系统中嘲笑一些外部服务不应该是一个问题,或者如果他们是我认为问题本身就是模拟的。 该模拟应该被embedded到你的应用程序容器中,但你可以把它们作为另一个图像(或者在可能的情况下避免嘲笑该服务并将其用作容器)。

编辑1:如果您使用Docker作为帮助持续集成或部署到生产的工具,一般方法是不推荐使用不同的容器进行开发和生产。 如果您有使用IT自动化工具(如Puppet,Chef,Ansible或Salt)的经验,他们是configuration您的容器的一种简单且快速的方式(有些作为Chef有一个docker特定的方法,厨师容器,在这里有一些优点),如果你的基础设施是使用它们构build的,这是一个很好的select。 但是,如果你正在构build/devise一个基于Docker的新体系结构,我将检查其他更分散和面向容器的选项作为Consul或etcd,以pipe理configuration模板和数据,服务发现,弹性部署。