Source to Image 工具介绍

介绍

Source to Image(S2I) 是一个创建 Docker 镜像的工具。也是 openshift 上面的主要构建镜像的方式之一。他的优点包括:

速度,S2I 可以实现很复杂的操作逻辑,而不会创建新的镜像层,所以运行起来很快。

打补丁,如果所依赖的镜像需要安全补丁,S2I 允许你一次性重新构建所有镜像。

高效, 在构建过程中,S2I不允许运行任意的 yum install 命令,以防止降低开发迭代速度

生态,S2I 鼓励一个共享镜像生态。从而你的应用可以实现最佳实践。

S2I 工作原理

S2I 的实现哲学是:所谓的镜像,就是一个运行环境 + 源代码。如是你是某一个类型的源代码,如果 Python, Ruby, HTML 等,那运行环境基本就是固定的。因此针对某类代码,只要提供好一个标准运行环境的基础镜像。使用的时候,先把用户的代码放到这个镜像中,生成一个新的镜像就可以。S2I 很适合给特定语言使用。

S2I 会依赖一个特殊的 base 镜像,这个镜像主要包括基础的运行环境,如 Python, PHP,Nginx等。以及几个特殊的 S2I 脚本, 如

主要负责将你的源代码安装到这个特殊的镜像中

主要指明你的源代码如何运行起来的

打印使用说明

redhat 官方有一些已经编写好的镜像例子,可以从找到。像 Python, Ruby。利用这些镜像,再加上你的源代码,可以快速构建出应用镜像。

安装 S2I 工具

S2I 是一个 Go 编写的程序,你可以从 Github 上面下载已经编译的二进制文件,也可以自己编译。下面是手动编译的方法。

使用 S2I 构建镜像

下面我们来使用 S2I 的功能,快速构建一个 Python 应用。

首先,先构建一个通用的 Python 2.7 基础镜像

这一步操作,和普通的 Docker 镜像构建是一样的,并没有什么不同。通查看 可以看到,

Dockerfile 的父镜像是, 这是一个 CentOS 提供的 S2I 基础镜像。

这个镜像中安装了一样常用的 Python 软件包。

唯一特殊的是把目录拷贝到了( 也就是) 位置。查看这个目录中的文件,就会看到上面提到的,及三个文件。

这样我们就得到了一个叫 的基本镜像。下一步,把 Python 源代码打包入python 的基本镜像中。

这个过程中,S2I 会做以下几个事情

利用镜像启动一个临时容器

把代码放到容器里面的位置

这里先把源代码转成tar包,再通过容器的 stdout 把 tar 文件传入容器中,并解压到位置

调用脚本进行源代码的安装

等 3 运行完成退出后,容器也就退出了

容器退出后,把容器提交为一个镜像

这时,一个名叫就构建好了,查看他的历史可以看到:

对比就会发现, 上面这个镜像只增加了一个层次。

最后直接启动镜像验证

https://github.com/openshift/source-to-image/releases

https://github.com/sclorg?q=s2i

https://blog.openshift.com/create-s2i-builder-image/

https://hub.docker.com/r/centos/s2i-base-centos7/

https://github.com/openshift/source-to-image

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180117G0FYAM00?refer=cp_1026

扫码关注云+社区