将 Docker 与具有 Node-gyp 依赖项的 Nodejs 一起使用

2024-05-12

我计划使用 Docker 部署 node.js 应用程序。该应用程序有几个需要node-gyp的依赖项。 Node-gyp 根据交付平台上的编译库构建这些模块(例如 canvas、lwip、qrcode),根据我的经验,这些构建可能高度依赖于操作系统版本和安装的库,并且它们经常会破坏一个简单的npm 安装.

构建我的 Dockerfile 也是如此来自节点:版本正确的做法是什么?这似乎是我迄今为止找到的每个 Docker/Node 教程中展示的方法。但如果我从节点镜像构建,部署容器时会发生什么?如何确保目标主机具有编译 node-gyp 模块所需的库?

我正在寻找的另一种方法是构建 Dockerfile来自 ubuntu:版本。但我认为这意味着将 nodeJS 安装到 Ubuntu 镜像中,整个事情会更大。

还有其他方法可以处理这个问题吗?


如何确保目标主机具有编译 node-gyp 模块所需的库?

目标主机也正在运行 docker。只要依赖项存在于您的映像中,那么您的服务器也拥有它们。如果你问我的话,这就是 docker 的全部意义所在。如果它在本地运行,那么它也在服务器上运行。

我会选择节点高山(FROM node:8-alpine)对于更小的文件。在我开始研究 Node-gyp 之前,我一直在努力解决它,但现在我什至不明白我怎么会认为这是一个问题。只要添加构建工具RUN apk add python make gcc g++一切顺利(但这会增加 100-200mb 的大小)。

另外,如果它变得耗时(假设您发现自己时不时地使用 --no-cache 重建图像),那么最好将其分成您自己的基本图像和另一个图像FROM my-base-image:latest其中包含您经常更改的内容。

当然有一些学习曲线,但我没有发现它那么陡峭。至少如果你以前接触过 docker 的话就不会。

我正在考虑的另一种方法是从 ubuntu:version 构建 Dockerfile。

在使用 docker 之前我只使用过 CentOS,并且我在我的服务器上运行 CentOS。所以我认为运行 CentOS 镜像也是个好主意,但我发现这很愚蠢。除非您需要特定于操作系统的东西,否则增益绝对为零。现在我只使用 alpine 大概半年了,到目前为止我唯一需要学习的 alpine 特定命令是apk add/del.

