导入
没有 Docker 的生活
了解开发过程中遇到的问题以及通常的处理方式。
Web开发技术栈
我们的Web开发技术栈真的需要另一种新技术吗?现代Web开发涉及大量文件、系统和组件:
- HTML 内容与模板
- CSS 样式表及预处理器,如 Sass
- 客户端 JavaScript,包括 React、Vue.js、Svelte 等框架
- 构建工具,如打包器、压缩工具等
- Web 服务器,如 NGINX 或 Apache
- 服务端运行时与框架,包括 Node.js、PHP、Python、Ruby、.NET 等
- 数据库,如 MySQL、MariaDB、SQL Server 或 MongoDB
- 其他服务:缓存、消息队列、邮件服务、进程监控等
- 使用 Git 和 GitHub 进行源代码管理
管理这一整套技术栈是一项挑战。
你在开发电脑上花费多少小时用于安装、配置、更新和管理软件依赖?question mark
不兼容的开发环境
设想你的最新应用取得了成功。你不得不招聘另一位开发者来分担工作量并提升开发效率。他们在第一天入职后,克隆了你的代码仓库,启动项目,却遇到了一个晦涩难懂的错误。
调试或许能解决问题,但你们的开发环境并不一致……
- 你使用 Mac,他们使用 Windows
- 你用的是
Node.jsv10,他们安装的是v14 - 你使用
MongoDBv3.6,他们用的是v4.2
这些差异逐渐累积。

两台机器开发环境差异
你可能几小时内就能解决这些问题,但:
- 能否始终保持所有依赖项同步?
- 随着团队扩大和设备增多,这是否现实?
- 这些依赖项是否能在所有开发操作系统以及生产服务器上正常运行?
有些公司会实施严格的设备管控政策,禁止使用最新或最合适的工具。但这同样会阻碍技术进步。
虚拟机方案
与其限制设备和软件,不如将应用程序运行在虚拟机(VM)中。虚拟机允许在一个模拟硬件环境中安装操作系统,本质上就是一台“运行在你电脑上的电脑”。
跨平台的虚拟机解决方案包括 VMware 和 VirtualBox。你可以创建一个包含应用及其全部依赖的 Linux(或其他系统)虚拟机。这个虚拟机只是数据,可以复制并在任何真实的 Windows、macOS 或 Linux 设备上运行。每位开发者和生产服务器都可以运行完全相同的环境。
然而,虚拟机很快变得不切实际:
- 虚拟机磁盘镜像体积庞大,难以复制
- 单个虚拟机可能被自动更新或由某个开发者手动修改,导致与其他环境不同步
- 虚拟机需要大量计算资源——它是在另一个操作系统中运行的完整操作系统,且基于模拟硬件
