前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从Source-to-Image开始构建容器映像【Containers】

从Source-to-Image开始构建容器映像【Containers】

作者头像
yjg
修改2019-11-21 10:59:41
9040
修改2019-11-21 10:59:41
举报

Source-to-Image是一个很好的工具,是以快速,灵活,可再生的方式构建容器图像的应用。Source-to-Image通常缩写为S2I,它采用一个基本的“builder”映像,其中包含编译应用程序或安装依赖项(如Python的PIP或Ruby的Bundler)所需的所有库和构建工具,以及一组位于预定义位置的脚本,这些脚本用于构建、测试和运行应用程序。一旦构建器映像被创建,S2I就可以从存储库中获取代码,将其注入构建映像,编译或安装依赖项,并生成一个应用程序映像,使最终应用程序准备就绪。

为什么选择S2I

对于用任何编程语言编写的应用程序,S2I为构建可再现性的挑战提供了一个简单的解决方案。这意味着我可以重现一致的图像,使开发人员能够专注于他们的应用程序,而不是容器图像和编排。而且,由于构建环境是提前创建的,因此构建只需要应用程序编译或配置所需的时间(使用Go编译器背后的技术可以非常快)。

在我看来,S2I的真正优点是能够使用builder映像作为模板,这样就可以部署具有类似配置的类似应用程序,而无需为每个应用程序管理配置文件(如dockerfile),从而为类似应用程序提供相同、可重复的环境。更少的模板化图像意味着管理其更新的工作不那么繁忙,而且我相信它们很可能可以保持最新。

许多官方的图像生成器源已经存在(例如,Python S2i,Ruby S2i),但是制作一套套装的特定需求也很简单。

S2I 配置要求

构建一个与S2I兼容的图像只需要四个文件,不过还有一些文件可以派上用场。以下内容直接来自S2I自述文件:

文档

是否要求

描述

Dockerfile

定义基本生成器图像

s2i/bin/assemble

构建应用程序的脚本

s2i/bin/usage

打印生成器用法的脚本

s2i/bin/run

运行应用程序的脚本

s2i/bin/save-artifacts

用于保存生成工件的增量生成的脚本

test/run

生成器映像的测试脚本

test/test-app

测试应用程序源代码

生成器映像是从Dockerfile创建的,因此Dockerfile将包含编译、生成和运行源代码所需的所有包和库。Dockerfile还需要将s2i/bin/*和test/*文件复制到生成的图像中,以允许s2i使用它们。

s2i/bin/assemble脚本包含构建应用程序或安装其依赖项的逻辑。例如,如果构建器映像是针对Python应用程序的,那么汇编脚本可能会运行pip install来安装requirements.txt文件中的依赖项。对于Go,汇编脚本将运行Go-get等。

s2i/bin/run脚本应设置为Dockerfile中的CMD或ENTRYPOINT,并负责在应用程序映像运行时启动应用程序。在大多数情况下,此脚本是必需的,因为运行应用程序的是S2I构建产生的图像。对于Go构建器来说,它并不是严格必要的,但它对于测试应用程序是有帮助的。

s2i/bin/save artifacts脚本获取应用程序运行所需的所有工件,并通过tar命令将它们流式传输到stdout。这允许构建器映像进行增量构建,或使我们能够提取已编译的二进制文件,以便将其包含在后续构建中。

这些脚本文件可以用任何语言编写,只要它们可以在由Dockerfile构建的容器中执行。

注意:尽管文档说明了这一点,但并不需要测试/测试应用程序文件。如果使用s2i create命令将新的源代码构建到Image builder,则会为您设置一些空白测试,但这些测试并不是严格必要的。此外,大多数源代码到映像生成器都需要运行脚本,但对于我们将在本系列中创建的Golang生成器映像,这只是一种方便。

我们还需要源到映像软件来构建运行时映像或应用程序映像,但它不一定要安装在本地系统上。我们可以在OKD或OpenShift容器平台中创建整个构建管道,并在那里完成所有构建。使用本地安装的软件开发和测试映像更容易。

为您的平台获取源到映像的最新版本,或使用发行版的包管理器安装它(例如,dnf install s2i)。

我们现在已经安装了S2I,并且很好地理解了如何开始设计我们的构建器。在下一篇文章中,我们将介绍Dockerfile配置的良好实践(包括避免使用根权限),并查看构建示例。

在我们继续这个由四部分组成的系列时,我们将使用S2I需求,然后为Go编写的应用程序构建一个图像模板。最后,如何将S2I与OKD或OpenShift Container Platform buildConfigs一起使用,以自动生成图像管道。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么选择S2I
  • S2I 配置要求
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档