在Docker中快速部署Node.js应用的完整指南

作者:栖木

时间:2026-10-30

浏览:389

本文详细介绍如何使用Docker快速部署Node.js Web应用。通过拉取国内镜像、编写Dockerfile构建镜像,并运行容器实现端口映射与后台服务启动,帮助开发者简化环境配置流程,实现应用的高效隔离与部署。

文章目录

Docker部署Node.js应用指南

一、前言

部分开发者可能对Docker尚不熟悉。Docker是一款由Go语言开发的轻量级虚拟化技术项目,旨在实现应用的快速部署。它允许开发者将应用程序及其运行环境打包为一个Docker镜像(Image)。部署至服务器时,仅需下载该镜像即可运行程序,从而省去了反复安装各类依赖和配置环境的繁琐步骤,同时实现了应用程序之间的有效隔离。

环境准备与镜像拉取

二、实现准备

首先,我们将创建一个简单的Node.js Web应用程序,并基于此构建一个镜像。随后,利用该镜像运行一个容器,以此达成快速部署的目标。

受网络环境影响,本次演示中的Node.js镜像将从国内镜像库获取,而非Docker Hub官方仓库。

首先,从国内镜像网站拉取Node.js镜像。


docker pull hub.c.163.com/nce2/nodejs:0.12.2

Docker部署Node.js应用指南

下载完成后,查看本地镜像列表,确认镜像名称,以便后续步骤使用。

Docker部署Node.js应用指南

Node.js程序创建与配置

三、创建Node.js 程序

创建package.json文件,并填入相关信息及依赖配置。


vi package.json

{
 "name": "webtest",
 "version": "1.0.0",
 "description": "Node.js on Docker",
 "author": "lpxxn",
 "main": "server.js",
 "scripts": {
 "start": "node server.js"
 },
 "dependencies": {
 "express": "^4.13.3"
 }
}

创建server.js文件。


vi server.js

编写一个基于Express框架的最简Web应用,返回“Hello world”响应。请注意,此处监听的是8888端口。


'use strict';

var express = require('express');

var PORT = 8888;

var app = express();
app.get('/', function (req, res) {
 res.send('Hello world\n');
});

app.listen(PORT);
console.log('Running on http://localhost:' + PORT);

Dockerfile编写与解析

四、创建Dockerfile

接下来介绍核心文件Dockerfile的创建,这是构建镜像所必需的文件。


vi Dockerfile

Docker引擎将依据Dockerfile的内容来构建镜像。此处先展示完整代码,随后逐行进行解析。


FROM hub.c.163.com/nce2/nodejs:0.12.2

# Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service

# Bundle app source
COPY . /home/Service
RUN npm install

EXPOSE 8888
CMD [ "npm", "start" ]

我们逐句对代码进行解释。


FROM hub.c.163.com/nce2/nodejs:0.12.2

FROM指令指定构建镜像的基础源镜像,hub.c.163.com/nce2/nodejs:0.12.2即为该镜像的名称,也就是此前从国内服务器拉取的Image。若本地未存在该镜像,Docker会自动执行pull操作。


# Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service

第一句RUN指令用于在镜像内创建一个文件夹,用于后续存储代码。

第二句WORKDIR指令将上述创建的文件夹设置为工作目录。


# Bundle app source
COPY . /home/Service
RUN npm install

第一句COPY指令将本机当前目录下的所有文件拷贝至镜像的/home/Service文件夹中。

第二句RUN指令使用npm安装应用所需的所有依赖包。


EXPOSE 8888

由于Web应用监听8888端口,我们通过EXPOSE指令将该端口暴露给主机,从而允许外部访问Web服务。


CMD [ "npm", "start" ]

此部分无需过多解释,它指明了运行npm start命令,该命令将执行node service.js来

启动我们的Web应用。

镜像构建与容器运行

五、构建Image

在Dockerfile文件所在的目录下,执行以下命令以构建镜像。


docker build -t mynodeapp .

请注意命令末尾的点号“.”不可省略。

Docker部署Node.js应用指南

构建完成后,查看本地镜像列表以确认结果。

Docker部署Node.js应用指南

六、运行镜像


docker run -d -p 8888:8888 ac5

-d参数表示容器将在后台运行,-p参数用于端口映射,将本机的8888端口映射到容器的8888端口,这样外网即可通过本机的8888端口访问Web服务。

后续的ac5为镜像ID,由于前3位字符已足以定位该镜像,故此处未列出完整ID。

通过docker ps命令查看刚运行的容器ID。

Docker部署Node.js应用指南

打印日志时,7370即为容器ID。与镜像ID类似,此处仅使用前4位字符已足够标识该容器,后续字符省略以简化操作。


docker logs 7350

Docker部署Node.js应用指南

若需进入容器内部,可执行以下命令。进入后可像操作普通Linux系统一样进行操作。如需退出,请执行exit命令。

Docker部署Node.js应用指南

服务测试与总结

七、测试

首先通过curl命令检查Web服务是否可访问。


curl -i localhost:8888

Docker部署Node.js应用指南

也可通过浏览器界面进行查看。

Docker部署Node.js应用指南

八、总结

本教程至此结束,希望读者已掌握相关技能。若有任何疑问或问题,欢迎留言交流。感谢大家对本站的支持。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章