将 Node.js 应用程序容器化的七种方法

本文列出了七种容器化 Node.js 应用程序的方法,让我们简要地看一下它们。,在过去的五年里,Node.js 一直是严肃程序员的最爱。最大吞吐量的 JavaScript 运行时环境是一个免费的开源程序,旨在提高JavaScript在多个平台上的性能。,由于其事件驱动、非阻塞 I/O 方法,Node.js 体积小且处理请求速度快,使其成为数据密集型、实时和分布式应用程序的绝佳选择。,开发人员越来越多地转向 Node.js 应用程序优化服务;因此,简化跨平台应用程序的设计和发布过程非常重要。那么,让我们进入文章的上下文。,这里列出了七种容器化 Node.js 应用程序的方法。让我们简要地看一下它们。,创建Docker映像时,应始终包含用于定义版本信息、预期目标(例如生产或测试)、稳定性或其他用于跨环境分发应用程序的相关信息的有用标签。,在开发环境之外,您不应依赖 Docker 自动下载的最新标签。使用最新版本的程序可能会导致奇怪甚至有害的影响。,假设您不断更新到最新版本的图像。在这种情况下,最终,其中一个更新肯定会包含一个全新的构建或未经测试的代码,这将导致您的应用程序停止按预期运行。,以针对该节点的这个示例 Dockerfile 为例:,node:latest您应该使用Docker 映像而不是使用lts-buster。考虑到这lts-buster是一张静态图片,这种方法可能更可取。,一个单一的 Docker 基础镜像可以在构建的多个阶段使用,包括编译、打包和 单元测试。但是,执行程序的实际代码存储在不同的映像中。,由于完成的图像没有任何开发或调试工具,因此它会更安全并且占用更少的空间。此外,如果您使用 Docker 的多阶段构建过程,您可以确定您的构建将既高效又可重复。,您可以在 Dockerfile 中创建多个阶段来控制构建该映像的方式。您可以使用多层方法容器化您的 Node 应用程序。,应用程序的不同部分,如代码、资产,甚至快照依赖项,可能位于构成程序的许多层的每一层中。如果我们希望为我们的应用程序创建一个独立的图像怎么办?,要查看此操作的示例 Dockerfile,请检查以下内容:,我们首先AS DEVELOPMENT为NODE:LTS-BUSTER-SLIM语句添加一个标签。这使我们可以在其他构建阶段中引用此构建阶段。接下来,我们添加一个标记为 的新开发阶段DEV-ENVS。我们将使用这个阶段来运行我们的开发。,现在,让我们重建我们的形象并运行我们的开发。为了仅执行开发构建阶段,我们将使用与之前相同的 Docker 构建命令,但这次我们将使用 -development-target参数。,为了创建现代服务,程序员经常使用已有的第三方软件。但是,在将第三方软件集成到您的项目中时一定要谨慎,因为它可能存在安全漏洞。,使用经过验证的图像源和保持警惕的容器监控都是有用的安全措施。,node:lts-buster-slimDocker Desktop 会通知您对新创建的Docker 镜像进行安全检查。,让我们借助 Docker Desktop 的 Snyk 插件看看我们的 Node.js 应用程序。首先在您的 Mac、Windows 或 Linux PC 上设置Docker Desktop 4.8.0+。接下来,选择设置 > 扩展下的允许 Docker 扩展复选框。,之后,您可以通过选择左侧栏中的“添加扩展”选项在扩展市场中搜索 Snyk。,放入 Snyk 并登录网络:,将 Node.js 应用程序容器化的七种方法,在“选择图像名称”框中键入“Node Docker 官方图像”。为了开始扫描,您需要登录到 Docker Hub。如果您没有帐户,请不要担心;制作一个简单、快速且完全免费。,使用 Docker Desktop,扫描结果如下所示:,将 Node.js 应用程序容器化的七种方法,在此扫描期间,Snyk 发现了 70 个不同严重程度的漏洞。确定它们后,您可以开始修复它们以提高您的声誉。,不仅如此:在您的 Dockerfile 上使用 Docker scan 命令将执行漏洞扫描。,将 Node.js 应用程序容器化的七种方法,该HEALTHCHECK指令指示 Docker 如何检查容器的运行状况。例如,这可用于确定 Web 服务器是否处于无限循环中并且无法接受新连接,即使服务器进程仍处于活动状态。,在生产阶段,应用程序通常由 Kubernetes 或服务结构等编排器管理。HEALTHCHECK允许您通知编排器有关容器的健康状况,这可能用于基于配置的管理。,这是一个很好的例子:,我们建议在与 Dockerfile 相同的文件夹中创建一个.dockerignore文件以缩短构建时间。本指南需要您的 .dockerignore 文件中的一行:,由于这一行,包含 Maven 输出的节点模块目录未包含在 Docker 构建上下文中。拥有一个组织良好的.dockerignore文件有很多好处,但目前,这个简单的文件就足够了。,接下来,我将描述构建环境及其如此重要的原因。可以使用 Docker build 命令通过组合 Dockerfile 和“上下文”来创建 Docker 映像。在此设置中,您所做的一切都适用于您刚才给我的目录结构或 URL。这些文件中的任何一个都可以在构建过程中使用。,同时,Node 开发人员在编译上下文中操作。Mac、Windows 或 Linux 上的目录。运行该程序所需的一切都可以在此文件夹中找到,包括源代码、设置、库和插件。,如果你提供一个。dockerignore文件,我们可能会在创建新图像时使用它来跳过项目的某些部分:代码、配置文件、库、插件等。例如,如果你想将节点模块目录保留在构建之外,你可以通过将以下内容添加到您的.dockerignore文件来实现。,将 Node.js 应用程序容器化的七种方法,后端,将 Node.js 应用程序容器化的七种方法,前端,在用户许可的情况下运行应用程序更安全,因为这有助于减少漏洞 – 即使使用 Docker 容器也是如此。Docker 容器及其内容会自动获得对主机系统的根访问权限。这就是为什么建议永远不要以 root 用户身份运行 Docker 容器。,USR这可以通过在 Dockerfile 中包含某些指令来实现。在执行图像和任何未来的RUN、CMD或ENTRYPOINT指令时,该USR命令指定所需的用户名(或 UID),以及可选的用户组(或 GID):,在 Docker 中为 Node.js 创建的临时存储空间。它们很容易预防、销毁,然后更换或重新利用。可以通过向进程发出信号来终止容器SIGTERM。,为了充分利用这个短暂的机会窗口,您的应用程序必须能够立即处理传入的请求并释放任何相关资源。,另一方面,Node.js 对于成功关闭应用程序至关重要,因为它接收并传递来自SIGINT操作系统SIGTERM的信号。由于 Node.js,您的应用程序可以选择如何响应它接收到的信号。,如果你不为他们编程或使用一个模块,你的应用程序将无法正常终止。但是,它将继续正常运行,直到 Docker 或 Kubernetes 由于超时而终止它。,如果您无法修改应用程序的代码,您仍然可以在 Dockerfile 中使用 docker run —init 或 tini init 选项。但是,建议您提供代码来管理适当的信号处理以实现正常关闭。,在本教程中,我们涵盖了与 Docker 镜像优化相关的广泛主题,从构建可靠的 Dockerfile 到使用 Snyk 检查漏洞。制作更好的 Node.js 应用程序并不难。如果你掌握了一些基本技能,你的状态就会很好。

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/26820.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年6月23日
下一篇 2023年7月15日