首页 游戏 软件 资讯 排行榜 专题
首页
编程语言
Ubuntu Nodejs与Docker如何结合

Ubuntu Nodejs与Docker如何结合

热心网友
36
转载
2026-04-15

Ubuntu 下 Node.js 应用 Docker 容器化全攻略:从环境配置到生产部署

将 Node.js 应用封装进 Docker 容器,是实现现代化部署和提升应用可移植性的关键步骤。本文将以 Ubuntu 系统为例,系统性地讲解从环境搭建、镜像构建、开发调试到生产优化的完整流程,帮助你高效、安全地实现应用容器化。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

一、 环境准备:安装 Node.js 与 Docker 引擎

在开始容器化之前,需要在 Ubuntu 系统上配置好必要的运行环境,包括 Node.js 运行时和 Docker 容器平台。

  • 安装 Node.js(三种常用方法)
    • 通过 Ubuntu 官方仓库安装:这是最快捷的方式,执行命令 sudo apt update && sudo apt install -y nodejs npm 即可完成安装。
    • 通过 NodeSource 仓库安装:如需安装特定或更新的 LTS 版本,推荐使用此方法。需先添加 NodeSource 的 GPG 密钥和软件源,再进行安装。
    • 使用 NVM(Node 版本管理器)安装:适用于需要在多个 Node.js 版本间切换的开发场景。安装 NVM 后,可通过 nvm install 18 && nvm use 18 等命令轻松管理版本。
  • 安装 Docker 引擎(三种推荐方案)
    • 使用官方便捷脚本:执行 curl -fsSL https://get.docker.com | sudo sh,脚本会自动完成最新版 Docker 的安装与配置。
    • 通过 APT 安装 docker.io:使用 Ubuntu 仓库中的稳定版本,命令为 sudo apt update && sudo apt install -y docker.io
    • 通过 APT 安装 docker-ce:从 Docker 官方仓库安装社区版。需先添加 Docker 的 GPG 密钥和 apt 源,安装后启动服务:sudo systemctl start docker && sudo systemctl enable docker
  • 验证环境安装
    • 运行 node -vnpm -v 检查 Node.js 与 npm 版本,确认安装成功。
    • 执行 docker run hello-world 命令,如果成功拉取并运行测试容器,并显示欢迎信息,则证明 Docker 环境已准备就绪。

二、 实战演练:构建并运行首个 Docker 化 Node.js 应用

我们通过一个简单的 Express.js 应用示例,快速掌握 Docker 镜像构建与容器运行的核心步骤。

  • 创建示例 Node.js 应用
    • 新建项目目录并初始化:mkdir my-node-app && cd my-node-app && npm init -y
    • 安装 Express 框架:npm install express
    • 创建主程序文件 app.js,写入以下代码:
      const express = require('express');
      const app = express();
      app.get('/', (_, res) => res.send('Hello, Docker'));
      app.listen(3000, () => console.log('Server on 3000'));
  • 编写生产级 Dockerfile
    • 在项目根目录创建名为 Dockerfile 的文件,内容如下:
      FROM node:18-alpine
      WORKDIR /usr/src/app
      COPY package*.json ./
      RUN npm ci --only=production
      COPY . .
      EXPOSE 3000
      USER node
      CMD ["node", "app.js"]
    • Dockerfile 优化解析:选用轻量级的 node:18-alpine 作为基础镜像;使用 npm ci 命令确保依赖安装的确定性与速度;通过 USER node 指令切换至非 root 用户运行,增强容器安全性;EXPOSE 3000 声明应用端口;CMD 指令定义容器启动命令。
  • 构建镜像并启动容器
    • 构建 Docker 镜像:docker build -t my-node-app .
    • 以后台模式运行容器:docker run -d --name my-running-app -p 3000:3000 my-node-app
    • 在浏览器中访问 https://localhost:3000 或服务器的 https://<服务器IP>:3000,即可看到应用返回的 “Hello, Docker” 信息。

三、 开发环境优化:利用 Docker Compose 与热重载提升效率

