Docker 编译 Node.js 项目并部署至 Nginx

作者:测试鸭时间:2026-10-22 05:00:23浏览:245

本文介绍如何利用 Docker 和 Alpine 系统优化 Node.js 项目的编译与部署流程。通过构建包含预装依赖的基础镜像,显著缩短 npm install 时间。随后使用 Nginx 镜像托管编译后的静态资源,实现前后端分离的高效部署方案。

Docker 编译 Node.js 项目

1.编译Nodejs

利用 Docker 进行 Node.js 的编译工作变得十分便捷。

首先,从 hub.docker.com 获取最新的官方镜像,地址为 https://hub.docker.com/_/node/。

Docker 编译 Node.js 项目

通常情况下,项目会选用 node6 版本的镜像。

docker pull node:6-alpine

获取镜像后,即可直接执行 npm install 命令安装依赖。

Alpine 是一个体积小巧的操作系统,因其占用磁盘空间小、下载迅速且部署快速,在 Docker 编译和运行场景中备受青睐。

这种做法能有效节省磁盘空间,并大幅减少部署所需的时间。

2.使用docker镜像提前下载库

然而,编译过程往往面临耗时过长的问题。

在使用 Node.js 进行开发时,项目中通常包含 package.json 文件,其中列出了具体的依赖包。下载这些依赖可能需要很长时间,一般建议配置阿里云镜像源以加速安装过程。

npm install --registry=https://registry.npm.taobao.org

但在 Docker 构建和编译时,每次都需要重新下载这些依赖,这极大地增加了编译的整体耗时。

构建预装依赖的基础镜像


FROM docker.io/library/node:6-alpine

RUN echo -e "http://mirrors.aliyun.com/alpine/v3.4/main\n\

http://mirrors.aliyun.com/alpine/v3.4/community" > /etc/apk/repositories

COPY package.json /root/

RUN cd /root && npm install --registry=https://registry.npm.taobao.org

为了解决这一问题,可以预先下载好镜像并制作成一个基础镜像,具体操作如下:

构建这个基础镜像的步骤如下:

docker build -t my-demo/node6-alpine:latest .

随后利用该镜像进行编译操作:


#!/bin/sh

mkdir /app && cd /app

git clone xxx.git /app

ln -s /root/.gnupg /app/.gnupg

ln -s /root/.npm /app/.npm

ln -s /root/node_modules /app/node_modules

npm install --registry=https://registry.npm.taobao.org

npm run build

build.sh

利用此基础镜像进行编译,可以省去之前繁琐的 install 过程。

其中 node_modules 是 Node.js 的模块文件夹,编译后的文件存放于 dist 文件夹内。

3.使用nginx启动

首先,从 https://hub.docker.com/_/nginx/ 下载 Nginx 镜像:

Docker 编译 Node.js 项目

使用 Nginx 部署静态资源


FROM docker.io/library/nginx:1-alpine

ADD ./dist/* /usr/share/nginx/html/

EXPOSE 80

ENTRYPOINT ["nginx","-g","daemon off;"]

使用 Nginx 镜像启动容器时,直接将 Node.js 编译后的文件放入 html 目录即可。

构建 Docker 镜像的命令如下:

docker build -t my-demo/nginx:latest .

启动 Docker 容器的命令如下:

docker run -itd -p 8080:80 my-demo/nginx:latest

配置完成后,直接访问 8080 端口即可访问服务。

总结:

(首发,请勿转载。)

当前前后端分离的开发模式虽能提高开发效率,但部署过程相对复杂,需要分别对前后端进行编译,且前端编译耗时较长。通过预先将依赖库打包成 Node 基础镜像,再进行编译,可大幅缩短编译时间。同时,运行环境采用 Nginx 镜像,将 HTML、CSS、JS 等资源文件部署其中,体积仅 20 多 MB。此外,Nginx 中还可配置后台 API,实现前后端集成。Docker 镜像的使用极大提升了开发效率,解决了环境安装配置的难题。

作者最新文章