当前位置: 首页
编程语言
Ubuntu Nodejs与Docker如何结合

Ubuntu Nodejs与Docker如何结合

热心网友 时间: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
    • 在浏览器中访问 http://localhost:3000 或服务器的 http://<服务器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", "http://localhost:3000/health"]
      interval: 30s
      timeout: 5s
      retries: 3
  • 常见问题与解决方案
    • 应用端口无法访问:检查宿主机防火墙或云服务商的安全组规则,确保已放行应用端口(例如3000)。本地测试请确认使用正确的地址 http://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。

同类文章
更多
Ubuntu下php-fpm如何配置缓存策略

Ubuntu下php-fpm如何配置缓存策略

在 Ubuntu 上为 PHP-FPM 配置缓存策略:一份实战指南 想让你的 PHP 应用在 Ubuntu 上跑得更快更稳吗?优化 PHP-FPM 的缓存策略是关键一步。这通常围绕两个核心展开:一是 PHP 代码本身的 OpCode 缓存,二是 PHP-FPM 的进程管理机制。下面,我们就来拆解一下

时间:2026-04-16 09:15
php screw.so,php_screw

php screw.so,php_screw

php_screw PHP脚本通常以明文形式存储在服务器上,这直接导致了源代码泄露的风险。为了有效保护核心业务逻辑与知识产权,对PHP源代码进行加密处理成为一种广泛采用的安全策略。一套完整的PHP加密方案通常包含两个核心组件:一是用于处理源文件的加密工具,二是负责在运行时解密并执行代码的解析引擎。前

时间:2026-04-16 09:14
Ubuntu上JSP应用的备份与恢复策略

Ubuntu上JSP应用的备份与恢复策略

Ubuntu服务器JSP应用备份与恢复全攻略:保障业务连续性的关键步骤 在Ubuntu服务器环境中部署的JSP应用,其稳定运行离不开一套严谨的备份与恢复机制。这份运维指南将为您详细解析如何系统性地保护应用数据,涵盖从文件、数据库到配置的完整方案,确保在突发故障时能快速还原,最大限度减少业务中断时间。

时间:2026-04-16 08:52
Python 3与Python的区别

Python 3与Python的区别

Python 3与Python 2:那些你必须了解的关键演变 在软件开发、数据科学以及人工智能等前沿领域,Python语言占据着举足轻重的地位。伴随着语言的持续演进,从Python 2升级到Python 3是一次里程碑式的重大变革。尽管两者在语法上存在继承关系,但诸多核心差异深刻影响着代码的兼容性与

时间:2026-04-16 07:50
怎样在Debian中备份Python数据

怎样在Debian中备份Python数据

Debian系统Python项目数据备份:完整策略与操作指南 在Debian操作系统上维护Python项目,建立系统化的数据备份机制是保障开发成果安全的关键环节。无论是核心脚本、第三方依赖还是个性化配置,都需要一套可靠的保护方案。本文将详细介绍从规划到执行的完整备份流程,帮助您构建高效的数据安全防线

时间:2026-04-16 07:16
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜
热门教程
更多
  • 游戏攻略
  • 安卓教程
  • 苹果教程
  • 电脑教程