# 实战:部署 Node 服务
下面用一个最小 Node 服务演示从代码到容器运行的完整流程。
# 目录示例
demo-node
├─ app.js
├─ package.json
├─ Dockerfile
└─ .dockerignore
1
2
3
4
5
2
3
4
5
# app.js
const http = require("http");
const server = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "application/json; charset=utf-8" });
res.end(JSON.stringify({ msg: "docker node service ok" }));
});
server.listen(3000, () => {
console.log("server running at 3000");
});
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# package.json
{
"name": "demo-node",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
1
2
3
4
5
6
7
2
3
4
5
6
7
# 构建镜像
docker build -t demo-node:1.0 .
1
# 运行容器
docker run -d --name demo-node -p 3000:3000 demo-node:1.0
1
浏览器访问 http://localhost:3000,返回:
{"msg":"docker node service ok"}
1
# 查看日志与排查
docker logs -f demo-node
docker exec -it demo-node /bin/sh
1
2
2
# 发布镜像(可选)
docker tag demo-node:1.0 yourname/demo-node:1.0
docker push yourname/demo-node:1.0
1
2
2
# 小结
通过这个流程可以掌握三件事:
- 如何用 Dockerfile 构建应用镜像
- 如何把容器端口映射到宿主机
- 如何通过日志与 exec 做基础排查