背景
通常的应用开发过程,是由开发人员使用某种计算机语言,比如Java,开发特定项目然后提交到代码仓库。紧接着,源代码会被编译成二进制代码,被放置于特定的环境中运行,比如Java运行时或者Web Server等。随着容器以及容器编排技术的发展和成熟,越来越多的应用将从传统的虚拟机部署方式改为容器部署模式。这就增加了一个关键的步骤:把应用打包成容器镜像,也称为应用容器化。
那么这个步骤还是由开发人员完成吗?开发人员的内心os:我难道不应该专注于写业务逻辑吗?这个打包也要由我来完成?好吧,但是打包写Dockerfile我没有经验啊!要怎么避开里面的陷阱呢?以后源代码或者基础镜像更新了,还要由我来维护吗?
带着这些疑问,我们来仔细看看应用容器化的具体过程是怎么样的吧。
从源代码到容器镜像
当开发人员完成了一个应用项目并提交代码库之后,为了让代码能在容器环境中运行,需要把源代码转换成符合OCI标准的容器镜像,这个过程称为构建(build)。构建过程通常分为两个子步骤,第一步是将源代码编译成二进制文件,第二步是加上基础操作系统和相关依赖(比如Java运行时)合并成标准容器镜像。
第一步的编译取决于应用项目所采用的语言和框架,第二步常规的方法则是以撰写Dockerfile以及使用docker build来完成的。以使用Spring框架开发的项目为例,我们可以看到常规的构建过程是这样的:
- 首先,将源代码下载到本地,使用Maven命令对Spring项目进行Java编译: