写点什么

面向 WEB 开发的 Docker(一)

作者:devpoint
  • 2021 年 12 月 14 日
  • 本文字数:2393 字

    阅读完需:约 8 分钟

Docker的优势很容易让 Web 开发人员所忽略。对于开发运维来说,它被认为太过技术性、没有必要。术语可能难以理解。教程从来没有解释如何在开发过程中使用Docker。在这里带大家一起来感受 Docker 在 WEB 开发中应用。



先来看看 WEB 开发过程中可能涉及的技术栈:

  • HTML内容和模板

  • CSS样式表和预处理器,例如 Sass

  • 前端JavaScript,包括诸如ReactVue.jsSvelte之类的框架

  • 构建工具,例如bundlersminifiersetc

  • Web 服务器,例如NGINXApache

  • 服务器端和框架,包括Node.jsPHPPythonRuby.NET等。

  • 数据库,例如MySQLMariaDBSQL ServerMongoDB

  • 其他用于缓存、消息队列、电子邮件、过程监视等的服务。

  • Git 和 Github 用于源代码控制

  • 管理好这些可能是一个不小的挑战。

在开发过程如果要安装配置好以上环境,至少得几个小时!

1.1、“它可以在我的机器上运行,伙计”

想象一下你最近的应用程序非常成功。你不得不雇佣另一个开发者来给你更多的时间来处理。


它们出现在第一天的工作中,克隆你的代码库,启动代码,然后砰的一声,它失败了,出现一条模糊的错误消息。


调试可能会有所帮助,但是你的环境并不相同…

  • 你使用 Mac,他们使用 Windows

  • 你是使用 Node.js v10 开发的应用程序,已安装 v14

  • 你使用的是 MongoDB v3.6,它们在 v4.2 上

差异加剧。

也许可以在几个小时内解决这些问题,但是…

  • 能否使每个依赖项保持同步?

  • 随着团队和设备数量的增长,这可行吗?

  • 这些依赖关系在所有开发 OS 和生产服务器上是否可用?

一些公司会实施锁定的设备策略,在这种情况下,将无法使用最新或最合适的工具。这是你可能想到虚拟机?

1.2、虚拟机

该应用程序可以在虚拟机(VM)内运行,而不是限制设备和软件。VM 允许将操作系统安装在仿真的硬件环境中。从本质上讲,它是在你的 PC 上运行的 PC。


跨平台 VM 选项包括VMwareVirtualBoxParallels Desktop。从理论上讲,可以使用你的应用程序及其所有依赖项来创建 Linux(或其他)VM。VM 只是数据:可以将其复制并在任何实际的 Windows,macOS 或 Linux 设备上运行。每个开发人员以及实时服务器都可以运行相同的环境。

不幸的是,虚拟机很快变得不切实际:

  • VM 磁盘映像很大,难以复制

  • 单个 VM 可以自动更新,也可以由单个开发人员更新,因此与其他 VM 不同步

  • 一个 VM 需要大量的计算资源:它是一个完整的 OS,在另一个 OS 内的仿真硬件上运行。

1.3、Docker 交付

Docker解决了所有这些问题,甚至更多。无需在 PC 上安装依赖项,而可以在轻量,孤立的类似于 VM 的环境(称为容器)中运行它们。

在单个命令中,可以下载,配置和运行所需的服务或平台的任意组合。是的,只有一个命令。(诚然,这可能是一个非常复杂的命令,但这就是我们的目的!)


开发好处包括:

  • 所有开发人员都可以在 Mac、Linux 和 Windows 上使用相同的 Docker 容器

  • 应用程序的安装,配置,维护和测试变得更加容易

  • 应用程序在与开发 PC 隔离的虚拟环境中运行

  • 可以在同一台 PC 上同时使用同一应用程序或运行时的多个版本,例如 PHP 5.6、7.0、7.4 等。

  • 开发人员保留了本地开发的所有优势,可以毫无风险地进行试验。


类似的 Docker 环境也可以部署在生产环境中:

  • 可以简化持续集成和交付过程,以实现快速部署

  • 使用水平缩放可以改善性能。可以添加更多应用程序容器来应对增加的流量。

  • 服务更强大。如果容器发生故障,则可以在零停机时间内自动重新启动。

  • 可以保护应用程序。可以将容器配置为仅彼此通信,而不与外界通信。可以将 MySQL 数据库提供给 WordPress 容器,而无需将其暴露给主机 OS 或更高版本。

1.4、不,仍然不相信

我也是一样不相信。当我第一次遇到 Docker 时,这似乎是一个不必要的且有些艰巨的障碍。在运行 VM 和配置依赖项方面有丰富的经验,当然不需要吗?


Docker 文档很全面,但是学习曲线很陡。教程通常很差,并且:

  1. 假设读者完全理解所有术语,

  2. 无法解释或过度解释深奥的要点

  3. 很少讨论在开发过程中如何使用 Docker。


当我开始接触时,我认为 Docker 无法处理动态应用程序重启或调试。教程经常声称每次代码更改都需要缓慢而麻烦的应用程序重建,于是我放弃了。


最终,另一位开发人员向我展示了 Docker 强大的应用场景,致使我深入研究了 Docker 几个月,学习研究的正是我缺少的。

1.5、来看看能做什么?

不管使用哪种 Web 开发方法和技术栈,Docker 都可以提供帮助。它在构建时提供一致的环境和或紧密匹配生产服务器上的依赖项。


Docker 环境:

  1. 在没有活动/快速互联网连接的情况下可以工作(在旅行,演示中等期间很有用)

  2. 允许实验而没有风险。如果不小心删除了本地 MySQL 数据库,没人会介意。

  3. 不受成本和使用限制。

1.5.1、整体 Web 应用程序

整体应用程序包含前端和后端代码的混合。通常,该应用程序使用 Web 服务器,服务器语言运行时,数据存储以及客户端 HTML、CSS、JavaScript 和框架来呈现页面并提供 API。WordPress是一个典型的例子。

Docker 可用于复制该环境,因此所有依赖项均可在您的开发 PC 上使用。

1.5.2、无服务器 Web 应用程序

无服务器应用程序通常使用 JavaScript 框架在浏览器中实现大多数功能,以创建单页应用程序(SPA)。核心站点/应用程序将下载一次。


小型 API 可能以无服务器功能运行,从而提供了附加数据和服务。尽管名称如此,但服务器仍在使用中-但您无需担心对其进行管理。创建一个从 JavaScript Ajax 请求按需启动的功能,例如,将表单数据通过电子邮件发送给销售团队的代码。


Docker 可在开发环境中用于:

  • 运行构建过程,例如 JavaScript 模块捆绑和Sass预处理

  • 服务网络应用程序

  • 模拟用于无服务器功能测试的基础架构。

1.5.3、静态站点

使用构建过程构建静态站点,该过程将内容(markdown文件,JSON数据,数据库字段等)放入模板中,以创建包含静态HTMLCSSJavaScript和媒体文件的文件夹。这些预渲染的文件可以部署在任何地方:不需要服务器端运行时或数据库。


静态站点通常称为JAMstack(JavaScript、API 和 Markdown)。所有内容都在可能的情况下预先呈现,但是动态服务(例如站点搜索)可以采用基于服务器的 API。


Docker可用于在任何开发 PC 上提供可复制的构建环境。

发布于: 2 小时前阅读数: 7
用户头像

devpoint

关注

细节的追求者 2011.11.12 加入

专注前端开发,用技术创造价值!

评论

发布
暂无评论
面向 WEB 开发的 Docker(一)