Node.js 编程实战:部署 Node.js 应用 —— Docker 容器化部署
随着 Node.js 应用从开发环境迁移到生产环境传统的直接部署方式如裸机、PM2 守护进程虽然可行但在环境一致性、快速部署、可扩展性上仍存在一定局限。Docker 容器化部署提供了一种轻量、可移植、环境一致的解决方案使得应用可以在任何支持 Docker 的环境中运行且无需担心依赖冲突或环境差异。本文将从实战角度讲解如何将 Node.js 应用容器化并完成从构建、运行到优化的全过程。一、为什么选择 Docker 部署 Node.js 应用Docker 提供了以下核心优势1.环境隔离每个应用运行在独立容器中不会与系统环境或其他应用冲突。2.快速部署与迁移一次构建的镜像可以在任何 Docker 支持的服务器上运行部署过程几乎无需额外配置。3.便于 CI/CD容器镜像可直接推送到镜像仓库实现流水线自动化部署。4.轻量与高效容器相比虚拟机占用更少资源启动速度快。5.易于扩展与负载均衡可配合 Docker Compose 或 Kubernetes快速扩容多实例。二、准备 Node.js 应用假设我们的项目结构如下my-app/ ├── app.js ├── package.json └── package-lock.json确保应用在本地可以正常启动node app.js三、编写 DockerfileDockerfile 是容器构建的核心。1. 基础 Dockerfile 示例# 使用官方 Node.js LTS 版本作为基础镜像 FROM node:20-alpine # 设置工作目录 WORKDIR /usr/src/app # 复制 package.json 和 package-lock.json COPY package*.json ./ # 安装依赖 RUN npm install --production # 复制应用代码 COPY . . # 暴露容器端口 EXPOSE 3000 # 启动应用 CMD [node, app.js]说明•node:20-alpine是轻量级 Node.js 官方镜像•WORKDIR定义容器内工作目录•npm install --production仅安装生产依赖•EXPOSE 3000用于容器端口映射•CMD指定容器启动命令2. 优化 Dockerfile1.缓存依赖安装COPY package*.json ./ RUN npm ci --onlyproduction使用npm ci速度更快并保证依赖一致性。2.减少镜像体积FROM node:20-alpine AS builder WORKDIR /usr/src/app COPY package*.json ./ RUN npm install --production COPY . . FROM node:20-alpine WORKDIR /usr/src/app COPY --frombuilder /usr/src/app . EXPOSE 3000 CMD [node, app.js]使用多阶段构建仅将最终产物放入镜像显著减小体积。四、构建镜像在项目根目录下执行docker build -t my-app:1.0 .•my-app:1.0是镜像名称和标签•.表示 Dockerfile 所在目录构建完成后可以查看镜像docker images五、运行容器docker run -d -p 3000:3000 --name my-app-container my-app:1.0说明•-d后台运行•-p 3000:3000将容器 3000 端口映射到宿主机 3000 端口•--name指定容器名称访问http://localhost:3000即可看到应用运行效果。六、使用 Docker Compose 管理当应用依赖数据库或缓存时Docker Compose 可以统一管理多服务。1. 示例 docker-compose.ymlversion: 3.9 services: app: build: . container_name: my-app ports: - 3000:3000 environment: NODE_ENV: production depends_on: - redis - db db: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: mydb ports: - 3306:3306 redis: image: redis:7 ports: - 6379:63792. 启动多服务docker-compose up -d一条命令即可启动应用及依赖服务并保持网络互通。七、镜像优化与安全建议使用Alpine 或 Slim 镜像减少体积安装依赖尽量使用--production或--onlyprod多阶段构建避免将开发工具带入生产镜像配置非 root 用户运行应用定期更新基础镜像修复安全漏洞使用.dockerignore忽略不必要文件八、日志管理Docker 容器的日志默认输出到标准输出stdout和标准错误stderr。可以通过以下方式查看docker logs -f my-app-container结合 Docker Compose可统一查看多服务日志docker-compose logs -f生产环境建议配合ELK 或 Loki做集中日志管理与分析。九、容器更新与滚动部署构建新镜像docker build -t my-app:1.1 .停止旧容器并删除docker stop my-app-container docker rm my-app-container启动新容器docker run -d -p 3000:3000 --name my-app-container my-app:1.1配合 CI/CD 可实现自动化滚动更新减少停机时间。十、总结使用 Docker 容器化部署 Node.js 应用有以下优势• 环境一致性避免依赖冲突• 快速部署与迁移• 多服务统一管理Docker Compose• 易于扩展与负载均衡• 集成 CI/CD 流程实现自动化发布在《Node.js 编程实战》系列中Docker 部署为应用走向生产环境奠定了基础同时也为后续 Kubernetes、高可用集群以及微服务架构提供了良好扩展性。原文 https://juejin.cn/post/75989476