在开发阶段,我们需要实现代码实时同步和快速重启。结合 Docker Compose 和 nodemon 工具可以极大提升开发体验。

  • 使用 Docker Compose 编排多容器服务

    当应用依赖数据库(如 MongoDB)时,使用 docker-compose.yml 文件可以统一管理。创建文件内容如下:

    version: "3.8"
    services:
      app:
        build: .
        ports:
          - "3000:3000"
        environment:
          - NODE_ENV=development
          - MONGO_URI=mongodb://mongo:27017/mydb
        volumes:
          - .:/usr/src/app
          - /usr/src/app/node_modules
        depends_on:
          - mongo
      mongo:
        image: mongo:6
        environment:
          MONGO_INITDB_ROOT_USERNAME: root
          MONGO_INITDB_ROOT_PASSWORD: example
        volumes:
          - mongo-data:/data/db
    volumes:
      mongo-data:

    运行 docker-compose up -d 一键启动所有服务。关键技巧:通过 volumes 将本地代码目录挂载到容器,实现实时修改生效;单独挂载 node_modules 卷,避免本地目录覆盖容器内的依赖包。

  • 集成 nodemon 实现自动重启
    • 安装 nodemon 为开发依赖:npm i -D nodemon
    • 在 package.json 的 scripts 中添加:"dev": "nodemon app.js"
    • 在 docker-compose.yml 的 app 服务中,覆盖启动命令以使用开发脚本:
      command: ["npm", "run", "dev"]
  • 环境变量配置管理

    将数据库连接字符串、API密钥等敏感或可变配置写入 .env 文件,在应用中使用 process.env 读取。这种方式安全且便于在不同部署环境(开发、测试、生产)间切换配置。

四、 生产部署优化与故障排查指南

面向生产环境时,需重点关注镜像体积、运行安全和应用稳定性。

  • 采用多阶段构建缩小镜像

    多阶段构建是生产环境的最佳实践,它将构建环境和运行环境分离,最终生成一个仅包含运行所需文件的最小镜像。

    FROM node:18-alpine AS builder
    WORKDIR /usr/src/app
    COPY package*.json ./
    RUN npm ci
    COPY . .
    RUN npm run build
    
    FROM node:18-alpine
    WORKDIR /usr/src/app
    COPY --from=builder /usr/src/app/dist ./dist
    COPY package*.json ./
    RUN npm ci --only=production
    USER node
    CMD ["node", "dist/index.js"]
  • 配置 .dockerignore 文件

    在项目根目录创建 .dockerignore 文件,忽略 node_modules.git.env、日志等非必要文件。这能加速镜像构建过程并减少构建上下文大小。

  • 强化容器安全策略

    始终使用 USER node 指令以非特权用户运行容器进程。在 Docker Compose 中挂载卷时,需注意策略以防止本地空目录覆盖容器内关键的 node_modules 目录。

  • 为服务添加健康检查

    在 docker-compose.yml 或 Dockerfile 中配置健康检查指令,使容器编排工具能够监控应用状态,实现自动恢复。

    healthcheck:
      test: ["CMD", "curl", "-f", "https://localhost:3000/health"]
      interval: 30s
      timeout: 5s
      retries: 3
  • 常见问题与解决方案
    • 应用端口无法访问:检查宿主机防火墙或云服务商的安全组规则,确保已放行应用端口(例如3000)。本地测试请确认使用正确的地址 https://localhost:3000
    • 容器内依赖被本地目录覆盖:在 Docker Compose 的 volumes 配置中,为 /usr/src/app/node_modules 使用匿名卷或命名卷进行隔离保护。
    • 依赖版本不一致问题:坚持使用 npm ci 命令安装依赖,并确保将 package-lock.json 文件纳入版本控制,以锁定确切的依赖版本,保证环境一致性。
来源:https://www.yisu.com/ask/90981125.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

SELinux如何防止Ubuntu漏洞利用
网络安全
SELinux如何防止Ubuntu漏洞利用

SELinux:Ubuntu系统安全加固与漏洞防护的核心机制 在构建安全的Linux系统环境时,SELinux(安全增强型Linux)作为一套强制访问控制框架,常被视为抵御威胁的关键防线。那么,它具体如何运作,又是如何为Ubuntu等系统提供深层次安全保障的呢?其核心原理与实施价值主要体现在以下几个

热心网友
04.15
如何调整ubuntu php-fpm超时时间
编程语言
如何调整ubuntu php-fpm超时时间

如何调整Ubuntu上的PHP-FPM超时时间 在Ubuntu服务器上运行PHP应用程序时,脚本执行超时是常见的性能问题之一。合理配置PHP-FPM的超时参数,能够有效解决请求处理时间过长导致的连接中断或服务器无响应。本指南将详细介绍在Ubuntu系统中修改PHP-FPM超时设置的完整步骤,帮助您优

热心网友
04.15
Ubuntu中Golang编译参数有哪些
编程语言
Ubuntu中Golang编译参数有哪些