你可能已经知道了,但一开始不要花太多时间优化 docker 文件大小。 (您可以通过在一行上组合命令(添加包、运行命令、删除包)来大幅减少层大小。但是,如果您在大层中进行任何小的更改,这会取消使用 docker 映像缓存。最好离开直到事情变得重要为止。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Docker 与具有 Node-gyp 依赖项的 Nodejs 一起使用 的相关文章

随机推荐

  • 在开发模式下禁用错误覆盖

    在开发模式下运行 create react app 时 有没有办法禁用错误覆盖 这就是我正在谈论的覆盖 我问这个是因为我使用错误边界 React 16 错误边界 https reactjs org blog 2017 07 26 error
  • “Microsoft.Azure.Storage.Emulator.Controller,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一

    我们无法自动填充您的 Visual Studio Team Services 帐户 遇到以下错误 TF400813 资源不可用于匿名访问 需要客户端身份验证 Microsoft Azure 工具 无法加载文件或程序集 Microsoft A
  • 使用 Jquery Easyui 将数据网格导出到 Excel

    我是 json 新手 我使用 php 从 mysql 表生成了 jason 数据 并希望将生成的 json 导出为 xls 格式 考试导出 php
  • PostgreSQL:在所有表字段的长度上创建索引

    我有一张桌子叫profile 我想按照填写最多的内容对它们进行排序 每列都是 JSONB 列或 TEXT 列 我不需要很大程度的确定性 所以通常我会按如下方式订购 SELECT FROM profile ORDER BY LENGTH CO
  • 更改 JTextPane 的大小

    我是Java新手 刚刚在StackOverflow中找到了这段代码 ResizeTextArea https stackoverflow com questions 9370561 enabling scroll bars when jte
  • 扭曲多种协议

    我希望为我正在从事的项目学习扭曲 该项目需要服务器响应 HTTP 请求以及通过 TCP 连接的其他协议 Twisted能够同时处理多种协议吗 我想使用 Twisted Web 来帮助处理 HTTP 但同时需要响应其他端口上的 TCP 连接
  • Durandal SPA 与打字稿有关的问题

    我使用 TypeScript 1 8 将我的 durandal SPA 应用程序从 VS 2012 更新到 VS 2015 它将生成 JavaScript ECMA5 我解决了所有构建错误 但我无法修复一个名为 return 语句只能在函数
  • Winforms 风格/UI 外观和感觉提示

    从多年的 asp net 开发回到 winforms 应用程序 寻找有关如何 设计 winforms 的建议和技巧 类似于我在 asp net 中使用 CSS 母版页的方式 我对如何在一处更新某些类型的控件的字体 颜色感兴趣 如何保持布局的
  • Android 6.0 缺乏访问相机服务的权限

    我在 Android 6 0 中使用 Camera2API 我在Android 5 0中没有报错 然而 当我在 Android 6 0 中使用我的代码时 我遇到了问题 问题是有时我可以成功打开相机并拍照 但有时相机打不开 出现错误 java
  • 在 PhpStorm 中禁用水平滚动

    有没有办法做到这一点 我更愿意将代码换行并表示在 80 100 个字符的行长度内 每次滑动时的滚动都让我发疯 有 软包裹 IDE 中的功能 它就是这样做的 它实际上 仅在屏幕上 将行分成多行以显示整行 而不需要水平滚动 它可以在以下位置启用
  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • 配置 PIP 以在代理后面工作

    我已经安装了 python 3 4 3 附带pip 我想从代理后面使用 pip 所以我执行了以下操作 Created C Users foo pip pip ini并添加了代理配置部分 proxy export http proxy my
  • 从副本消费

    Kafka 将主题的每个分区复制到指定的复制因子 据我所知 所有写入和读取请求都会路由到分区的领导者 有没有办法从追随者那里消费而不是从领导者那里消费 Kafka中的复制只是为了故障转移吗 在 Kafka 2 3 及更早版本中 您只能从领导
  • 使用 PDFMAKER 将多封电子邮件保存为 pdf

    我是 VBA 的新手 但我用 SAS 编写了一些程序 用汇编程序 大型机和 PC Word Perfect 宏 编写了一些程序 用 Java HTML 和其他东西编写了一些程序 我所做的是 当我遇到问题并且我认为我可以对其进行编程时 我会在
  • vscode 窗口没有响应[重复]

    这个问题在这里已经有答案了 VS代码版本 1 77 0 操作系统版本 windows 11 22h2 这是我过去几天收到的问题 我使用了nodejs 并且没有安装任何Python或其他软件 我已经删除了所有扩展并删除了缓存 在此输入图像描述
  • MVC3 和实体框架

    我的问题很简单 将 edmxMVC3 项目的 Web 应用程序的模型文件夹中的文件吗 我的答案非常简单 不要用数据访问逻辑和数据建模搞乱表示层 整个 MVC 应用程序 Visual Studio 解决方案中从下到上至少有 4 个项目 1 P
  • YouTube 频道 URL 的正则表达式

    如何使用 REGEX 验证 YouTube 频道 URL 我发现了这个模式 但它不能正常工作 http https www youtube com channel user a zA Z0 9 1 谁能帮我 你的问题是之后的额外管道user
  • 如何从该 Voronoi 图数据中获取单元格字典?

    使用找到的voronoi delaunay图生成库在这个节目中 http sourceforge net projects mapmanager 这是基于 财富 最初的实施他的算法 http en wikipedia org wiki Fo
  • 计算表中的行数

    获取 MySQL 数据库中特定表的总行数的语法是什么 我一直都这么做 SELECT count FROM table 上面将为您提供所有行的总数 您可以轻松添加 WHERE 子句来获取某个子集的计数 SELECT count FROM ta
  • 将 Docker 与具有 Node-gyp 依赖项的 Nodejs 一起使用

    我计划使用 Docker 部署 node js 应用程序 该应用程序有几个需要node gyp的依赖项 Node gyp 根据交付平台上的编译库构建这些模块 例如 canvas lwip qrcode 根据我的经验 这些构建可能高度依赖于操