node docker good defaults

2025-12-11 0 555

node.js + docker用于在使用docker的node.js中显示出良好的默认值

这试图成为开始在Docker中使用Node.js的“良好默认”示例,并以基本的铃铛,哨子和最佳实践运输到生产中。问题/PR欢迎。

请注意,我有更高级的node.js dockerfiles示例,并在我的Dockercon 2022 Talk and Repostority中撰写文件。我在8小时视频课程Docker for Node.js中也有更多关于Docker和node.js的信息。

另请注意,我在Docker和Kubernetes上还有其他资源。

本地发展功能

  • DEV尽可能接近产品。 Docker构建了一个本地开发图像,就像生产图像一样,除了图像中所需的以下功能。目的是让开发环境尽可能接近测试和产品,同时仍然提供所有不错的工具,使您成为快乐的开发人员。
  • 防止在主机上需要节点/npm 。这将在容器映像中安装node_modules外部的node_modules,因此本地开发不会遇到与本地源代码上绑定安装的问题。这意味着它将在容器构建上运行NPM安装后,您无需在主机上或每个Docker运行上运行NPM。如果您更改软件包。
  • 一行启动。使用Docker构成本地开发服务器的单线构建和运行。
  • 代码在容器中运行时本地编辑。 Docker撰写使用主机源代码的适当绑定安装到容器中,因此您可以在Linux容器中运行代码时在本地编辑。
  • 在容器中使用Nodemon 。当您在主机上更改文件时,Docker Compose使用Nodemon用于开发容器中的node.js。
  • 启用从主机到容器的调试。打开检查端口9229,用于使用基于主机的调试(例如Chrome Tools或VS代码)。 nodemon启用 – 默认情况下,docker组成。
  • 提供测试的VSCODE调试配置和任务。对于Visual Studio Code粉丝,VSCODE Directory具有@jplemelin。
  • 小图像和快速重建。复制package.json并运行npm安装,然后在源代码中复制。这节省了构建时间,并保持容器图像精益。
  • 绑定软件包。这允许实时添加软件包而无需重建图像。例如Docker Compose Exec -W /opt /node_app节点NPM安装-Save <软件包名称>

以生产为意为生产的功能

  • 使用Docker内置的Healthchecks 。这使用dockerfile HealthCheck使用 /Healthz路线,以帮助Docker知道您的容器是否正常运行(例如,始终返回200个,但您可以理解这个想法)。
  • 适当的node_env使用。默认为node_env = dockerfile中的生产,并覆盖docker-compose的开发本地开发。
  • 不要在生产图像中添加DEV依赖项。正确的Node_env使用意味着默认情况下不会在图像中安装DEV依赖项。默认情况下,使用Docker Compose将与它们一起构建。
  • 启用适当的SIGTERM/SIGINT以获得优雅的出口。默认为node index.js,而不是NPM,用于允许优雅的节点关闭。 NPM无法正确传递Sigterm/Sigint(在前景中运行Docker时,您无法CTRL-C)。要使节点索引。JS到优雅的退出,需要额外的信号捕获代码。 Dockerfile和Index.js记录了已知问题的选项和链接。
  • 在容器中以节点用户而不是root运行node.js。
  • 使用Docker-stack.yml示例进行Docker群的部署

假设

  • 您已经安装了Docker和Docker Compose(Mac/Windows/Linux的Docker桌面)。
  • 您想将Docker用于本地开发(即不需要在主机上安装node.js/npm),并且具有DEV和POD DOCKER映像尽可能近。
  • 您不想在开发人员工作流程中失去忠诚。您需要使用本地编辑器,Node.js调试/Inspect,本地代码存储库进行简单的环境设置,而Node.js Server则在容器中运行。
  • 您仅将Docker-Compose用于本地开发(无论如何,Docker-Compose从未打算成为生产部署工具)。
  • Docker-compose.yml不适合Docker STACK部署在Docker Swarm中,而是为了愉快的地方发展。使用Docker-stack.yml进行群。

入门

如果这是您的node.js应用程序,请开始本地开发,您将:

  • 您需要运行的Docker组成。它将:
  • 构建自定义本地图像启用开发(Nodemon,node_env =开发)。
  • 从该图像启动端口80和9229打开的容器(在Localhost上)。
  • 从nodemon开始,以重新启动node.js on主机pwd中的文件更改。
  • 将PWD安装到App DIR中。
  • 如果您需要其他服务(例如数据库),只需添加以撰写文件,然后将其添加到此应用程序上的自定义Docker网络中。
  • 撰写不会自动重建,因此要么在更改软件包后运行Docker组成构建。
  • 完成后,请确保使用Docker撰写进行清理。

如果您想在Docker-Compose运行您的应用程序时添加一个包:

  • Docker Compose exec -w /opt /node_app节点npm npm安装-Save <Package name>
  • 这将其安装在运行的容器中。
  • Nodemon将检测到更改并重新启动。
  • – 保存将其添加到包装中。

要执行单位测试,您将:

  • 执行Docker撰写Exec Node NPM测试,它将:
  • 在容器中运行进程NPM测试。
  • 您可以使用config docker Test(附件9230)使用VSCODE来调试单位测试,它将:
    • 在容器中启动调试过程,并在debuggger中启动,这是通过VSCODE任务完成的
    • 如果存在,它还将杀死先前的调试过程。

改善安全性的方法

将Node.js运行为非root用户

如官方Docker Node.js图像文档中所述,Docker将图像作为root运行。这可能会构成潜在的安全问题。

作为安全性最佳实践,建议Node.js应用程序在此处提到的非私有端口上收听。

其他资源

  • https://blog.h***asura.io/an-exhustive-guide-to-writing-dockerfiles-for-node-js-js-web-apps-bbee6bd2f3c4

下载源码

通过命令行克隆项目:

git clone https://github.com/BretFisher/node-docker-gooddefaults.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 node docker good defaults https://www.zuozi.net/34428.html

knowledge garden
下一篇: knowledge garden
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务