最新文章

无需 Dockerfile 的镜像构建:BuildPack vs Dockerfile

无需 Dockerfile 的镜像构建:BuildPack vs Dockerfile

过去的工作中,我们使用微服务、容器化以及服务编排构建了技术平台。为了提升开发团队的研发效率,我们同时还提供了 CICD 平台,用来将代码快速的部署到 Openshift(企业级的 Kubernetes) 集群。

部署的第一步就是应用程序的容器化,持续集成的交付物从以往的 jar 包、webpack 等变成了容器镜像。容器化将软件代码和所需的所有组件(库、框架、运行环境)打包到一起,进而可以在任何环境任何基础架构上一致地运行,并与其他应用“隔离”。

我们的代码需要从源码到编译到最终可运行的镜像,甚至部署,这一切在 CICD 的流水线中完成。最初,我们在每个代码仓库中都加入了三个文件,也通过项目生成器(类似 Spring Initializer)在新项目中注入:

  • Jenkinsfile.groovy:用来定义 Jenkins 的 Pipeline,针对不同的语言还会有多种版本
  • Manifest YAML:用于定义 Kubernetes 资源,也就是工作负载及其运行的相关描述
  • Dockerfile:用于构建对象

这个三个文件也需要在工作中不断的演进,起初项目较少(十几个)的时候我们基础团队还可以去各个代码仓库去维护升级。随着项目爆发式的增长,维护的成本越来越高。我们对 CICD 平台进行了迭代,将“Jenkinsfile.groovy”和 “manifest YAML”从项目中移出,变更较少的 Dockerfile 就保留了下来。

随着平台的演进,我们需要考虑将这唯一的“钉子户” Dockerfile 与代码解耦,必要的时候也需要对 Dockerfile 进行升级。因此调研了一下 buildpacks,就有了今天的这篇文章。

什么是 Dockerfile

Docker 通过读取 Dockerfile 中的说明自动构建镜像。Dockerfile 是一个文本文件,包含了由 Docker 可以执行用于构建镜像的指令。我们拿之前用于测试 Tekton 的 Java 项目的 Dockerfile 为例:

容器神话 Docker 是如何一分为二的

容器神话 Docker 是如何一分为二的

译者点评:

最近听了很多资深的人士关于开源,以及商业化的分析。开源与商业化,听起来就是一对矛盾的所在,似乎大家都在尝试做其二者的平衡。是先有开源,还是先有商业化?俗话说“谈钱不伤感情”,近几年背靠开源的创业公司如雨后春笋般涌现,即使是开发人 …