相关新闻

救命神器10个AI论文写作软件,继续教育学生轻松搞定论文!

救命神器10个AI论文写作软件,继续教育学生轻松搞定论文!

救命神器10个AI论文写作软件,继续教育学生轻松搞定论文! 论文写作的“救星”正在悄然改变你的学习方式 在继续教育的学习过程中,论文写作往往成为许多学生最头疼的问题。无论是选题、大纲搭建,还是初稿撰写和降重处理,…

2026/7/9 1:02:15 阅读更多 →
Docker搭建Mysql8的主从复制

Docker搭建Mysql8的主从复制

Docker搭建Mysql8的主从复制 通过Docker部署Mysql主从复制,Docker安装在前篇有,直接演示: 拉取镜像 # 获取有哪些镜像 docker search mysql # 拉取MySQL镜像 docker pull mysql:8.0.32 # 查看镜像 docker images 主节点的配置 创建数据存…

2026/7/3 18:57:43 阅读更多 →
字典码值映射实战:注解式实现与多方案全对比

字典码值映射实战:注解式实现与多方案全对比

在后端开发(尤其企业级项目如城市轨道系统)中,经常遇到“数据库存码值、前端显名称”的场景。比如你提到的:用01表示“简单”、02表示“普通”,数据库存储degree字段(码值),接口返回…

2026/7/8 6:21:17 阅读更多 →

最新新闻

JSON解析

JSON解析

JSON简介 JAVAScript Object Notation是一种轻量级的数据交换格式 具有良好的可读和便于快速编写的特性。 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持) JSON采用兼容性很高的文本格式&#xff…

2026/7/10 12:59:26 阅读更多 →
数学学习指南

数学学习指南

基础数学学习地图 北京大学数学与应用数学双学位的学分要求 参考文献 Mathematics | MIT OpenCourseWare | Free Online Course Materials我想业余时间系统学习数学,想求一份学习地图,请问我应该该怎么学习呢?学习哪些 和教程呢?…

2026/7/10 12:59:26 阅读更多 →
前馈控制与反馈控制对比

前馈控制与反馈控制对比

自动控制系统中主要包含两大类控制,一种是前馈控制,另一种是反馈控制。那么二者之间究竟有怎么的区别和联系。本文做简要介绍。 1. 前馈控制属于开环控制,反馈控制属于负反馈的闭环控制 在自动控制系统中,反馈控制是闭环控制&am…

2026/7/10 12:59:26 阅读更多 →
RimSort终极教程:3步彻底解决环世界模组冲突问题

RimSort终极教程:3步彻底解决环世界模组冲突问题

RimSort终极教程:3步彻底解决环世界模组冲突问题 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-managed a…

2026/7/10 12:54:56 阅读更多 →
从bulk到空间蛋白组:CAF分类的组织原位观察思路

从bulk到空间蛋白组:CAF分类的组织原位观察思路

癌症相关成纤维细胞(CAF)研究的发展史,也是一部方法学升级的历史。早期研究通过少数标志物或bulk组学观察肿瘤基质变化,但这些方法难以区分信号来自癌细胞、免疫细胞、血管细胞还是成纤维细胞。单细胞测序的出现提升了细胞分辨率,使iCAF、myC…

2026/7/10 12:50:35 阅读更多 →
2026年AI大模型API加速系统权威选购指南:主流服务商性能与成本全维度排名推荐

2026年AI大模型API加速系统权威选购指南:主流服务商性能与成本全维度排名推荐

API加速系统成企业AI落地核心网关 本次评测覆盖全场景需求2026年AI大模型技术已经跨过早期验证阶段,全面进入规模化落地周期,国内市场日均AI Token调用总量突破140万亿,AI大模型API加速系统的定位早已超出最初简单的协议转发工具属性&#xf…

2026/7/10 12:50:35 阅读更多 →

日新闻

STM32与LTC1864高精度ADC的SPI通信实现

STM32与LTC1864高精度ADC的SPI通信实现

1. 项目背景与核心需求在工业控制和嵌入式系统开发中,模拟信号与数字系统的无缝集成一直是工程师面临的关键挑战。LTC1864作为一款16位高精度ADC转换器,配合STM32F101ZG这类主流微控制器,能够构建高性能的模拟信号采集系统。这种组合特别适合…

2026/7/10 0:03:07 阅读更多 →
猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页视频无法下载而烦恼吗&am…

2026/7/10 0:05:09 阅读更多 →
直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

1. 直流有刷电机驱动方案概述在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便、成本低廉等优势,仍然是许多应用场景的首选驱动方案。TC78H653FTG作为东芝推出的新一代H桥驱动器,与MKV46F256VLH16微控制器配合使用&#xff0c…

2026/7/10 0:05:09 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