使用 Docker 实现前端应用的标准化构建、部署和运行

2023-10-23 14:24:23 浏览数 (1)

Why Docker?

Docker 容器化技术是当今最重要的基础设施之一,或者说它已经成为服务程序 的标准化运行环境。

先不谈它相比传统的虚拟化技术有多少优势,站在软件工程角度,笔者认为,Docker 有两个重要的意义:

一)提供一致性的运行环境。让我们的程序在一致性的环境中运行:不管是开发环境、测试环境、还是生产环境;不管是开发时、构建时、还是运行时

比如开发时可以使用 Docker Dev Environments, 可以配合 VsCode Remote 开发,从而实现跳槽时或者换设备,可以快速 Setup 自己的开发环境。有兴趣的可以看看掘友写的 Docker化一个前端基础开发环境:简洁高效的选择

构建时,现在 CI/CD 平台都是基于 Docker 来提供多样化的构建环境需求。

运行时,‘巨轮’ K8S 已经是云时代的重要基础设施。

二)标准化的服务程序封装技术。

在没有容器之前,使用不同编程语言或框架编写的程序,部署和运行的方式千差万别。比如 Java 会生成 jar 包或者war 包,运行环境需要预装指定版本的 JDK…

而现在,容器镜像成为了标准的服务程序封装技术。镜像中包含了程序以及程序对运行环境的依赖

不管前后端应用都可以使用镜像的形式进行分发和流通。这应该就是 Docker Logo,那条鲸鱼驮着货运箱的解释吧:就像我们平时下载、传递 Zip 文件一样, 镜像是云时代’通用货币’,可以在研发的不同环节、区域中流通。

这种标准化的打包格式、轻量化的运行时,不仅给开发者和运维带来便利, 也催生了强大的容器管理工具比如 K8S, K8S 现在已经是容器和集群管理的标准。


那 Docker 之于前端意义是啥?

Docker 对前端的意义也很重大。 实际上,Docker 的世界里,并不区分什么前端、后端,没有人说只适合后端、不适合前端 … 在运维的眼里更是如此

为了照顾那些不太懂 Docker 的开发者,本文会循序渐进、由浅入深地讲解。如果你需要 Docker 入门教程,推荐你看看 Docker —— 从入门到实践

主要分成三个部分:

  • 标准化的 CI/CD。讲讲怎么基于 Docker 来构建前端应用,这里提出了一个重要的观点:就是基于 Dockerfile 来实现 ‘跨 CI/CD’ 的任务执行,我们可以在 Dockerfile 中执行各种任务,包括环境初始化、单元测试、构建等等
  • 标准化部署和运行。怎么部署基于 Docker 的前端应用,包括静态资源、NodeJS 程序、微前端。
  • 一些高级的话题。讲讲容器化后的前端应用怎么实现 ’一份基准代码,多份部署‘、灰度发布、蓝绿发布等高级发布需求。

标准化CI/CD

市面上有很多 CI/CD 产品,比如 GitLab、Github Action、Jenkins、Zadig… 它们的构建配置、脚本语法差异都挺大,基本上是不能共用的。

比如我们公司前不久引入了 Zadig,原本基于 Jenkinks 的构建配置几乎需要重新适配。

有没有跨‘平台’的方式?于是,我开始探索将前端 CI/CD 的流程完全集成到 Docker 镜像构建中去。

从简单的单元测试开始

我们先从简单的任务开始。先来写一个简单的单元测试:

代码语言:javascript复制
FROM node:20-slim

# 


	

0 人点赞