Ubuntu下Go编译参数速览 在Ubuntu系统中进行Go项目构建,熟练掌握核心编译参数就如同掌握了高效开发的钥匙。无论是日常编码调试、性能优化,还是为多平台分发应用,合理的参数配置都能显著提升工作效率。本文将系统梳理那些高频且实用的Go构建选项,帮助您在Ubuntu环境下更专业地管理编译流程。

热心网友
04.15
Ubuntu 26.04 LTS Beta 版发布:基于 Linux 7.0 + GNOME 50 + Mesa 26.0
手机教程
Ubuntu 26.04 LTS Beta 版发布:基于 Linux 7.0 + GNOME 50 + Mesa 26.0

Ubuntu 26 04 LTS Beta 版发布:基于 Linux 7 0 + GNOME 50 + Mesa 26 0 来了!代号“坚毅浣熊”的 Ubuntu 26 04 LTS 测试版,已于当地时间 3 月 26 日准时亮相,正式向公众开放测试。按照既定日程,其正式版将在 4 月 23 日与大

热心网友
04.15
Ubuntu Nodejs与Docker如何结合
编程语言
Ubuntu Nodejs与Docker如何结合

Ubuntu 下 Node js 应用 Docker 容器化全攻略:从环境配置到生产部署 将 Node js 应用封装进 Docker 容器,是实现现代化部署和提升应用可移植性的关键步骤。本文将以 Ubuntu 系统为例,系统性地讲解从环境搭建、镜像构建、开发调试到生产优化的完整流程,帮助你高效、安

热心网友
04.15

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

命运方舟圣骑士裁决许可炼金选哪个好-命运方舟圣骑士裁决许可炼金如何选择
游戏资讯
命运方舟圣骑士裁决许可炼金选哪个好-命运方舟圣骑士裁决许可炼金如何选择

在命运方舟中,圣骑士的裁决许可炼金选择至关重要,关乎角色的战斗表现与发展。以下从多维度为您分析如何做出最佳选择。 技能特性考量 圣骑士的裁决许可技能,其炼金选择往往决定了技能的“性格”。一部分炼金方案专精于强化技能伤害,能让裁决许可在瞬间爆发出惊人的单体破坏力,特别适合在Boss战中抓住时机,一举破

热心网友
04.15
《红色沙漠》独臂卢德维格打法技巧分享
游戏攻略
《红色沙漠》独臂卢德维格打法技巧分享

《红色沙漠》独臂卢德维格高效打法全解析:轻松破解雷电攻势 在《红色沙漠》的冒险旅程中,独臂卢德维格堪称玩家面临的一道高难度关卡。作为卢德维格的强化形态,这位人型BOSS不仅战斗力惊人,其标志性的雷电属性攻击更是威胁巨大。一旦玩家角色被其技能命中,将陷入麻痹状态,极大限制行动能力,导致战斗陷入被动。掌

热心网友
04.15
龙岛异兽起源画质设置指南龙岛异兽起源高清画面调节详细教程
游戏攻略
龙岛异兽起源画质设置指南龙岛异兽起源高清画面调节详细教程

《龙岛异兽起源》:画质设置指南与核心玩法解析 对于《龙岛异兽起源》的玩家来说,如何在惊艳的游戏画面与流畅的运行体验之间找到最佳平衡点,是一个关键问题。近期,关于游戏内画质如何优化调整的讨论也日益增多。实际上,操作流程非常清晰直观。本文将系统性地梳理画质调节的具体步骤,并为您深入解析这款游戏的核心玩法

热心网友
04.15
每日一练,经验翻倍!《兵王ol》生存训练带你轻松升级
游戏攻略
每日一练,经验翻倍!《兵王ol》生存训练带你轻松升级

《兵王OL》生存训练攻略:高效获取海量经验,快速升级必备指南 在《兵王OL》的奥丁大陆上,经验值是每位勇士提升实力、突破等级的关键。除了常规的主线任务与日常活动,是否存在一种更高效、更稳定的升级途径?答案是肯定的。生存训练——这一常被玩家忽视的日常任务,正是稳定获取巨额经验、加速突破等级瓶颈的绝佳选

热心网友
04.15
OPPO Pad Mini配置曝光:或搭载骁龙8 Gen 5处理器
科技数码
OPPO Pad Mini配置曝光:或搭载骁龙8 Gen 5处理器

OPPO Pad Mini配置曝光:小尺寸平板,这次要玩点不一样的? 最近,关于OPPO Pad Mini的消息在外媒流传开来。从曝光的信息看,这款小型平板似乎准备在设计和性能上,给市场带来一些新意。 OPPO Pad Mini网传图 极窄边框与纵向使用倾向 先看设计。曝光的图片显示,OPPO Pa

热心网友
04.15