一个前端眼中的Docker

lxf2023-03-13 16:48:01

我正在参加「AdminJS·启航计划」

Docker 是什么?

Docker 是一个用于开发、运行和发布的应用的开发平台。Docker 能够将应用程序与基础架构分离,通过利用 Docker 快速交付、测试和部署代码方法,显着减少编写代码和在生产中运行之间的延迟

上面就是官网关于 Docker 的简介。抓住几个关键词来理解 Docker 是什么。

首先分离的作用,Docker 是一种容器技术,一方面 Docker 可以将程序本身同程序的基础架构分离,如同实例之间的关系,只要创建好“类”,就能到处去使用“实例”。另一方面,容器就类似于一个封闭的环境,容器之间也是相互分离的,互不干扰的,保证了环境的统一和安全,就不会出现“测试环境没问题,到了生产环境就报错”这样尴尬的情况。

其次就是快速交付、测试以及部署,说明 Docker 可以用来做 CD/CI,像是自动测试、自动部署以及自动交付代码产物等功能都集成了,所以说 Docker 减少了代码开发和上线之间手动操作导致的效率低下的问题。

一个前端眼中的Docker 图片来源

上图是 Docker 原理的一个架构图,对于初学者来说,只需要关注最下面的几个概念:cgroups、namespaces、unionfs。这些都是由 linux 的操作系统提供的技术,所以一般 Docker 也是用于 linux 系统比较多,而对于 windows 系统的话,则是需要安装一个虚拟 linux 的环境,这点可以在官网中找到相应的安装方法,就不在此赘述。

前端的构建部署流程

一般部署一个前端应用,普遍的流程就是先运行单元测试,结束以后打包前端应用,将对应的 dist 文件夹给放到 web 服务器上,一般使用 nginx 来作为静态服务器。这个时候访问对应的 IP 就能看到项目了。

一个前端眼中的Docker

一个前端眼中的docker

对于前端而言,可能大部分都不会用到这个技术,更多是后端会去使用。但是随着前端应用规模越来越大,经常会出现依赖版本不一样,或者线上环境不一样而导致的报错问题,排查起来也非常困难。因此这也是前端使用 Docker 一个最大的契机。

对于一个前端来说,不需要了解太多复杂的概念,只需要了解以下的基本概念即可。

基本概念

  1. 镜像

首先就是开篇提到的类与实例的关系,镜像就是类,镜像类似于系统镜像的概念,对于前端而言,镜像就是包含了代码运行所需要的一切产物、依赖、配置等。这样的话,可以保证每次程序运行的环境一致。构建镜像,一般都是通过一个文本文件来生成。这个文件就是 Dockerfile,文件内容就是一系列的指令集合。