
4.2.3 应用容器化方法
企业应用中JavaEE类应用的打包形式通常是War包、Jar包,Spring Boot类应用的打包形式通常是Fat Jar。应用容器化在本质上是将打包的应用放到包含应用运行环境的容器镜像中运行。在应用系统容器化的过程中会涉及三类镜像:
·基础镜像:指支持应用运行的基础系统环境的镜像,包括已经安装了必要的组件和工具以及包含了与运行相关的脚本和参数等。例如OpenJDK、Tomcat、Nodejs、Python等镜像。
·应用镜像:指在基础镜像之上对应用进行构建、容器化封装,封装之后的镜像是包含应用的,直接或者传入配置就可以启动运行。
·其他技术组件镜像:应用部署、运行所依赖的应用服务器、数据库、消息中间件等技术组件。例如AMQ、Redis、MySQL、Jenkins等。
对于第一类和第三类的镜像,建议最好使用可信镜像源仓库,如红帽官方镜像(https://access.redhat.com/containers/)或者其他官方镜像。当然,完全可以自行构建这些镜像。在OpenShift中应用容器化主要指对第二类应用镜像的制作,主要有三种方法:本地构建、CI构建、S2I构建。
·本地构建:工程师编写Dockerfile,并在一台或多台主机上手工执行docker/podman build命令构建应用镜像。这种方式非常简单易行,适合开发人员本地测试以及开发测试环境构建镜像调试。
·CI构建:Jenkins集群在CI流程中调用Maven执行构建,Maven通过插件按指定的Dockerfile生成应用的容器镜像。这种方法的不足之处是资源利用率较低,适用的场景是传统持续集成。
·OpenShift Source-to-Image(S2I)构建:OpenShift在隔离的容器环境中进行应用的构建编译并生成应用的容器镜像。S2I适用于容器场景下的持续集成,也很方便,但前提是我们需要有现成的S2I Builder镜像。红帽官方会提供很多S2I Builder镜像。如果客户需要的Builder镜像红帽官网没有提供,则需要自行制作。
由于CI构建主要由Jenkins或Tekton完成,我们将会在后续DevOps章节中介绍这部分内容。
本章接下来的内容将重点介绍如何使用本地构建和OpenShift S2I实现应用容器化。在正式介绍应用容器化之前,先介绍制作容器镜像的最佳实践,在进行应用容器化时也将遵循这些准则。