Docker部署node:手把手教你用Docker部署

为什么选择用Docker部署Node.js

很多新手在部署Node.js应用时,常常遇到环境不一致、依赖冲突、服务器配置复杂等问题。Docker能把这些烦恼一次性解决:把你的Node.js应用连同运行环境一起打包成一个镜像,在任何安装了Docker的服务器上都能一键运行。
下面我带你完整走一遍Docker部署node的流程,保证每一步都能落地。

准备工作:安装Docker并准备一个Node项目

在动手之前,你得确认服务器已经安装了Docker。
如果没装,用下面这条命令(以CentOS为例,Ubuntu类似):

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

装好后运行docker --version,能看到版本号就说明成功了。

接着准备一个简单的Node.js应用。
假设你在服务器上有个文件夹/opt/myapp,里面已经有一个app.js(比如一个Express服务器)和package.json
如果还没有,快速建一个示例:

mkdir -p /opt/myapp && cd /opt/myapp
npm init -y
npm install express --save

然后创建app.js,内容如下:

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello from Docker!');
});

app.listen(port, () => {
  console.log(`App listening at http://localhost:${port}`);
});

项目已经有了,下面就来写Docker的核心文件——Dockerfile

编写Dockerfile:把Node应用装进镜像

在项目根目录/opt/myapp下新建一个文件,就叫Dockerfile(注意没有后缀)。
用文本编辑器写入以下内容:

# 指定基础镜像,这里用官方Node 18-alpine,体积小
FROM node:18-alpine

# 设置容器内工作目录
WORKDIR /app

# 复制package.json和package-lock.json(如果有),先安装依赖,利用缓存
COPY package*.json ./
RUN npm install --production

# 复制项目所有文件
COPY . .

# 暴露应用的端口(对应Express监听端口3000)
EXPOSE 3000

# 启动命令
CMD ["node", "app.js"]

几点说明

  • COPY package*.json ./然后RUN npm installCOPY . .的顺序可以充分利用Docker镜像分层缓存,以后只改代码不改依赖时,构建会快很多。
  • --production只装生产依赖,减小镜像体积。
  • EXPOSE 3000只是声明,真正映射端口要在运行容器时做。

构建镜像并运行容器

1. 构建镜像

/opt/myapp目录下执行:

docker build -t my-node-app .

-t给镜像取名my-node-app,最后的.是上下文路径,别漏了。
构建过程会逐行执行Dockerfile里的指令,稍等一会儿就能看到Successfully built

2. 运行容器

构建成功后,用以下命令启动容器:

docker run -d -p 8080:3000 --name my-node-container my-node-app

参数解释

  • -d后台运行。
  • -p 8080:3000把宿主机8080端口映射到容器内3000端口,这样访问服务器IP:8080就能看到应用。
  • --name给容器命名。
  • my-node-app是镜像名称。

运行后可以用docker ps确认容器处于Up状态。

3. 测试效果

在服务器上或者浏览器里访问http://服务器IP:8080,应该能看到Hello from Docker!
如果想看容器日志,用docker logs my-node-container

常见问题与避坑

问题1:端口被占用
如果-p 8080:3000提示端口冲突,换一个宿主端口,比如-p 8081:3000,同时记得在云服务器安全组放行新端口。

问题2:构建时npm install报错

检查网络,有时npm官方源慢,可以在Dockerfile里换源:

RUN npm config set registry https://registry.npmmirror.com && npm install --production

问题3:容器启动后立即停止

先看日志docker logs 容器名,常见原因是app.js里端口写错或者缺少依赖。
确保Dockerfile中的CMD命令正确,且WORKDIR路径下的文件齐全。

问题4:文件修改后如何更新

重新构建镜像再运行新容器:

docker build -t my-node-app .
docker stop my-node-container
docker rm my-node-container
docker run -d -p 8080:3000 --name my-node-container my-node-app

如果想保留数据,可以考虑挂载卷,但新手阶段先理解基础流程。

总结

通过以上步骤,你已经掌握了Docker部署node的核心操作:安装Docker、准备项目、编写Dockerfile、构建镜像、运行容器,以及常见问题的排查思路。
建议你亲自在服务器上敲一遍,遇到异常优先回顾“避坑”部分。
之后还可以尝试用docker-compose管理多个服务,但那是进阶内容了。
如果有其他问题,欢迎在评论区留言。

分享到:
上一篇
轻松搞定WordPress网站SEO内链优化,零基础也能操作
下一篇
服务器API服务器搭建实战:宝塔面板+Node.js部署
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意