专栏首页Opensource翻译专栏从Source-to-Image开始构建容器映像【Containers】

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

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一起使用,以自动生成图像管道。

原文链接:https://opensource.com/article/19/5/source-image-golang-part-1

原文作者:Chris Collins

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 物联网应用和事件驱动计算重塑云服务

    如今,一些全球主要的公共云提供商已经为物联网和事件驱动计算推出了新的服务。了解这些服务对企业的IT团队和未来的云计算将有一些重要的意义。 工具总是以其用途塑造...

    静一
  • CNCF案例研究:T-Mobile是如何利用Kubernetes来处理iPhone发布时候的规模

    美国第三大无线运营商T-Mobile发现自己不够敏捷,无法跟上业务目标:2015年,新代码投产花了7个月时间。第二年,公司采用了Pivotal Cloud Fo...

    CNCF
  • React + webpack 开发单页面应用简明中文文档教程(十一)将项目打包到子目录运行

    版权声明:本文为 FengCms FungLeo 原创文章,允许转载,但转载必须注明出处并附带首发链接 ...

    FungLeo
  • angularjs学习第五天笔记(第二篇:表单验证升级篇)

    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指...

    小小许
  • angularjs学习第五天笔记(第二篇:表单验证升级篇)

    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指...

    小小许
  • React + webpack 开发单页面应用简明中文文档教程(六)渲染一个列表,初识 jsx 文件

    版权声明:本文为 FengCms FungLeo 原创文章,允许转载,但转载必须注明出处并附带首发链接 ...

    FungLeo
  • 云计算把天变了 软件供应商怎能不变?

    所谓互联网的发展离不开软件和硬件两方面的技术进步。而软件供应商相比硬件供应商来讲其生存困难度一直要更为困难,软件供应商不仅要考虑用户需求什么,还要了解竞争对手的...

    静一
  • Qt文件操作QFile

    上述文件读取操作中,使用的是C++习惯下的read函数,其使用也和C++的read函数差不多,需要讲解一下的是QFile的open函数的参数,有以下的表列

    impressionyang
  • 人人能上手:OpenAI发射初学者友好的强化学习教程 | 代码简约易懂

    他们刚刚发射了一套强化学习 (RL) 入门教程,叫做Spinning Up。真诚友好,无微不至。

    量子位
  • 持续交付:云原生应用的“十二要素”

    “独立系统的架构原则”(https://isa-principles.org/)与“十二要素应用”密切相关,但前者更注重架构方面。这些原则基于微服务,尤其是自包...

    用户1682855

扫码关注云+社区

领取腾讯云代金券