原文地址:http://www.javashuo.com/article/p-ekxhfmnt-gy.htmlhtml
写Dockerfile是构建Docker镜像最一般的方式,接触过Docker的童鞋多少了解一些。前段时间研究OpenShift(paas的一种),发现了另一种构建Docker镜像的方式:S2I。git
S2I是Source-to-Image的缩写。github
S2I是一套工具包和工做流程,用于从源代码构建重复性Docker镜像。框架
S2I是一个框架,它使写镜像变得简单。它把程序源代码做为输入,生成一个运行已组装应用程序的新镜像并做为输出。工具
S2I的详细介绍以及使用方法能够参考如下官方文档。本文就不复述(fan yi)了。ui
Talk is Cheap, Show me the Picture.
先上图。orm
源代码只是构建镜像的多种输入的一种,还有二进制文件等其它输入。镜像构建的过程也比较复杂。下图是为了清晰地进行对比,因此画得简单一些。htm
由上图能够看出,Dockerfile方式的构建过程比较直接:blog
而S2I方式的构建过程比较“曲折”:开发
从上述过程能够看出,S2I方式比Dockerfile方式多了一步,多了两样东西:S2I脚本和镜像(中间)。
S2I脚本有4种。
关于引入S2I构建镜像的好处,书面类的描述能够参考官方文档,这里谈谈实践下来我的的感觉和理解。
首先,要了解为何要引入S2I。
若是必定要把构建镜像分为两部分,能够分为
引入S2I的目的就是为了分离这两部分的工做。
其中环境准备工做交给了构建器镜像,
构建器镜像一旦生成将保持不变,可理解为静态部分。
而源代码相关工做交给了S2I脚本。
在构建镜像(成品)过程当中,S2I将根据S2I脚本定义的步骤进行源代码编译、二进制程序部署、服务启动预备,能够理解为动态部分。
这样的分离带来了以下好处: