Logo
Section 1 / 4

没有 Docker 的生活

了解开发过程中遇到的问题以及通常的处理方式。

导入

没有 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
question mark
你在开发电脑上花费多少小时用于安装、配置、更新和管理软件依赖?

不兼容的开发环境

设想你的最新应用取得了成功。你不得不招聘另一位开发者来分担工作量并提升开发效率。他们在第一天入职后,克隆了你的代码仓库,启动项目,却遇到了一个晦涩难懂的错误。

调试或许能解决问题,但你们的开发环境并不一致……

  • 你使用 Mac,他们使用 Windows
  • 你用的是 Node.js v10,他们安装的是 v14
  • 你使用 MongoDB v3.6,他们用的是 v4.2

这些差异逐渐累积。

两台机器开发环境差异
两台机器开发环境差异

你可能几小时内就能解决这些问题,但:

  • 能否始终保持所有依赖项同步?
  • 随着团队扩大和设备增多,这是否现实?
  • 这些依赖项是否能在所有开发操作系统以及生产服务器上正常运行?

有些公司会实施严格的设备管控政策,禁止使用最新或最合适的工具。但这同样会阻碍技术进步。

虚拟机方案

与其限制设备和软件,不如将应用程序运行在虚拟机(VM)中。虚拟机允许在一个模拟硬件环境中安装操作系统,本质上就是一台“运行在你电脑上的电脑”。

跨平台的虚拟机解决方案包括 VMware 和 VirtualBox。你可以创建一个包含应用及其全部依赖的 Linux(或其他系统)虚拟机。这个虚拟机只是数据,可以复制并在任何真实的 Windows、macOS 或 Linux 设备上运行。每位开发者和生产服务器都可以运行完全相同的环境。

然而,虚拟机很快变得不切实际:

  • 虚拟机磁盘镜像体积庞大,难以复制
  • 单个虚拟机可能被自动更新或由某个开发者手动修改,导致与其他环境不同步
  • 虚拟机需要大量计算资源——它是在另一个操作系统中运行的完整操作系统,且基于模拟硬件

为什么 Web 开发者要使用 Docker?

使用 Docker 的生活