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 install再COPY . .的顺序可以充分利用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管理多个服务,但那是进阶内容了。
如果有其他问题,欢迎在评论区留言。